CUDA编程疑问答疑

 子说 18:57:32 
我有一个问题
子说 18:58:50 
比如有几个int 型的常数,需要在gpu显存里传入一份嘛
子说 18:59:04 
还是在函数调用的时候传入
子说 18:59:09 
哪一种更好
19:14:27 
作为函数的参数即可
19:14:50 
你要copy到global memory里面再用也可以
19:15:02 
作为参数可能更好一点
子说 19:16:07 
我也是这么觉得
子说 19:16:40 
那比如我要在设备端开辟地址 存一个int类型的常数
19:16:55 
因为作为参数的话,不需要从global里面读取,不会和其他访存争夺资源
子说 19:17:27 

子说 19:17:37 
就是说直接传入比较好一点
子说 19:18:06 
cudaMalloc((void**) &time, sizeof(int));
19:18:51 

19:18:55 
我说的不是这个
19:19:03 
我说的是直接作为函数的参数
子说 19:19:14 
恩恩
子说 19:19:28 
——global——函数里面的参数吗
19:20:01 
因为直接作为函数的参数的话,该数据会被放入 constant cache,和常规的访存是分开的,constant cache是独立的缓存通道。
子说 19:20:42 
哦,英明
子说 19:21:03 
这样我就明朗多了
子说 19:21:30 
那我不存在global memory里
子说 19:21:47 
而是存在constant memory里面可以不可以
19:25:54 
是这样的
19:26:15 
constant memory其实依然在DRAM里面,和global一样
19:26:29 
但是constant memory有个对应的constant cache
19:26:50 
可以cache一部分constant memory的内容
子说 19:26:56 
很有启发
19:26:58 
以及这个cache很快
19:27:38 
同时不需要通过LSU——L2cache——global这样去读取,是独立的cache通道。
19:27:56 
constant cache除了缓冲你指定的constant变量以外
19:28:22 
其中一部分空间还被用来保存 kernel的参数(从fermi开始是如此的)
子说 19:28:55 


19:29:12 
所以说,一些固定值的数据,可以直接作为kernel的参数,此时会自动保存在 constant cache里面
19:29:15 
会比较快
19:29:30 
而且不和一般的global memory访存争抢
19:29:37 
大致这样

你可能感兴趣的:(CUDA编程疑问答疑)