Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Optimization CUDA:通过迭代过程优化延迟_Optimization_Cuda_Fft_Latency - Fatal编程技术网

Optimization CUDA:通过迭代过程优化延迟

Optimization CUDA:通过迭代过程优化延迟,optimization,cuda,fft,latency,Optimization,Cuda,Fft,Latency,我有一个迭代计算,每次迭代都需要一个傅里叶变换 在高层,它看起来是这样的: // executed in host , calling functions that run on the device B = image L = 100 while(L--) { A = FFT_2D(B) A = SOME_PER_PIXEL_CALCULATION(A) B = INVERSE_FFT_2D(A) B = SOME_PER_PIXEL_CALCULATION(B

我有一个迭代计算,每次迭代都需要一个傅里叶变换

在高层,它看起来是这样的:

// executed in host , calling functions that run on the device
B = image
L = 100
while(L--) {
    A = FFT_2D(B)
    A = SOME_PER_PIXEL_CALCULATION(A)
    B = INVERSE_FFT_2D(A)
    B = SOME_PER_PIXEL_CALCULATION(B)
}
我正在使用“cufft”库进行转换

现在的问题是,我总是使用全局内存

基本上,如果有一种方法可以用共享内存完成一些工作,那就太好了

但使用FFT似乎不允许我绕过这个问题,因为“cufft”库函数只能从主机调用,并将输入和输出存储在全局内存中

我应该如何处理这个问题

谢谢


编辑:

因为存在数据依赖关系。看起来我除了优化“每像素”的计算之外,什么都做不了

瓶颈仍然是由于内核通过全局内存传递数据,这在这种情况下似乎是不可避免的

所以,基本上,我必须做一个变换,它是逆的,这是阻止我共享中间计算数据的原因

目前我正在探索在频率空间进行大部分计算的方法。 (更多的是一道数学题)

那么,在给定F{F(x,y)}的情况下,有人对如何计算F{max(0,F(x,y))}有好的想法吗


编辑:

注意f(x,y)在时域中,因此是实值的


f(x,y)也是在计算逐点最大值(0,f(x,y))之前进行处理的,因此确实有可能出现负值。

关于FFT/IFFT,我认为您错误地假设CUFT例程在内部不使用共享内存。FFT计算的典型算法将整个FFT分割成适合一个线程块的较小的FFT,因此它们可能已经在内部利用了共享内存,请参见示例

关于每像素计算,共享内存通常用于使线程块内的线程相互协作。我的问题是:每像素的计算相互独立吗?如果是这样,可能不需要线程协作,也不需要共享内存,只使用寄存器来安排计算


无论如何,对于后一点,你应该提供更多关于你实际需要的信息(通过编辑你的原创文章)。您的代码是否与Gerchberg-Saxton算法的实现有关?

您是说A和B在全局内存上?是的,主要是因为“cufft”库只允许在全局内存上操作。假设cufft调用(FFT\u 2D、Reverse\u FFT\u 2D)编写得很好,并且尽可能充分利用共享内存。这意味着您需要将注意力集中在一些每像素计算例程上。仅仅因为图像或其变换存储在全局内存中,并不意味着共享内存不能很好地使用。但是如果不知道你的每像素函数在做什么,就没有什么可以说的了。除非整个图像小于48K字节,否则您无法将其放入共享内存。您如何将0与复数进行比较?@BenMatok我已在上发表了一些关于您数学问题的评论。我希望他们会有所帮助。