Concurrent write to gpuArray
1 次查看(过去 30 天)
显示 更早的评论
Is there a way for multiple threads of an arrayfun or other structure to write to the same gpuArray matrix, if I do not care about the order of writes (it is a array of falses and i only ever write trues) and will not read the array by gather until all threads are finished? Doing this by local output and reduction will consume too much memory.
Application: a monochrome 2d rasterizer that processes multiple polygons onto the frame buffer simultaneously
0 个评论
回答(2 个)
Matt J
2015-8-8
编辑:Matt J
2015-8-8
Even if there's a way, I think it will be very slow. GPUs are not designed to share large data across threads. However, one strategy might be to use gpuArray.arrayfun to prepare a table of the values to be written and their matrix coordinates (I,J,S). Then later, on the CPU, do
A_new=A_old+sparse(I,J,S)
Or, use accumarray instead of sparse(), if the resulting matrix is not sparse. Each GPU thread could compute a single triplet I(k),J(k), S(k) effectively assuming these computations are small, parallel, and don't share large data
Joss Knight
2015-9-2
In short, no, not in MATLAB code. arrayfun has to write one value per thread to a separate output address. Write a CUDAKernel or MEX function in C++.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 GPU Computing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!