在cuda的核函数中可以按地址调用普通变量么?-吉浦迅科技龙蛇大战
请问在cuda的核函数中可以按地址调用普通变量么?
GPU世界论坛bbs.gpuworld.cn
Hi抢钱通, 楼主,完全无问题孙亦廷,从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的相关章节。
欢迎有CUDA编程的问题骆吉,来我们的技术论坛提问
更多CUDA编程问题:
假如用多个CPU核同时控制一个GPU再与天比高 ,并且进行运算与数据的传递,请问这能够实现么?...
了解CUDA编程基础知识,这篇文章足够了!
对于CUDA Fortran开发者来说,函数传参真这么麻烦么?
在ubuntu上装CUDA,80%的人肯定会遇到这个坑儿
CUDA菜鸟必看:论坛里那些总是被问到的问题.....