购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.1 基本语法

如第3章所述,MXMACA程序由主机端代码和设备端代码共同组成。MXMACA C++语言提供了用于区分主机端和设备端代码的扩展语法。MXMACA C++语法主要是设备端代码遵循的语法规则,属于C++语言的扩展,支持C++11、C++14的全部特性及C++17的部分特性。

首先,MXMACA C++语言引入了以下两组关于函数和变量的特殊限定符。

● __global__、__device__、__host__这3个修饰函数的函数执行空间限定符:__global__修饰的函数也被称为核函数,是执行设备端代码的入口函数,可在主机端调用,返回类型固定为void;__device__修饰的函数只能在设备端被调用,其被称为设备端函数,只能被核函数或其他设备端函数调用;__host__主要用于修饰主机端函数,可省略,其主要作用是和__device__配合使用,表示被修饰函数既能在主机端调用也能在设备端调用。

● __device__、__shared__、__constant__、__managed__这4个修饰变量的变量存储空间限定符:均用于修饰能在设备端访问的变量,其中,__device__修饰的变量的存储位置为设备端的全局内存,__shared__修饰的变量的存储位置为设备端的同一线程块中的共享内存,__constant__修饰的变量的存储位置为设备端的全局只读内存,__managed__修饰的变量则能同时被设备端和主机端读写。

其次,MXMACA C++语言引入了新的符号<<<…>>>。其介于调用核函数时的函数名和参数列表之间,用于设置在主机端启动核函数时的配置。其接收4个参数:Dg,dim3类型,指定线程网格大小;Db,dim3类型,指定线程块大小;Ns,整型,指定动态共享内存大小,单位为字节,默认为0;S,mcStream_t类型,指定绑定的流,默认为0。

最后,对基于GPU物理架构的线程模型和内存模型的设备端编程,除了支持C++语法,MXMACA C++语言提供了的独有的内建变量和函数。比如,程序员可以借助gridDim、blockDim、blockIdx、threadIdx等内建变量区分当前核函数的执行线程,可以利用__syncthreads函数对一个线程块中的执行进行同步。

MXMACA基本语法示例见示例代码4-1,其包括统计字符x、y、z、w出现的次数,新增限定符的使用,设备端代码支持模板和匿名函数,基于范围的循环等C++语言特性的支持。 fY46DFzM/8xKq4lJPwVoMnGbtvM8VEg1Qvclx07Zg9jH66e9gHOecmuGmo3ayi5L

示例代码4-1 MXMACA基本语法示例
点击中间区域
呼出菜单
上一章
目录
下一章
×