Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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
如何将带有嵌套for循环的函数转换为Cudafy.Net_Cuda_Gpu_Cudafy.net - Fatal编程技术网

如何将带有嵌套for循环的函数转换为Cudafy.Net

如何将带有嵌套for循环的函数转换为Cudafy.Net,cuda,gpu,cudafy.net,Cuda,Gpu,Cudafy.net,我不敢相信,在我做了所有的研究和阅读之后,我仍然不完全清楚如何做到这一点,所以我必须问。。我正在尝试在gpu卡上运行以下内容,我正在使用Cudafy.Net生成CUDAC等价物。我想让它尽可能快地运行 如果我有一个功能(简化),例如: 我熟悉作为第一个参数传递的GThread、blocksize.x、blockdim.x和threadsize.x,以及块的y和z。我很难理解for语句是否消失了,我用类似的测试来代替它们 if ( y < lgeHeight ) if ( x <

我不敢相信,在我做了所有的研究和阅读之后,我仍然不完全清楚如何做到这一点,所以我必须问。。我正在尝试在gpu卡上运行以下内容,我正在使用Cudafy.Net生成CUDAC等价物。我想让它尽可能快地运行

如果我有一个功能(简化),例如:

我熟悉作为第一个参数传递的GThread、blocksize.x、blockdim.x和threadsize.x,以及块的y和z。我很难理解for语句是否消失了,我用类似的测试来代替它们

if ( y < lgeHeight )
    if ( x < lgeWidth )
...
if(y
但是,我不知道如何“将每个迭代与递增的lgDY和lgDX联系起来”


如果这是显而易见的事情,或者我没有准确描述我要做的事情,我深表歉意。只是对如何使嵌套循环正确感到困惑。我感谢所有帮助我朝着正确的方向前进。

这取决于lgeHeight和lgeWidth的大小。如果它们的乘积小于然后,当您启动内核时,您可以假设每个线程将在一对x和y上运行

lgDY = threadIdx.x
lgDX = blockIdx.x

然后您可以一次计算所有线程。如果您的线程数超过产品数,则需要将问题分成更小的部分,或对每个矩阵进行一次小迭代。

感谢您的回复。该卡的每个块的最大线程数为1024,最大线程尺寸(1024,1024,1)和最大网格尺寸为1024(2147483647,65535,1)和lgeHeight=2150和lgeWidth=4300,得到9245000。如果网格尺寸是我比较的参数,那么看起来我有足够的线程?我想这取决于你的卡。你使用的卡是什么?我不知道有那么多线程的卡。我使用的是GeForce GTX 1050 Ti
if ( y < lgeHeight )
    if ( x < lgeWidth )
...
lgDY = threadIdx.x
lgDX = blockIdx.x