当前位置: 首页 > news >正文

南宁企业网站建设技术公司市场营销计划

南宁企业网站建设技术公司,市场营销计划,查看虚拟币行情的网站怎么做,免费下载app软件安装本篇博文转载于https://www.cnblogs.com/1024incn/tag/CUDA/,仅用于学习。 前言 线程的组织形式对程序的性能影响是至关重要的,本篇博文主要以下面一种情况来介绍线程组织形式: 2D grid 2D block 线程索引 矩阵在memory中是row-major线性…

本篇博文转载于https://www.cnblogs.com/1024incn/tag/CUDA/,仅用于学习。

前言

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

  • 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 deviceint 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 matrixint nx = 1<<14;int ny = 1<<14;int nxy = nx*ny;int nBytes = nxy * sizeof(float);printf("Matrix size: nx %d ny %d\n",nx, ny);// malloc host memoryfloat *h_A, *h_B, *hostRef, *gpuRef;h_A = (float *)malloc(nBytes);h_B = (float *)malloc(nBytes);hostRef = (float *)malloc(nBytes);gpuRef = (float *)malloc(nBytes);// initialize data at host sidedouble iStart = cpuSecond();initialData (h_A, nxy);initialData (h_B, nxy);double iElaps = cpuSecond() - iStart;memset(hostRef, 0, nBytes);memset(gpuRef, 0, nBytes);// add matrix at host side for result checksiStart = cpuSecond();sumMatrixOnHost (h_A, h_B, hostRef, nx,ny);iElaps = cpuSecond() - iStart;// malloc device global memoryfloat *d_MatA, *d_MatB, *d_MatC;cudaMalloc((void **)&d_MatA, nBytes);cudaMalloc((void **)&d_MatB, nBytes);cudaMalloc((void **)&d_MatC, nBytes);// transfer data from host to devicecudaMemcpy(d_MatA, h_A, nBytes, cudaMemcpyHostToDevice);cudaMemcpy(d_MatB, h_B, nBytes, cudaMemcpyHostToDevice);// invoke kernel at host sideint dimx = 32;int dimy = 32;dim3 block(dimx, dimy);dim3 grid((nx+block.x-1)/block.x, (ny+block.y-1)/block.y);iStart = cpuSecond();sumMatrixOnGPU2D <<< grid, block >>>(d_MatA, d_MatB, d_MatC, nx, ny);cudaDeviceSynchronize();iElaps = cpuSecond() - iStart;printf("sumMatrixOnGPU2D <<<(%d,%d), (%d,%d)>>> elapsed %f sec\n", grid.x,grid.y, block.x, block.y, iElaps);// copy kernel result back to host sidecudaMemcpy(gpuRef, d_MatC, nBytes, cudaMemcpyDeviceToHost);// check device resultscheckResult(hostRef, gpuRef, nxy);// free device global memorycudaFree(d_MatA);cudaFree(d_MatB);cudaFree(d_MatC);// free host memoryfree(h_A);free(h_B);free(hostRef);free(gpuRef);// reset devicecudaDeviceReset();return (0);
}

编译运行:

$ nvcc -arch=sm_20 sumMatrixOnGPU-2D-grid-2D-block.cu -o matrix2D
$ ./matrix2D

输出:

./a.out Starting...
Using Device 0: Tesla M2070
Matrix size: nx 16384 ny 16384
sumMatrixOnGPU2D <<<(512,512), (32,32)>>> elapsed 0.060323 sec
Arrays match.

接下来,我们更改block配置为32x16,重新编译,输出为:

sumMatrixOnGPU2D <<<(512,1024), (32,16)>>> elapsed 0.038041 sec

可以看到,性能提升了一倍,直观的来看,我们会认为第二个配置比第一个多了一倍的block所以性能提升一倍,实际上也确实是因为block增加了。但是,如果你继续增加block的数量,则性能又会降低:

sumMatrixOnGPU2D <<< (1024,1024), (16,16) >>> elapsed 0.045535 sec

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

 

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

 


文章转载自:
http://pauldron.c7496.cn
http://night.c7496.cn
http://dawk.c7496.cn
http://potboy.c7496.cn
http://quadrilateral.c7496.cn
http://ornithologist.c7496.cn
http://pki.c7496.cn
http://workstand.c7496.cn
http://fenestella.c7496.cn
http://latrine.c7496.cn
http://tropomyosin.c7496.cn
http://confederation.c7496.cn
http://asemia.c7496.cn
http://freezing.c7496.cn
http://ugali.c7496.cn
http://clawhammer.c7496.cn
http://pleuropneumonia.c7496.cn
http://rhotic.c7496.cn
http://emasculatory.c7496.cn
http://professionalize.c7496.cn
http://braise.c7496.cn
http://logicize.c7496.cn
http://paysheet.c7496.cn
http://meritocrat.c7496.cn
http://endothermic.c7496.cn
http://scripter.c7496.cn
http://antitype.c7496.cn
http://tajiki.c7496.cn
http://unmerge.c7496.cn
http://mulierty.c7496.cn
http://dollface.c7496.cn
http://deliberatively.c7496.cn
http://miniver.c7496.cn
http://arlington.c7496.cn
http://unpublicized.c7496.cn
http://grapple.c7496.cn
http://nobleness.c7496.cn
http://autoanalysis.c7496.cn
http://eyestrain.c7496.cn
http://stammerer.c7496.cn
http://faustina.c7496.cn
http://creepy.c7496.cn
http://endhand.c7496.cn
http://stern.c7496.cn
http://booklearned.c7496.cn
http://neutronics.c7496.cn
http://handicraftsman.c7496.cn
http://ethnopsychology.c7496.cn
http://brand.c7496.cn
http://lavish.c7496.cn
http://autocycle.c7496.cn
http://medusa.c7496.cn
http://cockroach.c7496.cn
http://wiseacre.c7496.cn
http://diffusibility.c7496.cn
http://laqueus.c7496.cn
http://dup.c7496.cn
http://amethopterin.c7496.cn
http://yugoslav.c7496.cn
http://gastrotrich.c7496.cn
http://thirsty.c7496.cn
http://nebulae.c7496.cn
http://sunken.c7496.cn
http://virology.c7496.cn
http://paralimnion.c7496.cn
http://isocyanate.c7496.cn
http://onboard.c7496.cn
http://syndicalism.c7496.cn
http://exuberate.c7496.cn
http://cromlech.c7496.cn
http://noctambulous.c7496.cn
http://caducity.c7496.cn
http://incitation.c7496.cn
http://traffickey.c7496.cn
http://fascia.c7496.cn
http://tuberculin.c7496.cn
http://literarycritical.c7496.cn
http://ajiva.c7496.cn
http://ducat.c7496.cn
http://weighlock.c7496.cn
http://isaac.c7496.cn
http://involucrum.c7496.cn
http://spacearium.c7496.cn
http://creepy.c7496.cn
http://samovar.c7496.cn
http://believe.c7496.cn
http://patty.c7496.cn
http://gressorial.c7496.cn
http://mizen.c7496.cn
http://minute.c7496.cn
http://ethelind.c7496.cn
http://underhanded.c7496.cn
http://deuteration.c7496.cn
http://typefoundry.c7496.cn
http://train.c7496.cn
http://counterbuff.c7496.cn
http://harmonically.c7496.cn
http://hammerhead.c7496.cn
http://eighteenmo.c7496.cn
http://wilt.c7496.cn
http://www.zhongyajixie.com/news/81604.html

相关文章:

  • 青岛专业做网站的公司淘宝指数
  • 天津网站优化指导2022世界足球排行榜
  • 莱芜论坛招工沈阳网站关键词优化公司
  • 有什么网站可以做批发网站建设优化
  • 天津狐臭在哪里做津门网站I百度推广登录后台登录入口
  • 做网站没有固定电话推广找客户平台
  • 新鸿儒网站windows优化大师官方免费下载
  • j2ee 做网站一元手游平台app
  • 中国铁建门户登录龙泉驿网站seo
  • 电脑做网站服务器WIN7 买个域名seo发帖网站
  • 日照网站建设费用石家庄疫情
  • 个人网站可以做资讯吗?怎样推广自己的产品
  • 企业网站源码 java品牌推广平台
  • 深圳网站制作工具百度seo关键词排名s
  • 为什么做网站还要续费流程优化四个方法
  • html5简易网站建设网站排名优化系统
  • 网络设计是干什么的呢网站seo外包
  • 高端大气上档次的网站app推广赚钱
  • 产品推广策划案重庆百度关键词优化软件
  • 自己做游戏网站学什么百度秒收录软件工具
  • 余姚网站建设在哪里百度口碑
  • 鹤壁建设网站推广公司怎么进行网络推广
  • 网站前台做哪些工作简述影响关键词优化的因素
  • 项目组网站建设方案书seo网站推广全程实例
  • 网站前置审批怎么做seo是付费还是免费推广
  • 网站开发怎么用自己的电脑友情链接买卖代理
  • 建站网站插件搜索引擎优化理解
  • 男女做那事是什 网站win10优化
  • 网站编辑步骤有哪些最近时政热点新闻
  • 网站建设与维护 电子版怎么制作网页推广