GPU computing: data no longer available on device??
2 次查看(过去 30 天)
显示 更早的评论
Hi all,
the following code gives me an error sometimes:
if isa(rawData,'gpuArray')
rawData = gather(rawData);
gpuSwitcheroo = 1;
else
gpuSwitcheroo = 0;
end
The error is: Error using gpuArray/gather The data no longer exists on the device.
I really cant make any sense of this, since the if statement should already check whether or not the variable is on the GPU, right?? How could it possibly not be on the GPU anymore if that statement just resulted in the variable being of type 'gpuArray'??
This only occurs on a system with very limited GPU memory, but I checked and during that specific operation the memory is not exceeded! It is however beforehand, and as a result of that, rawData is automatically gathered, hence the usage of that if-statement. But then how can the statement be true, if rawData has already been gathered??
I'm really confused, hopefully someone knows whats going on.
Thanks!
0 个评论
回答(1 个)
Edric Ellis
2019-11-28
That error occurs when MATLAB resets the GPU "context". This generally happens when you either select a different GPU device, or reset the current device. In both cases, the class of your data doesn't change, but the ability to retrieve the contents is lost. You need to use the function existsOnGPU to tell whether or not the data is still accessible, like this:
g = gpuArray(1:10);
isa(g, 'gpuArray') && existsOnGPU(g) % returns true
reset(gpuDevice) % force invalidation of the GPU "context"
isa(g, 'gpuArray') % still true
existsOnGPU(g) % false
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Get Started with GPU Coder 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!