Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cuda 袖口性能计算_Cuda_Fft_Cufft - Fatal编程技术网

Cuda 袖口性能计算

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性能的正确方法吗

我在多个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性能的正确方法吗?有没有其他方法可以表示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性能,所以我问。