Cuda 袖口性能计算
我在多个GPU中划分的块(N*N/p)上运行CUFFT,我对计算性能有疑问。首先,谈谈我是如何做到这一点的:Cuda 袖口性能计算,cuda,fft,cufft,Cuda,Fft,Cufft,我在多个GPU中划分的块(N*N/p)上运行CUFFT,我对计算性能有疑问。首先,谈谈我是如何做到这一点的: 向每个GPU发送N*N/p块 p GPU中每行的分批1-D FFT 将N*N/p块返回主机-对整个数据集执行转置 同上步骤1 同上步骤2 Gflops=(1e-9*5*N*N*lg(N*N))/执行时间 执行时间计算如下: executiontime=Sum(每个GPU的行和列FFT的memcpyHtoD+内核+memcpyDtoH时间) 这是在多个GPU上评估CUFFT性能的正确方法吗
Gflops=(1e-9*5*N*N*lg(N*N))/执行时间
执行时间计算如下:
executiontime=Sum(每个GPU的行和列FFT的memcpyHtoD+内核+memcpyDtoH时间)
这是在多个GPU上评估CUFFT性能的正确方法吗?有没有其他方法可以表示FFT的性能
谢谢。如果您正在进行复杂变换,则运算计数是正确的(实值变换应为2.5 N log2(N)),但GFLOP公式不正确。在并行多处理器操作中,通常的吞吐量计算是
operation count / wall clock time
在您的情况下,假设GPU并行运行,请测量执行时间的挂钟时间(即整个操作所用的时间),或使用以下方法:
execution time = max(memcpyHtoD + kernel + memcpyDtoH times for row and col FFT for each GPU)
目前,您的计算表示串行执行时间。考虑到多GPU方案的开销,我预计您得到的计算性能数字将低于在单个GPU上进行的等效转换。这是一个真实的转换还是复杂的转换?cufftZ2Z-我在执行时包括fft计划创建和销毁计时是否正确?如果我不把它们包括在内,我会发现有相当大的区别……没有“正确”的答案。你应该准确地报告你的时间安排。计划创建可能包括惰性运行时API上下文建立。如果是这样的话,你可能不想这样。我并不真正使用CUFFT,也不太了解它的内部结构。出于好奇,为什么有5*1e-9(问题是“5”部分)@CarlodelMundo:N长的复数FFT的运算计数是
5N log2(N)
(这就是5的来源)。1e-9
是一个从FLOP/s到GFLOP/s的转换因子。谢谢,我在出错的地方得到了它。如果包含数据传输,那么GPU的性能可以与CPU中的n个线程的性能相媲美,这是正确的吗?对不起,我不明白你想问什么。我注意到,如果我在执行时间中包含memcpyHtoD/DtoH时间,那么CPU上多个线程上的GPU和fftw的GFLOP接近;因为我的目标是比较fft和gpu的cpu性能,所以我问。