首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的代码在CUDA中的线程层次设计

我的代码在CUDA中的线程层次设计
EN

Stack Overflow用户
提问于 2015-04-22 12:31:06
回答 1查看 152关注 0票数 0

我想把我以前在c++中的代码转换成数据自动化系统

代码语言:javascript
复制
for(int x=0 ; x < 100; x++)
{
    for(int y=0 ; y < 100; y++)
    {
        for(int w=0 ; w < 100; w++)
        {
            for(int z=0 ; z < 100; z++)
            {
              ........
            }
        }
    }
}

这些循环组合成一个新的int值。

如果我想使用CUDA,我必须在构建内核代码之前设计线程层次结构。

那么,我如何设计层次结构呢?

依赖于每一个循环,我认为它会是这样的:

100*100*100*100 = 100000000线程。

你能帮我一下吗

谢谢

我的数据自动化系统规范:

CUDA设备#0 主要修订编号:1 次要修订编号:1 名称: GeForce G 105 M 总全局内存: 536870912 每个块的总共享内存: 16384 每个区块的寄存器总数: 8192 经纱尺寸: 32 最大内存间距: 2147483647 每个块的最大线程数: 512 块的最大维数1: 512 块的最大维数2: 512 块的最大维数3: 64 网格的最大维数1: 65535 网格的最大维数2: 65535 网格的最大维数3:1 时钟率: 1600000 总常量内存: 65536 纹理对齐: 256 并发复制和执行:否 多处理器数:1 内核执行超时:是的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-22 13:33:49

对于GPU来说,100000000个线程(或块)并不多。

您的GPU具有计算能力1.1,因此它仅限于前两个网格维度(x和y)中的每个块65535个。由于100*100 = 10000,我们可以在前两个网格维度中启动10000个块,以覆盖整个for-循环范围。这将启动每个循环迭代一个块( xyzw的唯一组合),并假设您将使用块中的线程来满足for循环计算代码的需要:

代码语言:javascript
复制
__global__ void mykernel(...){

  int idx = blockIdx.x;
  int idy = blockIdx.y;

  int w = idx/100;
  int z = idx%100;
  int x = idy/100;
  int y = idy%100;

  int tx = threadIdx.x;

 // (the body of your for-loop code here...

}

发射:

代码语言:javascript
复制
dim3 blocks(10000, 10000);
dim3 threads(...); // can use any number here up to 512 for your device
mykernel<<<blocks, threads>>>(...);

如果您希望为for-循环的每个内部z迭代分配一个线程(可能会根据您正在执行的操作和数据组织方式而具有有用的/更高的性能),那么您可以这样做:

代码语言:javascript
复制
__global__ void mykernel(...){

  int idx = blockIdx.x;
  int idy = blockIdx.y;

  int w = idx/100;
  int x = idx%100;
  int y = idy;

  int z = threadIdx.x;

 // (the body of your for-loop code here...

}

发射:

代码语言:javascript
复制
dim3 blocks(10000, 100);
dim3 threads(100); 
mykernel<<<blocks, threads>>>(...);

以上所有这些假设您的for-循环迭代是独立的。如果您的for-循环迭代是相互依赖的(取决于执行顺序),那么这些简单的答案将不起作用,而且您在问题中没有提供足够的信息来讨论合理的策略。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29797675

复制
相关文章

相似问题

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