Memory increases on GPU while performing modification inplace

5 views (last 30 days)
When I allocate squeeze a 3D array to output a 2D array, my memory is increasing while I think I performing the modification inplace. That way I would expect that since the number of elements in the array does not incease, the memory used on the GPU does not increase.
However, I see something different in the task manager. What is going on?
  • MATLAB Version: (R2020a) Update 6
  • Operating System: Microsoft Windows 10 Enterprise Version 10.0 (Build 18363)
  • NVidia GeForce RTX 3090
data = zeros(5632000, 128, 2, 'int16');
function testSO(RF)
whos RF % int16 2.75 GB
size(RF); % 5632000x128x2
% GPU memory at beginning 1.2 GB
RF = gpuArray(RF); % 3.9 GB
RF = squeezingSuperFrames(RF); % 6.6 GB
function RF = squeezingSuperFrames(RF)
% concatenate pages of 3D array to create tall RF array
RF = reshape(permute(RF, [1 3 2]), [], size(RF, 2), 1);

Answers (2)

Joss Knight
Joss Knight on 10 Oct 2021
MATLAB cannot perform this operation in place because data is a workspace variable. MATLAB has no way of knowing there won't be an error or user interrupt (Ctrl-C) during execution, so it takes a copy of data to ensure your workspace would not be corrupted.
rinkert on 12 Oct 2021
Thanks for the pointer to AvailableMemory, that indeed showed that there is still memory available while nvidia-smi shows it up as in use.

Sign in to comment.

Matt J
Matt J on 10 Oct 2021
reshape() does not result in data copying, but permute() does. It cannot be done in place, because it is reordering the data in memory.
rinkert on 12 Oct 2021
yes indeed the memory is freed after the function call is completed. Seems like the memory is already available before, if I look at g=gpuDevice(); g.AvailableMemory before the function exits.

Sign in to comment.


Find more on Get Started with MATLAB in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by