CUDA 您所在的位置:网站首页 gta5玩法视频 CUDA

CUDA

#CUDA| 来源: 网络整理| 查看: 265

前言

线程的组织形式对程序的性能影响是至关重要的,本篇博文主要以下面一种情况来介绍线程组织形式:

2D grid 2D block 线程索引

矩阵在memory中是row-major线性存储的:

 

在kernel里,线程的唯一索引非常有用,为了确定一个线程的索引,我们以2D为例:

线程和block索引矩阵中元素坐标线性global memory 的偏移

首先可以将thread和block索引映射到矩阵坐标:

ix = threadIdx.x + blockIdx.x * blockDim.x

iy = threadIdx.y + blockIdx.y * blockDim.y

之后可以利用上述变量计算线性地址:

idx = iy * nx + ix

 

上图展示了block和thread索引,矩阵坐标以及线性地址之间的关系,谨记,相邻的thread拥有连续的threadIdx.x,也就是索引为(0,0)(1,0)(2,0)(3,0)...的thread连续,而不是(0,0)(0,1)(0,2)(0,3)...连续,跟我们线代里玩矩阵的时候不一样。

现在可以验证出下面的关系:

thread_id(2,1)block_id(1,0) coordinate(6,1) global index 14 ival 14

下图显示了三者之间的关系:

 

代码 int main(int argc, char **argv) {   printf("%s Starting...\n", argv[0]);   // set up device   int dev = 0;   cudaDeviceProp deviceProp;   CHECK(cudaGetDeviceProperties(&deviceProp, dev));   printf("Using Device %d: %s\n", dev, deviceProp.name);   CHECK(cudaSetDevice(dev));   // set up date size of matrix   int nx = 1 elapsed 0.045535 sec

下图展示了不同配置的性能;

 

关于性能的分析将在之后的博文中总结,现在只是了解下,本文在于掌握线程组织的方法。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有