你好。我正在尝试了解执行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;
gpumem = 8e9;
百分比=(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
百分比=(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,我认为在考虑变换矩阵时,它应该需要至少两倍的存储器(包括该变换矩阵的零)。但它似乎更加存储器而不是所需的内存。