【发布时间】:2025-12-01 22:00:02
【问题描述】:
我正在使用 Cudafy 在 NVIDIA GPU 上进行一些计算。 (Quadro K1100M 功能 3.0,如果重要的话)
我的问题是,当我使用以下内容时
cudaGpu.Launch(new dim3(44,8,num), new dim(8, 8)).MyKernel...
为什么当我在内核中使用 GThread 实例时,我的 z 索引总是为零?
int z = thread.blockIdx.z * thread.blockDim.z + thread.threadIdx.z;
此外,如果我必须做类似的事情
cudaGpu.Launch(new dim3(44,8,num), new dim(8, 8, num)).MyKernel...
z 确实给出了不同的索引,但是由于每个块的线程数的限制,num 不能很大。关于如何解决这个问题的任何建议?
编辑
另一种表达方式。当块大小仅为 2D 时,我可以在内核中使用 thread.z(用于任何有用的东西)吗?
【问题讨论】:
-
0 可能是默认值?您应该始终为您的“num”提供至少 1 的值。要处理每个块的线程数限制,只需增加块数(因此,更多块更少线程)。
-
num 只是表示它可以是任何东西,但我很肯定它 > 0。
-
我对cudafy了解不多,但可能是在cuda允许gridDim.z维度之前设计的dot net和cuda之间的映射尚未更新并且不考虑z维度。这需要验证
-
经过研究,我只发现了一个用户指出 CUDAfy 为他的设备报告错误 CC 的主题:cudafy1.rssing.com/chan-12112480/all_p2.html。可能正因为如此,它认为它*无法启动 3 维网格,尽管您的设备可以。
标签: c# cuda cudafy.net