Strange gpu arrayfun behavior
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
nealm
el 20 de Jul. de 2018
Comentada: Joss Knight
el 26 de Jul. de 2018
I have existing code that works but I'd like to accelerate using the GPU version of arrayfun. However the behavior of GPU arrayfun is difficult to understand. According to the documentation the code within the helper function performs scalar operations on the input gpuArray values. However if I try to write my own scalar values the result is unpredictable. To demonstrate, if I have a helper function that look like:
function outArray = simpleTest(inArray)
outArray = inArray * 3.14159;
end
x = gpuArray(1:4);
y = arrayfun(@simpleTest, x);
y = gather(y)
y =
Columns 1 through 2
0.0000 + 0.0000i 0.0000 + 0.0000i
Columns 3 through 4
0.0000 + 0.0000i 0.0000 + 0.0000i
If I pass the scalar value to the helper function, as shown in the second helper function, it does seem to work:
function outArray = simpleTest2(inArray, scalarValue)
outArray = inArray * scalarValue;
end
y = arrayfun(@simpleTest2, x, 3.14159);
y = gather(y)
y =
3.1416 6.2832 9.4248 12.5664
Reading the documentation, I know that the scalar values in the calling function are expanded (similar to bsxfun) however I have been unable to get that function, or any other function, to work within the helper function. I know I'm missing something here, I would appreciate the help.
I have Matlab R2018a with Parallel Computing Toolbox and Cuda version 9.0 installed.
5 comentarios
Joss Knight
el 24 de Jul. de 2018
Okay, so the next thing to do is to check and upgrade your driver. What is your device? What is your driver version?
gpuDevice
parallel.internal.gpu.CUDADriverVersion
Respuesta aceptada
nealm
el 25 de Jul. de 2018
6 comentarios
Joss Knight
el 26 de Jul. de 2018
Thanks for the investigation! I'll have a look at why str2double is involved and whether I can reproduce your issue. MTree is used to do static analysis of your arrayfun function for the GPU, and presumably str2double is being used to convert the text of your literal value. It may well be a bug that it's possible to break arrayfun by shadowing this function.
Más respuestas (0)
Ver también
Categorías
Más información sobre GPU Computing in MATLAB 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!