'radix_sort: failed to get memory buffer' when executing accumarray on gpuArrays of certain size
7 views (last 30 days)
I'm trying to use accumarray on large gpuArrays, but get the error 'radix_sort: failed to get memory buffer'.
This is a minimal example that gives me the error:
a = randi(intmax, 2^28-2048, 1, 'gpuArray');
b = gpuArray(randi(3, 2^28-2048, 3, 'uint16'));
c = accumarray(b,a);
When I do the same with arrays of size [2^28-2047 1] and [2^28-2047 3] it works.
This is my gpuDevice after creating a and b:
CUDADevice with properties:
Name: 'GeForce GTX 1080 Ti'
MaxThreadBlockSize: [1024 1024 64]
MaxGridSize: [2.1475e+09 65535 65535]
Shouldn't this be enough memory for this kind of operation?
I'm running version 188.8.131.524444 (R2018b) on Linux.
I can work around this problem but I'd like to understand it so I can adapt my code accordingly.
Ganesh Regoti on 31 Jul 2019
I have run the code on TitanV and it works fine. The array of larger size is working fine. So, I think there is no memory issue in it.
Try to clear the memory of GPU device through reset command. Here is the link
Now, try to re-run the code.
Joss Knight on 17 Aug 2019
Edited: Joss Knight on 17 Aug 2019
There is an issue in an NVIDIA library that is not functioning correctly when memory is limited. This is fixed in CUDA 10 / MATLAB R2019a.
In the meantime, try
poolSize = feature('GpuAllocPoolSizeKb', 0);
as a temporary measure to turn off the pooling of memory that's underlying this issue. When you are ready to enable pooling again use
This is advisable since turning off pooling will significantly reduce performance.