Does GPU coder have only one output?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
lim daehee
el 22 de Nov. de 2019
Editada: lim daehee
el 27 de Nov. de 2019
I'm changing a function into mex file with GPU coder, and I have a problem while I using the GPU coder.
I want to get two matrices; D, N as the output of fcn_DH.
When I executed GPU coder with a code below, Running test file with MEX is not terminated, thus I cannot make MEX file.
However, When I changed the first line of the function into 'D = fcn_PRM(node,PosMap)', which has only one output, the GPU coder worked fine.
I'm wondering if I can apply the GPU coder to a function and only get one variable as a result.
Otherwise, if GPU coder can multiple outputs, I want to know which part of my code is wrong.
function [D,N] = fcn_PRM(node,PosMap)
n = length(node);
D = coder.nullcopy(zeros(n,n,2));
N = coder.nullcopy(zeros(n,n));
len=(1:n)';
pos_mat=PosMap(node(len),:);
coder.gpu.kernel;
for i=1:n-1
for j=i+1:n
dist=sqrt((pos_mat(i,1)-pos_mat(j,1))^2+(pos_mat(i,2)-pos_mat(j,2))^2+(pos_mat(i,3)-pos_mat(j,3))^2);
B = collisionCheck_SP5(PosMap(node(i),:), PosMap(node(j),:));
D(i,j,1) = dist;
N(i,j) = B;
end
end
6 comentarios
Pravin Jagtap
el 25 de Nov. de 2019
Hello Lim,
Refer to following documentation to understand GPU coder workflow:
For code generation, we need to define 'primary' function which is 'fcn_PRM' in your case and 'entry-point function' which is used for the defining the input variables.
Still earlier issue persists since you are loading the data from ''dlite_small.mat'' which is not accessible to me. Also, please verify the code and provide all the necessary inputs for reproducing the error by executing the code.
Respuesta aceptada
Pravin Jagtap
el 25 de Nov. de 2019
Hello Lim,
After analyzing the code, It is clear that you are not able to generate ‘MEX’ because the ‘%#codegen’ directive is missing in the function definition at beginning. To generate the ‘MEX’ please add the ‘%#codegen’ directive as shown below at the starting of the Entry-Point function:
function [D,N] = fcn_PRM(node_PRM,PosMap) %#codegen
%…
%…
end
Also, make sure that the same function is getting called in the ‘Define Input Type’ stage.
Kind Regards
~Pravin
3 comentarios
Pravin Jagtap
el 26 de Nov. de 2019
Hello Lim,
One of the possible reasons can be the data copy from Device to Host which can add extra overhead and the size of matrix is also considerable in your case. There can be other possible reasons as well.
~Pravin
Más respuestas (0)
Ver también
Categorías
Más información sobre Kernel Creation from MATLAB Code en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!