除了矩阵转换外,需要多少额外的内存来进行3D FFT ?GPU应用程序。

7次浏览(最近30天)
内森·ZECHAR.
内森·ZECHAR. 20月10日
评论: 内森·ZECHAR.2020年5月15日
你好。我正在尝试了解执行FFT需要多少内存,以及在GPU上执行它的情况不同。
例如,它看起来我只能在抛出错误之前利用高达67%的GPU内存。我似乎无法超越这个价值
清晰的所有
nx = 256;
纽约= 256;
nz = 512;
a = rand(nx,ny,nz)+ 1i * rand(nx,ny,nz);
= gpuArray ();
a = fftn(a);
B =兰特(Nx、纽约、新西兰)+ 1我*兰德(Nx、纽约、新西兰);
B = gpuArray (B);
b = fftn(b);
c = rand(nx,ny,nz)+ 1i * rand(ny,ny,nz);
C = gpuArray (C);
C = fftn (C);
D =兰特(Nx、纽约、新西兰)+ 1我*兰德(Nx、纽约、新西兰);
d = gpuarray(d);
d = fftn(d);
E =兰特(Nx、纽约、新西兰)+ 1我*兰德(Nx、纽约、新西兰);
E = gpuArray (E);
E = fftn (E);
F =兰特(Nx、纽约、新西兰)+ 1我*兰德(Nx、纽约、新西兰);
F = gpuArray (F);
f = fftn(f);
G =兰特(Nx、纽约、新西兰)+ 1我*兰德(Nx、纽约、新西兰);
g = gpuarray(g);
g = fftn(g);
h = rand(nx,ny,nz)+ 1i * rand(nx,ny,nz);
H = gpuArray (H);
H = fftn (H);
I =兰特(Nx、纽约、新西兰)+ 1我*兰德(Nx、纽约、新西兰);
我= gpuarray(i);
我= fftn(i);
J =兰特(NX,NY,NZ)+ 1I *兰特(NX,NY,NZ);
J = gpuArray (J);
J = fftn (J);
字节= 16;用于复数的%字节
tbytes = ny * ny * bits;%总字节数
notran = 10;%内存中FFT变换的个数
gpumem = 8e9;%8 GB的GPU记忆
%所有转换使用的GPU内存的理论百分比
百分比=(tbytes / gpumem)* notran * 100;
ANS = 67.1089.
如果我添加另一个矩阵,假设用和其他矩阵相同的方法添加K,就会产生一个错误。
如果调用GPU,它会显示我得到的答案与我的计算不同
gpuDevice
ans =.
CUDADevice属性:
姓名:“GeForce RTX 2070 with Max-Q Design”
指数:1
computEcapability:'7.5'
万博1manbetxSupportsDouble: 1
DriverVersion: 1.0200 e + 01
ToolkitVersion: 1.0100 e + 01
maxthreadsperblock:1024
MaxShmemPerBlock: 49152
maxthreadblocksize:[1024 1024 64]
MAXGRIDSIZE:[2.1475E + 09 65535 65535]
SIMDWIDTH:32
TotalMemory:8.5899E + 09
avabablememory:1.5127e + 09
TotalMemory = 8.5899 e + 09年
availablememory = 1.5127e + 09
% GPU内存占用百分比
百分比=(1 - avabablememory / totalMemory)* 100
ANS = 82.390.
这个答案有点让人困惑,因为我确保只启用计算机的集成图形,而不是GPU。如果我重新运行所有矩阵并检查可用内存,在NVIDIA控制面板中更改此设置似乎不会改变'AvailableMemory'。
所以我对“Tbytes”的计算是错误的,因为它似乎使用了更多的内存。另外,GPU上似乎有8.6 g的可用内存——我不会抱怨的。
那么,除了起始矩阵之外,在MATLAB中执行3D FFT需要多少额外的内存,并且在GPU上执行一个差异?
也就是说,对于某些矩阵A由锥形号和大小(NX * NY * NZ)组成 - 理论上它应该需要(nx * ny * nz)* 16字节的内存。然而,为了在该矩阵上进行3D FFT,我认为在考虑变换矩阵时,它应该需要至少两倍的存储器(包括该变换矩阵的零)。但它似乎更加存储器而不是所需的内存。

接受答案

哈扎屁股
哈扎屁股 于2020年5月13日
编辑:哈扎屁股 于2020年5月13日
嗨,内森,
执行FFT操作时需要考虑一些额外的内存要求:
  1. 该操作已停止,这意味着对存储结果进行矩阵的副本。
  2. 执行操作所需的FFT计划的大小取决于输入数据的属性。有关cuFFT计划的更多信息,请参阅:https://docs.nvidia.com/cuda/cufft/index.html#cufft-setup.
  3. 在FFT的执行过程中,需要一个临时工作空间,其大小取决于FFT方案中选择的算法。对于维度为2的乘方的数据,cuFFT需要更小的工作空间内存。如果数据维是较大质数的因素,则这种情况会增加,因为cuFFT使用的其他算法可能比输入数据本身使用更多的工作空间内存。
  4. MATLAB还加载CUDA库,它可能会在初始化时耗尽自己的内存。
虽然您已经占(1),但(2)和(3)的内存要求可能很难估计,因为它们依赖于袖口的内部。(4)对于使用GPUARRAYS的每个MATLAB实例将是常量。
在回答你关于总可用内存为8.5899e+09字节的问题:如果你已经安装CUDA,你可以运行“ nvidia-smi ”或“ nvidia-smi——query-gpu =记忆。总- = csv格式 ,你可以在“MiB”中找到总内存。注意“MiB”和“MB”是不一样的,对于RTX 2070 Max-Q(和我的RTX 2080 Max-Q),“8192MiB”转换为你看到的字节值。
我希望这回答了你的问题。如果您想要任何进一步的澄清,请告诉我。

更多答案(0)

标签

s manbetx 845

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!