parallel computing
redline2005
这个作者很懒,什么都没留下…
展开
-
CUDA存储器
CUDA存储器模型:GPU片内:register,shared memory;板载显存:local memory,constant memory, texture memory, texture memory,global memory;host 内存: host memory, pinned memory. register: 访问延迟极低; 基转载 2014-01-09 08:54:13 · 1296 阅读 · 0 评论 -
gpu显存(全局内存)在使用时数据对齐的问题
全局存储器,即普通的显存,整个网格中的任意线程都能读、写全局存储器的任意位置。存取延时为400-600 clock cycles,非常容易成为性能瓶颈。访问显存时,读取和存储必须对齐,宽度为4Byte。如果没有正确的对齐,读写将被编译器拆分为多次操作,降低访存性能。原创 2014-08-05 11:54:08 · 7729 阅读 · 1 评论 -
visual profiler 调试cuda并行程序:根据行号定位出错行
visual profiler 调试cuda并行程序是,如果不能够通过出错的行号,定位出错行,会很麻烦。通过在编译cuda程序的时候,设置适当的编译参数,可以实现根据行号定位出错行,为调试程序提供了很大的方便。原创 2014-05-13 11:01:14 · 1818 阅读 · 1 评论 -
多字节数据在内存(或显存)和寄存器上存放顺序
多字节数据在内存、显存(N卡)和寄存器(N卡)上的存放顺序。 char4 dog;dog.x ... 第1个字节 dog.y .... 第2个字节 dog.z ..... 第3个字节 doz.w ...... 第4个字节 ?原创 2014-04-11 23:07:20 · 4253 阅读 · 0 评论 -
cuda执行配置对性能的影响
执行配置和占用率 使用>>语法指定执行线程配置的时候,grid 和block大小也影响程序的效率。一般而言,grid要大于多处理器的数目,这样才能让多处理器不至于空闲,但是这样也会导致一些问题,比如负载均衡,如果grid大小不能比sm 数目整除的话,就会有SM计算的时候,另外一些SM空闲,如果grid远大于sm数目的话,可忽略,但是如果SM数目与grid大小相差不大的话,性能损耗原创 2014-04-12 20:08:13 · 1576 阅读 · 0 评论 -
cuda低占用率下性能优化
为提升GPU的效率,常用的方法是提升设备占用率(occupancy),包括在每个流处理器上运行更多的线程和为每个线程块设定更多的线程。人们常常认为这是隐藏延迟的唯一方法,但实验结果证明最大化占用率反而可能会降低性能。Vasily Volkov牛人的ppt,对如何更有效的使用GPU做通用计算提出了增加线程级并行以外的另一种方法---增加指令级并行,看后受益匪浅。转载 2014-04-12 11:38:18 · 11055 阅读 · 0 评论 -
cuda优化-展开循环
最近看到了一些循环展开优化程序性能的知识,总结一下。循环展开,即 #pragma unroll N(N为要展开的数值)。一般来说,循环展开主要是为了减少CUDA运行的分支冲突,由于GPU中SM架构的特殊性以及WARP(Half-warp)执行的严格并行性,使得循环语句有着交的的分支冲突,通过循环展开,可以有效的降价分支冲突。如:就是完全循环展开后的形式,但是也可以不完全循环展开,只展开循环转载 2014-04-08 09:11:44 · 7529 阅读 · 0 评论 -
翻新并行程序设计的认知整理版(state of the art parallel)
近几年,业内对并行和并发积累了丰富的经验,有了较深刻的理解。但之前积累的大量教材,在当今的软硬件体系下,反而都成了负面教材。所以,有必要加强宣传,翻新大家的认知。首先,天地倒悬,结论先行:当你需要并行时,优先考虑不需要线程间共享数据的设计,其次考虑共享Immutable的数据,最糟情况是共享Mutable数据。这个最糟选择,意味着最差的性能,最复杂啰嗦的代码逻辑,最容易出现难于重现的bug转载 2014-05-15 16:53:23 · 867 阅读 · 0 评论 -
CUDA程序编译过程中产生警告的解决方法
在编译CUDA程序的时候,会产生大量的警告信息的解决方法。原创 2014-05-16 15:14:08 · 12927 阅读 · 6 评论 -
linux并行环境及mpich2安装全过程
linux并行环境及mpich2安装全过程准备工作:1、设置IP(在这里我们设置c1、c2、c3、c4的ip地址分别为192.168.0.1、192.168.0.2、192.168.03、192.168.0.4)#vi /etc/sysconfig/network-script/ifcfg-eth[0、1、2、3]其中数字与所修改的机器网卡实际编号一致#service networ转载 2014-05-04 08:48:48 · 1407 阅读 · 0 评论 -
cuda 1.x 编译器产生的奇怪问题及解决方法
cuda项目中编译问题:错误提示: 内存访问越界导致启动核函数失败的问题。nsight调试:nsight -> Enable CUDA memory checker,然后 nsight -> Start CUDA Debugging,开始调试,不设置断点,vs直接指向访存越界的语句;即, unsigned char *p= shared_data + i; //shared_data 为共享内存中的数组大小为:3*width uchar2 gt=*(ucha原创 2014-04-17 09:52:50 · 1220 阅读 · 0 评论 -
基于CUDA的GPU优化建议
l GPU硬件特性n 存储层次u Global memory:l 大小一般为几GBl chip-off的DRAM介质存储器l 访问速度慢(是shared memory的上百倍)l 对于是否对齐和连续访问敏感(由DRAM的性质决定)l 可以被所有的线程访问u Shared memory:l 每个SM中一般几十KBl chip-on的SRAM介质存储器l 访转载 2014-03-31 08:59:06 · 3191 阅读 · 0 评论 -
理解CUDA并行程序的规约思想 .
并行程序的开发有其不同于单核程序的特殊性,算法是重中之重。根据不同业务设计出不同的并行算法,直接影响到程序的效率。因此,如何设计并行程序的算法,似乎成为并行编程的最大难点。观其算法,包括cuda sdk的例子和网上的牛人,给出的一些例子,以矩阵和矢量处理为主,深入点的包括fft和julia等数学公式,再高级一点的算是图形处理方面的例子。学习这些算法的思想,免不了有自己的一点点总结。之前学习过o转载 2013-12-20 14:46:01 · 1390 阅读 · 0 评论 -
cuda编程-block和thread数量的确定
<br />第一,thread 和block数量的受到gpu本身hard limit的限制<br />第二,取决于目前shared memory and rigisters大小的限制,不能发布太多,否则系统会自动调用local memory,这样存取速度会下降,影响性能<br />第三,取决具体的应用,比如:你的矩阵有1000* 1000,如果你设计的kenel 每个线程处理一行的话,你发布1000现在就够了,或者其他的方法来确定。原创 2011-04-11 11:04:00 · 6285 阅读 · 0 评论 -
CUDA优化策略
CUDA程序优化CUDA程序优化应该考虑的点:精度:只在关键步骤使用双精度,其他部分仍然使用单精度浮点以获得指令吞吐量和精度的平衡; 延迟:需要首先缓冲一部分数据,缓冲的大小应该可以保证每个内核程序处理的一批数据能够让GPU慢负荷工作; 计算量:计算量太小的程序使用CUDA很不合算;当需要计算的问题的计算密集度很低的时候,执行计算的时间远远比转载 2014-01-09 08:50:23 · 9369 阅读 · 0 评论 -
CUDA异步并行
异步函数使得主机端与设备端并行执行:控制在设备还没有完成前就被返回给主机线程; 包括: kernel启动; 以Async为后缀的内存拷贝函数; device到device内存拷贝函数;存储器初始化函数,比如cudaMemset(),cudaMemset2D(),cudaMemset3D(); 一些设备能够在kernel执行期间,执行pinned memory和显转载 2014-01-09 08:55:07 · 9769 阅读 · 2 评论 -
CUDA中并行规约(Parallel Reduction)的优化
Parallel Reduction是NVIDIA-CUDA自带的例子,也几乎是所有CUDA学习者的的必看算法。在这个算法的优化中,Mark Harris为我们实现了7种不同的优化版本,将Bandwidth几乎提高到了峰值。相信我们通过仔细研读这个过程,一定能对CUDA程序的优化有更加深刻的认识。下面我们来一一细看这几种优化方案,数据和思想均摘录自官方SDK中Samples的算法说明。Pa转载 2013-12-20 16:49:32 · 8193 阅读 · 1 评论