【发布时间】:2017-11-06 04:51:25
【问题描述】:
我刚开始使用 CUDA 编程,与普通 CPU 相比,我对速度感到困惑。但是,我现在开始考虑一个简单的逻辑考虑。我在设备代码中,我要检查 4D。我创建了一个 constant 变量,并使用 atomicAdd 通过设备代码在每次迭代中添加。
//get global counter
int global_index = atomicAdd(&counter, 1);
然后我考虑一个 4D 体积,并尝试将线性索引映射到 4D 体积。我知道对于 2D 和 3D,有一种从 1D 索引转换为 3D 映射的有效方法。但是,我不知道这种方法如何扩展到更高的维度。
int x = gcfg->dimlen.x;
int y = gcfg->dimlen.y / x;
int z = gcfg->dimlen.z / gcfg->dimlen.y;
int photons = numberofphotons[1];
这是我的 4 个维度的长度。所以,重申一下我遇到的问题:我有一个索引,我想映射到一个 4D 数组,其长度由上述 4 个维度(x、y、z、光子数)指定
【问题讨论】: