我有2个非常相似的内核函数,在某种意义上代码几乎相同,但略有不同.目前我有2个选择:
if语句对我的算法性能有多大影响?
我知道没有分支,因为所有块中的所有线程都将输入if或else.
如果内核函数被多次调用,那么单个if语句会降低我的性能吗?
在CUDA 2.0设备上有没有办法只为一个特定变量禁用L1缓存?我知道,一个可以在编译时禁用L1缓存添加标志-Xptxas -dlcm=cg,以nvcc对所有内存操作.但是,我想仅对特定全局变量的内存读取禁用缓存,以便所有其余内存读取都通过L1缓存.
基于我在网络上进行的搜索,可能的解决方案是通过PTX汇编代码.
所以我在CUDA中关于合并内存访问的想法是,warp中的线程应该访问连续的内存地址,因为这只会导致单个内存事务(每个地址上的值然后广播到线程)而不是多个那些将以连续方式执行的.
现在,我的总线宽度是48个字节.这意味着我可以在每个内存事务上传输48个字节,对吗?因此,为了充分利用总线,我需要能够一次读取48个字节(通过每个线程读取多个字节 - 内存事务由warp执行).但是,假设没有单个线程一次读取48个字节提供相同的优势(我假设我可以通过读取大小为48字节的结构一次读取48个字节)?
我的合并问题是我必须对数据进行转置.我有很多数据,所以转置它需要时间,如果可能的话我宁愿用于别的东西.
我正在使用Compute Capability 2.0.