在完成所有研究和阅读之后,我不敢相信我仍然不是 100% 清楚如何做到这一点,所以我必须问.. 我试图让类似下面的东西在 gpu 卡上运行并且我正在使用 Cudafy.Net 生成 Cuda C 等效项。我想让它尽可能快地运行。
如果我有一个功能(简化),例如:
Transform()
{
for (lgDY = 0; lgDY < lgeHeight; lgDY++)
{
for (lgDX = 0; lgDX < lgeWidth; lgDX++)
{
// do a lot of stuff with lgDY and lgDX like stuff a matrix
}
}
}
我使用 Launch() 函数调用它,如下所示:
gpu.Launch(blocksize, threadsize, "Transform", args...)
我熟悉作为第一个参数传递的 GThread、blocksize.x、blockdim.x 和 threadize.x,以及块的 y 和 z。我很难理解 for 语句是否消失,我用类似的测试替换它们
if ( y < lgeHeight )
if ( x < lgeWidth )
...
但是不知道如何“将每次迭代与递增的 lgDY 和 lgDX 联系起来。
如果这是明显的事情,或者我没有准确地描述我正在尝试做的事情,我深表歉意。只是对如何使嵌套循环正确感到困惑。我感谢任何帮助我朝着正确的方向前进。