How to know in advance if creating matrix will run out of memory?
    5 views (last 30 days)
  
       Show older comments
    
    Robert Kirkby
 on 21 Dec 2021
  
    
    
    
    
    Commented: Raymond Norris
    
 on 21 Dec 2021
            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 Comments
Accepted Answer
  Raymond Norris
    
 on 21 Dec 2021
        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 Comments
  Raymond Norris
    
 on 21 Dec 2021
				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;
More Answers (0)
See Also
Categories
				Find more on Matrix Indexing 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!
