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

个人网站欣赏生物科技网站建设方案

个人网站欣赏,生物科技网站建设方案,剑阁住房和城乡建设厅网站,陈木胜拍完怒火重案了吗CUDA C编程笔记 第三章 CUDA执行模型3.5 循环展开3.5.1 展开的规约 待解决的问题: 第三章 CUDA执行模型 3.5 循环展开 循环展开是一种循环优化的技术,通过减少分支出现频率循环维护指令。 循环主体代码被多次编写,任何封闭的循环可以把迭代…

CUDA C编程笔记

  • 第三章 CUDA执行模型
    • 3.5 循环展开
      • 3.5.1 展开的规约

待解决的问题:

第三章 CUDA执行模型

3.5 循环展开

循环展开是一种循环优化的技术,通过减少分支出现频率+循环维护指令。
循环主体代码被多次编写,任何封闭的循环可以把迭代次数减少或完全删除。

循环展开因子:循环体的复制数量
迭代次数=原始迭代次数/循环展开因子
在顺序数组中,如果循环迭代的次数在执行前已经知道,循环展开是最有效提升性能的方法。

举一个简单的例子:

for(int i = 0; i < 100; i++){a[i] = b[i] + c[i];
}for(int i = 0; i < 100; i += 2){a[i] = b[i] + c[i];a[i+1] = b[i+1] + c[i+1];
}

下面的循环迭代次数是上面的一半,这是因为重复操作了一次循环体。
这种提升是由于编译器执行循环展开时低级指令的改进和优化。

目标:通过减少指令消耗和增加更多的独立调度指令来提高性能,更多的并发操作被添加到流水线上,产生更高的指令和内存带宽,帮线程束调度器提供更多符合条件的线程束,隐藏指令或内存延迟。

3.5.1 展开的规约

用一个线程块手动处理两个数据块,每个线程作用域多个数据块,并处理每个块的一个元素

//展开规约1:手动展开两个块block的处理
__global__ void reduceUnrolling2(int *g_idata, int *g_odata, unsigned int n){//设置线程idunsigned int tid = threadIdx.x;unsigned int idx = blockIdx.x * blockDim.x * 2 + threadIdx.x;//这里乘2//把全局数据指针转换为块内局部指针int *idata = g_idata + blockIdx.x * blockDim.x * 2;//这里乘2//展开两个数据块if(idx + blockDim.x < n) g_idata[idx] += g_idata[idx + blockDim.x];//每个线程都加一个相邻块的元素,可以算一个迭代,该循环可在数据块间规约__syncthreads();//在全局内存中就地规约for(int stride = blockDim.x/2; stride > 0; stride >>= 1){if(tid < stride){idata[tid] += idata[tid + stride];}__syncthreads();}//把这个块的结果写回全局内容if(tid == 0) g_odata[blockIdx.x] = idata[0];
}

可以利用线程块的空闲资源,原本一个线程块中,只有前半个线程块在工作,后半个线程块闲置(交错规约)。把两个数据块一起处理后,后半个线程块也能利用起来

关键点:
①索引的计算

unsigned int idx = blockIdx.x * blockDim.x * 2 + threadIdx.x;
int *idata = g_idata + blockIdx.x * blockDim.x * 2;

在这里插入图片描述

②数据规约

if (idx + blockDim.x < n) g_idata[idx] += g_idata[idx + blockDim.x];

第一个块的内容与第二个块相加,数据存回第一个块。

③块内交错规约

for (int stride = blockDim.x/2; stride > 0; stride >>= 1) {if (tid < stride) {idata[tid] += idata[tid + stride];}__syncthreads();
}

完成数据块内的规约,交错规约。

对应的main函数代码也需要修改:网格大小减半,在核函数调用参数、数据传回主机和最后求和方面,都需要除2

//kernel4:reduceUnrolling2 展开规约2:一个线程块处理两个数据块cudaMemcpy(d_idata, h_idata, bytes, cudaMemcpyHostToDevice);cudaDeviceSynchronize();iStart = seconds();//因为现在每个线程块处理两个数据块,需要调整内核的执行配置,网格大小减为原来的一半reduceUnrolling2<<<grid.x/2, block>>>(d_idata, d_odata, size);//这里写错成了bytescudaDeviceSynchronize();iElaps = seconds() - iStart;cudaMemcpy(h_odata, d_odata, grid.x/2*sizeof(int), cudaMemcpyDeviceToHost);//需要除2gpu_sum = 0;for(int i = 0; i<grid.x/2; i++){//需要除2gpu_sum += h_odata[i];}printf("gpu reduceUnrolling2    elapsed %f ms gpu_sum: %d <<<grid %d block %d>>>\n", iElaps, gpu_sum, grid.x/2, block.x);//需要除2

执行结果:

./3-3reduceInteger2 starting reduction atdevice 0: NVIDIA GeForce RTX 3090 with array size 16777216 grid 32768 block 512
cpu reduce         elapsed 0.039772 ms cpu_sum: 2139353471
gpu Warmup          elapsed 0.003663 ms gpu_sum: 0 <<<grid 32768 block 512>>>
gpu Neighbored          elapsed 0.001532 ms gpu_sum: 2139353471 <<<grid 32768 block 512>>>
gpu NeighboredLess      elapsed 0.001402 ms gpu_sum: 2139353471 <<<grid 32768 block 512>>>
gpu reduceInterleaved    elapsed 0.001371 ms gpu_sum: 2139353471 <<<grid 32768 block 512>>>
gpu reduceUnrolling2    elapsed 0.001357 ms gpu_sum: 2139353471 <<<grid 16384 block 512>>>

原始的交错规约时间reduceInterleaved0.001371 ms,二合一的交错规约reduceUnrolling20.001357 ms。

原因:一个线程中有更多的独立内存加载/存储操作性能更好,因为内存延迟可以被更好隐藏,可以查看设备内存吞吐量指标,内存吞吐量提高了很多。
在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/wzjs/544271.html

相关文章:

  • 珠海网站推广公司网站竞价托管
  • 招商网站搭建费用怎样制作网站
  • 网站字体效果网站建设谁家好
  • 网站建设 招标任务书网站开发需要哪些人员
  • 山西网站建设服务公司北京专业企业网站建设
  • 网站建设投标书免费2级a做爰片免费网站
  • 网站建设需要参考哪些文献动漫制作专业认识
  • 公司网站建设价格贵吗做宠物服务的相关网站
  • 免费下载网站软件网站开发调用别人网站的组件
  • 花生壳软件做的网站专业制作标书
  • 长春网站制作最新招聘信息wordpress模板不显示文章页
  • 荧光字网站网站建设为什么需要备案
  • 怎么为自己做的网站申请域名电子商务网站建设的方法及流程图
  • 网页游戏网站源码jquery在网站开发实例运用
  • 外贸网站公司黑龙江新闻最新消息今天
  • 沙坪坝网站开发如何加强企业网站建设 论文6
  • 安徽外贸网站建设owl WordPress
  • wordpress 极致优化seo是什么工作
  • google移动网站建站十大原则wordpress nginx 502
  • 内蒙古建设住房与城乡厅官方网站找别人做网站注意事项
  • 赣州企业做网站网站建设的开票编码
  • 网页设计与制作课件张松炎六安网站优化
  • 在哪下载免费的英文版网站模板苏州宣传册设计广告公司
  • 网站费用构成网页制作工具按其制作方式
  • 百度网站建设及推广北京网站建设开发专业公司
  • 湖北seo整站优化机加工自动报价系统软件
  • 二次开发小程序东莞网站seo方法
  • 旅游网站建设的背景广东网站建设seo优化制作设计
  • 预约网站怎么做以图搜图百度识图
  • 金泉网做网站要找谁离线发布wordpress