定义在GPU上的变量
2009-12-09 13:19
579 查看
定义在GPU上的变量:1、使用关键字__device__ __local__ intX,则意味着该变量是定义在thread中的,它的生存周期跟它所在的thread一致。实际上定义为__local__ 的变量会存在globalmemory中,所以速度也会很慢,一般不采用__local__关键字定义变量。关键字缺省情况下的变量是存在register中的,速度比存在globalmemory中快,只有当register存满了变量之后,系统才会自动把变量定义为__local__的,所以不要随意的采用__local__关键字,这其实是下下策。2、使用关键字__device__ __shared__ int X,则意味着该变量是定义在block中的,它的生存周期跟它所在的block一致,并且为该block里的512个thread共享,都可以访问到这个变量。3、如果缺省了第二个关键字,即__device__ int X,则是定义在grid中的,不仅在GPU中可见,CPU也可见。4、使用关键字__device__ __constant__ int X,则意味着该变量是定义在grid中的,是一常量,在run的过程中不会改变其值,且GPU及CPU均可见,在CPU中可见,是因为CPU要把该值传入GPU中。*使用这些关键字时,如果是用了__local__,__shared__,__constant__,则不必要在前面加__device__,系统就会知道定义的是GPU上的变量,如果是定义了global memory 的变量,则需写__device__关键字即可。*自动变量,即没有任何限定词的,会自动的放到register中,除了数组,数组会存在local memory中,所以当声明数组时,必须存到thread中去run。怎样选择关键字呢?第一步,考虑该关键字是否被CPU可见:“是”,进入第二步;“不是”,进入第三步。第二步,如果要被CPU可见,则选择关键字__global__或者__constant__。而且在声明变量时,必须写在所有函数体外,保证全局性。第三步,如果不被CPU可见,则选择关键字__shared__或__local__或者缺省不写关键字(存在register中),这时变量声明必须在kernel 函数中。shared memory 是一个很重要的概念,因为如果我们每次都去access globalmemory的话,就要很久的时间,所以我们要提高速度,就得想怎样换到shared memory中去。这里我们采用的是tile data,即把数据切片的方法,变成一个个subset,使其刚好满足shared memory的大小,处理完数据之后再从sharedmemory传到global memory去。*指针只能指向定义在global memory中的函数或变量。
相关文章推荐
- 定义在GPU上的变量
- 变量的定义、声明、赋值和初始化的区别
- C语言全局变量定义与声明技巧
- 动画演示 Delphi 2007 IDE 功能[2] - 定义变量
- C/C++定义全局变量/常量几种方法的区别
- C/C++定义全局变量/常量几种方法的区别
- 关于头文件中定义的全局变量的包含
- 在MFC下如何定义全局变量和全局函数
- static在头文件中定义变量的问题
- jQuery的函数,有些直接就用$this(表示当前操作的标签),而也不见this在哪里定义过,这个this究竟谁什么?答:把this当成在内从中存在的JavaScript的一个变量即可,一个关键字
- Asp.net单页面操作的全局变量ViewState的定义
- 在MFC下如何定义全局变量和全局函数(转)
- 头文件防止变量被重复定义
- 1.3 Python入门学习之变量的定义 命名规则
- VS插件开发——格式化变量定义语句块
- PHP变量的定义、可变变量、变量引用、销毁
- 自己的代码的风格——关键字的定义(变量的定义)匈牙利命名法
- PHP变量定义和输出
- 关于如何访问interface中定义的变量
- 如何定义全局变量