cuda 函数指针_请问在cuda的核函数中可以按地址调用普通变量么?

大姐大好!

完全无问题,从Fermi起引入卡内统一编址(Generic Addressing)和卡间统一编址(UVA ) 开始,就毫无压力了,这都8年过去了。

但需要注意这个问题:

(1)最终指向global memory地址空间的指针,可以在本次kernel启动,或者下次kernel启动的任何线程中都是有效的。

(2)最终指向local memory的指针,仅在本次kernel启动的本线程中有效。如果错误的在本次kernel启动的本block中的其他线程使用,则自动得到被替换成对应的线程的对应local memory位置的值。

(3)最终指向shared memory的指针,仅在本次kernel启动的本block中的任意一个线程中有效。

另外两点需要注意的:

(4)在部分平台支持P2P Access的情况下,则指向一张卡的global memory的指针,可以在另外一张卡上的kernel中被使用,类似情况(1)。

(5)当global memory实际由内存映射而成,这这种global memory,具有比普通的显存构成的global memory慢一些的访问性能。但从程序的角度看,两者并无逻辑上的区别,但在使用的时候可能会导致一次或者多次的自动跨PCI-E传输(参考手册上的zero-copy memory之类的章节).

从Kepler+开始,对卡间的统一编址做了进一步的加强,并命名为Unified Memory / Managed Memory. 此时这种内存空间上的寻址可以:

(1)增强为CPU也能访问他们,哪怕某段时间实质的存储后备介质并非内存(自动page fault + 数据迁移)

(2)GPU访问的时候更好的性能,会自动引入可能内存->显存或者自动的卡间传输以及全自动的缓冲。(例如可以参考Pascal具有的显存作为缓存的模式(可以看成GPU的L3 cache,或者看成GPU支持虚拟内存---例如一张3GB的卡可以使用“虚拟的“8GB的显存,并且在并非所有位置访问概率相同的情况下,实现大小像是8GB, 性能像是本地的3GB这样的传统的虚拟内存+缓存系统的效果)

需要注意最后的增强有一定的限制,可以参考手册上的Unified/Managed Memory的相关章节。

Regards,

你的屠戮人神。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值