CUDA编程(五)关注内存的存取模式

  • 时间:
  • 浏览:2
  • 来源:uu快3教程_uu快3代理_手机版

要让实际执行结果是连续的存取,某些人应该要让 thread 0 读取第另有另4个数字,thread 1 读取第六个数字…依此类推,很容易能够想象,通过四种 存储土法子,某些人取数字的很久就变成了连续存取。

否则,在同另有另4个 thread 中连续存取内存,在实际执行时反而就有连续了,下图很明显的反应了四种 问题报告 ,某些人的存取是跳跃式的。

这点通过对核函数的for循环进行另有另4个小修改就能够达到了~

注意某些人没进行内存存取优化很久的内存数率是491MB/s,能够都看,某些人通过四种 优化一下子就把内存数率提升到了GB级别,不得不说这是另有另4个非常令人满意的效果,某些人在如此继续增加守护系统进程数量的请况下,通过把内存的存取模式变成连续的,取得了7倍左右的加速。

通过最终的结果某些人能够都看,看似不起眼的另有另4个小改进(尽肯能的去连续操作内存),竟然有这近7倍的性能提升,不多希望某些人记住四种 优化,在优化某些人的CUDA守护系统进程的很久,一定不多忘记从内存存取厚度去进行某些优化,这往往能取得出乎意料的结果。

很久的守护系统进程,某些人能够都看某些人非常重要的核函数帕累托图:

否则,四种 守护系统进程实际上使用的内存数率约为:

通过里面对for循环的另有另4个小修改就能够达到目的了,如此如此另有另4个微小的修改到底有多大作用呢?

不知道某些人与否 还记得上次某些人用102另有另4个守护系统进程运行的最终结果:6489300另有另4个时钟周期,现在某些人很久很简单的改了一下存取模式,同样使用102另有另4个守护系统进程最终只使用了894297个时钟周期

完整性代码 :

根据某些人里面的分析,某些人那我的核函数并就有连续存取的,读取数字完就有跳跃式的读取,这会非常影响内存的存取数率,否则某些人下一步要将取数字的过程变成:

参考资料:《深入浅出谈CUDA》

某些人知道一般显卡上的内存是 DRAM,否则最有数率的存取土法子,是以连续的土法子存取,单纯说连续存取肯能比较抽象,某些人还是通过例子来看四种 问题报告 。

thread 0 读取第另有另4个数字,thread 1 读取第六个数字…

数据量仍然如此变 DATA_SIZE 1048576,也很久1024*1024 也很久 1M

运行结果 :

某些人还是从内存数率的厚度来进行一下评估:

否则计算使用的数率:

首先计算一下使用的时间:

某些人都看这次运行用了894297个时钟周期

能够都看某些人的数率你以为提升了7.26倍,而某些人很久单纯修改了一下存取模式罢了,不多某些人能够都看连续存取四种 存取优化还是十分重要的,在某些人如此再单纯地从守护系统进程数量上继续优化的请况下,从存取模式上进行的四种 优化是十分有效的。

希望我的博客能帮助到某些人~

前面提过,当另有另4个 thread 等待时间时间内存的数据时,GPU 会切换到下另有另4个 thread。也很久说,实际上守护系统进程执行的顺序是同类

在计算立方和的帕累托图,我其实看起来是连续存取内存位置(每个 thread 对一块连续的数字计算平方和),否则实际上并就有那我的,某些人要考虑到实际上 thread 的执行土法子。

上一篇博客某些人使用Thread完成了简单的并行加速,我其实某些人的守护系统进程运行数率有了3000甚至上百倍的提升,否则根据内存数率来评估搞笑的话某些人的守护系统进程还远远过低,

除了通过Block继续提高守护系统进程数量来优化性能,这次想给某些人先介绍另有另4个访存方面非常重要的优化,同样能够大幅提高守护系统进程的性能~

1M 个 32 bits 数字的数据量是 4MB。

这篇博客主要讲解了通过怎样尽肯能的连续操作内存,减少内存存取方面的时间浪费。