CUDA编程前言
GPU架构
GPU特别适用于 密集计算,高度可并行计算,图形学
晶体管主要被用于 执行计算,而不是缓存数据,控制指令流
GPU计算的历史
2001/2002 —— 研究人员把GPU当做数据并行协处理器
GPGPU领域从此诞生
2007—— NVIDIA 发布 CUDA
CUDA 统一计算设备架构
GPGPU发展成 GPU Computing
2008—— Khronos 发布OpenCL 规范
CUDA术语
Host——主机端,通常指CPU,采用标准C语言编程,C++,Python
Device——设备端,通常指GPU(数据可并行)
采用标准C的扩展语言编程
Host和Device拥有各自的存储器
CUDA编程包括主机端和设备端两部分代码
Kernel——数据并行处理函数(核函数),Kernel是指执行在GPU上的完整代码
通过调用Kernel函数在设备端创建轻量级线程,线程由硬件负责创建并调度
函数声明
__global__ void KernelFunc() 只能从主机端调用,在设备上执行,入口函数
__device__ float DeviceFunc() 设备 设备
__host__ float HostFunc() 主机 主机
__global__ 返回值类型必须是 void
__device__ 曾经默认内联,现在有些变化
__device__ 和 __host__ 可以同时使用
CUDA/GPU编程模型
CPU/GPU互动模型
GPU线程组织模型
GPU存储模型
基本的编程问题
CPU-GPU交互
各自的物理内存
通过PCIE总线互连
交互开销较大
并行编程模型
共享存储模型
线程模型
消息传递模型
数据并行模型
具体实例
OpenMp
MPI
SPMD:单指令多数据相似,每一个代码段处理多个数据
MPMD:多指令多数据
线程层次
Grid——一维或多维线程块(block)
一维或二维
Block——一组线程
一维,二维或三维
一个 Grid 里的每个 Block 的线程数是一样的
CUDA存储器类型(访存速度由大到小)
Register 寄存器
shared memory 共享内存
local memory 局部存储器
global memory 全局存储器
constant memory 常量存储器
texture memory 纹理存储器
内存模型
变量声明 存储器 作用域 生命期
必须是单独的自动变量不能是数组 register thread kernel
自动变量数组 local thread kernel
__shared__ int sharedVar shared block kernel
__device__ int globalVar global grid application
__constant__ intconstantVar constant grid application
global 和 constant 变量
Host 可以通过以下函数访问
cudaGetSymbolAddress()
cudaGetSymbolSize()
cudaMemcpyToSymbol()
cudaMemcpyFromSymbol()
Constants 变量必须在函数外声明
向量数据类型
char [1-4], uchar[1-4]
short [1-4],
int [1-4],
long [1-4],
longlong [1-4],
float [1-4]
double1, double2
同时适用 host 和 device 代码
通过make_<type name> 构造
int2 i2 = make_int2(1,2);
float4 f4 = make_float(1.0f,2.0f,3.0f,4.0f);
通过 .x .y .z 和 .w 访问
int2 i2 = make_int2(1,2);
int x = i2.x;
int y = i2.y;
数学函数
部分函数列表
sqrt,rsqrt
exp,log
sin,cos,tan,sincos
asin,acos,atan2
trunc,ceil,floor
Intrinsic function 内建函数
仅面向 device 设备端
更快,但精度降低
以__为前缀
__exp,__log,__sin,__pow.....
CUDA编程前言的更多相关文章
- CUDA 编程的基本模式
reproduced from: http://www.cnblogs.com/muchen/p/6306747.html 前言 本文将介绍 CUDA 编程的基本模式,所有 CUDA 程序都基于此模式 ...
- 不同版本CUDA编程的问题
1 无法装上CUDA的toolkit 卸载所有的NVIDIA相关的app,包括NVIDIA的显卡驱动,然后重装. 2之前的文件打不开,one or more projects in the solut ...
- cuda编程基础
转自: http://blog.csdn.net/augusdi/article/details/12529247 CUDA编程模型 CUDA编程模型将CPU作为主机,GPU作为协处理器(co-pro ...
- CUDA学习笔记(一)——CUDA编程模型
转自:http://blog.sina.com.cn/s/blog_48b9e1f90100fm56.html CUDA的代码分成两部分,一部分在host(CPU)上运行,是普通的C代码:另一部分在d ...
- CUDA编程
目录: 1.什么是CUDA 2.为什么要用到CUDA 3.CUDA环境搭建 4.第一个CUDA程序 5. CUDA编程 5.1. 基本概念 5.2. 线程层次结构 5.3. 存储器层次结构 5.4. ...
- CUDA编程-(1)Tesla服务器Kepler架构和万年的HelloWorld
结合CUDA范例精解以及CUDA并行编程.由于正在学习CUDA,CUDA用的比较多,因此翻译一些个人认为重点的章节和句子,作为学习,程序将通过NVIDIA K40服务器得出结果.如果想通过本书进行CU ...
- cuda编程(一)
环境安装和例程运行 显卡主要有两家,ATI.NVIDIA,简称A卡和N卡.随着GPU计算能力的上升,采用GPU并行计算来加速的应用越来越多. Nvidia创立人之一,黄仁勋(Jen-Hsun Huan ...
- CUDA编程入门,Dim3变量
dim3是NVIDIA的CUDA编程中一种自定义的整型向量类型,基于用于指定维度的uint3. 例如:dim3 grid(num1,num2,num3): dim3类型最终设置的是一个三维向量,三维参 ...
- CUDA编程(六)进一步并行
CUDA编程(六) 进一步并行 在之前我们使用Thread完毕了简单的并行加速,尽管我们的程序运行速度有了50甚至上百倍的提升,可是依据内存带宽来评估的话我们的程序还远远不够.在上一篇博客中给大家介绍 ...
随机推荐
- 偶数矩阵 Even Parity,UVa 11464
题目描述 Description 给你一个n*n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.如图所示的矩阵至少要把3个 ...
- Spring Cloud Alibaba学习笔记(2) - Nacos服务发现
1.什么是Nacos Nacos的官网对这一问题进行了详细的介绍,通俗的来说: Nacos是一个服务发现组件,同时也是一个配置服务器,它解决了两个问题: 1.服务A如何发现服务B 2.管理微服务的配置 ...
- 3_PHP表达式_1_常量
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. PHP常量分为自定义常量与预定义常量. 1.自定义常量 在使用前必须先定义,PHP的define()函数专门用于定 ...
- kvm第五章--虚拟迁移
- Xcode如何快速定位crash的位置?
最近发现经常有人程序崩掉后不知道怎么定位crash的位置 如何快速定位crash的位置? 选择右箭头 选择Add Exception Breakpoint 这样如果你的app再crash就会自动定位到 ...
- 戴尔 R730 服务器装 server 2016。
服务器里面原装系统是 centos 7 ,服务器快递过来时 我没用root账号,(主要是主管忘了这台服务器用户名密码了). 需要用的系统是 server 2016 我这边就按正常的装机流程装机. 1, ...
- MySQL运行机制原理&架构
1.MySQL知识普及: MySQL是一个开放源代码的关系数据库管理系统. MySQL架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统 ...
- PAT基础级-钻石段位样卷2-7-4 6翻了 (15 分)
“666”是一种网络用语,大概是表示某人很厉害.我们很佩服的意思.最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思.如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字 ...
- Markdown 语法介绍
Markdown 语法介绍 from:https://coding.net/help/doc/project/markdown.html 文章内容 1 Markdown 语法介绍 1.1 标题 1.2 ...
- 《AlwaysRun!团队》第四次作业:项目需求调研与分析
项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daiz ...