相关疑难解决方法(0)

我是否应该使用'if'语句统一两个类似的内核,从而有降低性能的风险?

我有2个非常相似的内核函数,在某种意义上代码几乎相同,但略有不同.目前我有2个选择:

  • 写出2种不同的方法(但非常相似)
  • 编写单个内核并在if/else语句中放置不同的代码块

if语句对我的算法性能有多大影响?
我知道没有分支,因为所有块中的所有线程都将输入if或else.
如果内核函数被多次调用,那么单个if语句会降低我的性能吗?

c c++ optimization cuda gpgpu

34
推荐指数
1
解决办法
9293
查看次数

CUDA仅为一个变量禁用L1缓存

在CUDA 2.0设备上有没有办法只为一个特定变量禁用L1缓存?我知道,一个可以在编译时禁用L1缓存添加标志-Xptxas -dlcm=cg,以nvcc对所有内存操作.但是,我想仅对特定全局变量的内存读取禁用缓存,以便所有其余内存读取都通过L1缓存.

基于我在网络上进行的搜索,可能的解决方案是通过PTX汇编代码.

assembly caching cuda cpu-cache ptx

12
推荐指数
2
解决办法
2670
查看次数

CUDA - 合并内存访问和总线宽度

所以我在CUDA中关于合并内存访问的想法是,warp中的线程应该访问连续的内存地址,因为这只会导致单个内存事务(每个地址上的值然后广播到线程)而不是多个那些将以连续方式执行的.

现在,我的总线宽度是48个字节.这意味着我可以在每个内存事务上传输48个字节,对吗?因此,为了充分利用总线,我需要能够一次读取48个字节(通过每个线程读取多个字节 - 内存事务由warp执行).但是,假设没有单个线程一次读取48个字节提供相同的优势(我假设我可以通过读取大小为48字节的结构一次读取48个字节)?

我的合并问题是我必须对数据进行转置.我有很多数据,所以转置它需要时间,如果可能的话我宁愿用于别的东西.

我正在使用Compute Capability 2.0.

memory cuda coalescing

4
推荐指数
2
解决办法
3133
查看次数

标签 统计

cuda ×3

assembly ×1

c ×1

c++ ×1

caching ×1

coalescing ×1

cpu-cache ×1

gpgpu ×1

memory ×1

optimization ×1

ptx ×1