How to know in advance if creating matrix will run out of memory?
1 次查看(过去 30 天)
显示 更早的评论
I need to create a matrix of size N-by-M as part of a script, where N and M are inputs to the script.
So I will know N and M, and then depending on their size choose do one of the following three:
i) I want to create a gpu matrix when N and M are small enough that the relevant matrix will fit on gpu without creating an out of memory error.
ii) When N and M are too large for this I want to create the matrix on the cpu instead.
iii) If N and M are so large that I would run out of memory on the cpu then I want to create the matrix as a sparse matrix on the cpu.
Is there a way, once I know N and M, to check if the matrix will be possible to create?
[I could use 'try-catch-end', with try just erroring when creating a matrix too large for memory, but I would prefer something cleaner as I suspect that runtime to do the try-catch on a matrix too large for memory is wasteful]
0 个评论
采纳的回答
Raymond Norris
2021-12-21
Look at the memory command, but it's only for Windows operating system. The gpuDevice command will return AvailableMemory of a GPU. This can get you started. Keep in mind memory needed to operate on it (e.g., adding matrices, fft, etc.). It might suprise you how much memory gets used on a GPU with several matrices.
2 个评论
Raymond Norris
2021-12-21
Try
sz = N * M * size-of-unit / 1024 ^ units;
size-of-unit depends on int8 . . . int64 (i.e., 1 . . . 8) and units depends on MB or GB (i.e., 2 or 3). For example, size of N,M double matrix in GBs would be
sz = N * M * 8 / 1024 ^ 3;
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!