【问题标题】:efficiently use the memory of GPU in matlab在matlab中有效利用GPU的内存
【发布时间】:2020-07-09 13:32:58
【问题描述】:

我在 matlab 中使用 GPU 进行计算。我不断收到Out of memory 的问题。 所以我想我可以将我的一些变量从double(matlab 的默认类型)转换为single。然后我做了以下实验

A = gpuArray([1,2,3])
A = 
1  2  3

whos A
Name   Size   Bytes  Class
A      1*3     4     gpuArray

B = gpuArray(single([1,2,3]))
B = 
1*3 gpuArray single row vector
1  2  3

whos B
Name   Size   Bytes  Class
B      1*3     4     gpuArray

现在我有点困惑。一方面,它确实告诉我B1*3 gpuArray single row vector。但是,另一方面,whos 命令显示AB 之间没有区别。

我想知道这种doublesingle 的转换是否确实会帮助我减少我在matlab 中的GPU 的内存使用量。基本上,我的问题是:当我在 cpu 上移动 2 个变量时,一个是 double,另一个是 single,到 gpu,它们在 matlab 中是否消耗相同数量的 GPU 内存? whos 命令显示没有区别。

【问题讨论】:

    标签: matlab memory-management gpu


    【解决方案1】:

    注意以下几点:

    A = gpuArray([1:1000])
    whos A
      Name      Size              Bytes  Class       Attributes
    
      A         1x1000                4  gpuArray  
    

    有趣!只有4个字节! 但这有一个简单的解释:whos 只为您提供 CPU RAM 上变量的大小。它的 4 个字节,因为它只是一个内存地址,而不是数据本身。数据在 GPU 上,CPU 无法“轻松”访问。

    回答您的问题:是的,single 将占用 GPU 上 double 一半的内存。

    【讨论】:

    • 是的,我自己也做过一个实验。我有 2 个完全相同的代码,除了一个代码我将所有变量定义为单个。然后其他代码给了我内存不足的错误,而所有单个代码都能够成功运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2018-05-16
    • 2015-03-10
    • 2013-08-17
    • 1970-01-01
    相关资源
    最近更新 更多