首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用线性索引映射到4D阵列

用线性索引映射到4D阵列
EN

Stack Overflow用户
提问于 2017-06-05 12:02:41
回答 1查看 552关注 0票数 1

我刚开始使用CUDA程序,我对与普通CPU相比的速度感到困惑。然而,我现在以一个简单的逻辑考虑来运行。我在设备代码中,我要检查4D。我创建了一个常量变量,并使用atomicAdd通过设备代码在每次迭代中添加。

代码语言:javascript
复制
//get global counter
int global_index = atomicAdd(&counter, 1);

然后考虑一个4D卷,并尝试将线性索引映射到4D卷。我知道对于2D广告3D,有一种从一维索引转换到三维映射的有效方法。然而,我不知道这种方法如何扩展到更高的维度。

代码语言:javascript
复制
int x = gcfg->dimlen.x;
int y = gcfg->dimlen.y / x;
int z = gcfg->dimlen.z / gcfg->dimlen.y;
int photons = numberofphotons[1];

这是我四个维度的长度。因此,为了重申我所面临的问题:我有一个索引,我想映射到一个4D数组,它的长度由上面的4个维(x,y,z,数字光子)指定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-05 14:30:44

我不确定我是否理解了问题中变量的含义,但是下面的代码适用于第一维长度(x) ==第二维长度(y) ==第三维长(z) == 4的情况。它将线性指数i转化为各个维度的指数:first_indexsecond_indexthird_indexfourth_index

代码语言:javascript
复制
int main()
{
    int x = 4;
    int y = 4;
    int z = 4;

    for (int i = 0; i < 100; i++) {
        int fourth_index = i / (x * y * z);
        int third_index = i % (x * y * z) / (x * y);
        int second_index = i % (x * y * z) % (x * y) / x;
        int first_index = i % (x * y * z) % (x * y) % x;

        printf("%d: (%d, %d, %d, %d)\n", i, first_index, second_index, third_index, fourth_index);
    }
}

或者你可以走另一条路。

代码语言:javascript
复制
int main()
{
    int x = 4;
    int y = 4;
    int z = 4;

    for (int i = 0; i < 100; i++) {
        int first_index = i % x;
        int second_index = i / x % y;
        int third_index = i / x / y % z;
        int fourth_index = i / x / y / z;

        printf("%d: (%d, %d, %d, %d)\n", i, first_index, second_index, third_index, fourth_index);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44368525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档