附录 A,CUDA计算设备 附录 B,C语言扩展 ▶ 函数的标识符 ● __device__,__global__ 和 __host__ ● 宏 __CUDA_ARCH__ 可用于区分代码的运行位置. __host__ __device__ void fun() { # // 代码运行于计算能力 6.x 设备 #elif __CUDA_ARCH__ >= 500 // 代码运行于计算能力 5.x 设备 #elif __CUDA_ARCH__ >= 300 // 代码运行于计算能力 3.x 设备…
▶ 图形互操作性,OpenGL 与 Direct3D 相关.(没学过,等待填坑) ▶ 版本号与计算能力 ● 计算能力(Compute Capability)表征了硬件规格,CUDA版本号表征了驱动接口和运行时接口的(软件)规格. ● Driver API 的版本号定义在在驱动头文件中的宏 CUDA_VERSION 中. ● 原文,理解 Driver API 向后兼容以及非向前兼容.This is important, because the driver API is backward comp…
▶ 纹理内存使用 ● 纹理内存使用有两套 API,称为 Object API 和 Reference API .纹理对象(texture object)在运行时被 Object API 创建,同时指定了纹理单元.纹理引用(Tezture Reference)在编译时被 Reference API 创建,但是在运行时才指定纹理单元,并将纹理引用绑定到纹理单元上面去. ● 不同的纹理引用可能绑定到相同或内存上有重叠的的纹理单元上,纹理单元可能是 CUDA 线性内存或CUDA array 的任意部分.…
▶ 动态并行. ● 动态并行直接从 GPU 上创建工作,可以减少主机和设备间数据传输,在设备线程中调整配置.有数据依赖的并行工作可以在内核运行时生成,并利用 GPU 的硬件调度和负载均衡.动态并行要求算法和程序要提前改进,消除递归.不规则的循环.结构或其他不适合并行的情况. ● 动态并行的经典图 ● 主机中 Runtime API 提供了跟踪运行核.流与事件的函数,对主机进程中的所有线程来说 CUDA 对象都是可共享的,但是主机调用的各核函数之间是相互独立的,CUDA 对象不能共享(重叠读写).…
▶ 纹理内存访问补充(见纹理内存博客 http://www.cnblogs.com/cuancuancuanhao/p/7809713.html) ▶ 计算能力 ● 不同计算能力的硬件对计算特性的支持. ● 不同计算能力的硬件技术特性(重要). ● 浮点运算技术标准描述(原文) ■ All compute devices follow the IEEE 754-2008 standard for binary floating-point arithmetic with the followin…
▶ 协作组,要求 cuda ≥ 9.0,一个简单的例子见 http://www.cnblogs.com/cuancuancuanhao/p/7881093.html ● 灵活调节需要进行通讯的线程组合(不一定是线程块或是线程束)的尺寸,在更多粒度上进行线程协作. ● 协作组功能支持 CUDA 的各种并行模式,包括生产者 - 消费者并行(producer-consumer parallelism),机会并行(opportunistic parallelism),全网个同步(global synch…
▶ 线程束表决函数(Warp Vote Functions) ● 用于同一线程束内各线程通信和计算规约指标. // device_functions.h,cc < 9.0 __DEVICE_FUNCTIONS_STATIC_DECL__ int __all(int a) { int result; asm __volatile__("{ \n\t" ".reg .pred \t%%p1; \n\t" ".reg .pred \t%%p2; \n\t&…
▶ 可缓存只读操作(Read-Only Data Cache Load Function),定义在 sm_32_intrinsics.hpp 中.从地址 adress 读取类型为 T 的函数返回,T 可以是 char,short,int,long longunsigned char,unsigned short,unsigned int,unsigned long long,int2,int4,uint2,uint4,float,float2,float4,doubledouble2 . T _…
▶ 表面内存使用 ● 创建 cuda 数组时使用标志 cudaArraySurfaceLoadStore 来创建表面内存,可以用表面对象(surface object)或表面引用(surface reference)来对其进行读写. ● 使用 Surface Object API ■ 涉及的结构定义.接口函数. // vector_types.h ) uchar4 { unsigned char x, y, z, w; }; // surface_types.h typedef __device…
1. 简介 2. 编程模型 ▶ SM version 指的是硬件构架和特性,CUDA version 指的是软件平台版本. 3. 编程接口.参考 http://chenrudan.github.io/ ▶ Runtime API 为较高层级的管理接口,提供申请和释放设备内存,在主机和设备之剑转移数据,管理多 GPU 系统等.Driver API 为较低层级的控制接口,提供 CUDA 上下文,模拟设备主机进程,CUDA 模块,模拟设备动态加载库等.软件层面上看,Runtime 比 Driver A…