下载此文档

众核程序设计.docx


文档分类:办公文档 | 页数:约10页 举报非法文档有奖
1/10
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/10 下载此文档
文档列表 文档介绍
矩阵转置
――众核计算与并行程序设计作业报告
本次大作业,我们选择的题目是矩阵转置,并且最终完成了两个程序一一二维矩阵转置和五维矩阵 转置,两个程序我们都尽我们所能进行了优化,下面对两个程序的优化方法即优化效果进行分析。
二维矩阵转置的提高,说明还另有更
邑致命的因素限制着程序的速度。
4、优化 partition camping
一次同时访问global mem or y, GPU对各个分区的访问越平均越好,一个分区的宽度是64个 floats,而我每一个block的处理的数据宽度是16或32个floats,在数据的横向读取过程中对各个分 区的访问是平均的。但是在数据写入的过程中,block是纵向地写入数据的,这便会导致多个block只 在某一个分区中疯狂的写数据,也便违背了平均使用分区的原则。(如下图所示)
idata odata
解决这个问题的方法便是,沿横向方向,把block访问的存储空间对角化,如下图。这样每一个同 一时刻运行的block在读写时对global memory的各个分区都会进行平均的访问。(如下图所示)
程序主要修改代码:
un sig ned int blockldx_y = ;
un sig ned int blockldx_x = + % gr ;
〃并把原来 kernel 中的所有 和 分别换成 blockldx_y 和 blockldx_x。
程序运行情况:
数据规模
Kernel运行时间
存储带宽
1024 * 1024


2048 * 2048


4096 * 4096


8192 * 8192


这一下,程序效率提升的幅度可不小了,但是离目标还有一定的距
巨离。
5、优化 block size
前面的程序,我每一个线程都只转一个元素,每一次转一个元素,都要重新计算坐标,而若一个线 程能转有规律的多个元素,则就可以每次充分利用这个计算出来的坐标,但是线程的减少又可能导致程 序并行度降低,从而减慢程序运行速度,所以要在这两个之间达到一个平衡。经我测试每个block有 32*8,每一个线程转四个元素,可以达到最佳状态。
程序主要修改代码:
程序开头添加
#defi ne BLOCK_DIM 32
#defi ne BLOCK_ROWS 8
kernel中添力口
for (int i = 0; i < BLOCK_DIM; i += BLOCK_ROWS)
to_M[out + i * r esult_pitch] = sha reM[th ][th + i]; 主机代码中修改
dim3 thr eadsPe rBlock(BLOCK_DIM ,BLOCK_ROWS);
程序运行情况:
数据规模
Kernel运行时间
存储带宽
1024 * 1024


204

众核程序设计 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数10
  • 收藏数0 收藏
  • 顶次数0
  • 上传人niupai11
  • 文件大小118 KB
  • 时间2022-05-10