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甚至上百倍的提升,可是依据内存带宽来评估的话我们的程序还远远不够.在上一篇博客中给大家介绍 ...
随机推荐
- 集合并卷积的三种求法(分治乘法,快速莫比乌斯变换(FMT),快速沃尔什变换(FWT))
也许更好的阅读体验 本文主要内容是对武汉市第二中学吕凯风同学的论文<集合幂级数的性质与应用及其快速算法>的理解 定义 集合幂级数 为了更方便的研究集合的卷积,引入集合幂级数的概念 集合幂级 ...
- RMAN备份脚本执行遇到RMAN-03002,06091问题处理
一 问题描述 客户说RMAN备份脚本执行有的时候报错,有的时候正常!!! 远程登陆客户环境,查询最后一次备份的日志报错信息,得到 RMAN-03002: failure of delete comma ...
- NetCore.SignalR.Demo演示
项目github,点击https://github.com/wangpengzong/NetCore.SignalR.Demo 1.打开服务端Server(\SignalR.Server\bin\De ...
- Django Rest framework实现流程
目录 一 什么是restful架构 二 Django REST framework简介 三 Django REST framework原理 四 Django REST framework源码流程 五 ...
- BeautifulSoup库的安装与使用
BeautifulSoup库的安装 Win平台:“以管理员身份运行” cmd 执行 pip install beautifulsoup4 演示HTML页面地址:http://python123.io/ ...
- K2 BPM_【解决方案】从“制造”到“智造”,K2推动制造业转型升级_业务流程管理系统
近年来,中国制造业产出占全球总产品比例越来越大,是仅次于美国的全球第二大工业制造国,中国凭借巨大的制造业总量成为名副其实的“世界工厂”.然而个性化消费的兴起正在给制造企业各环节带来冲击.在现代市场环境 ...
- 配置和查看composer镜像
composer 默认地址改为中国镜像地址,以及中国镜像地址还原成默认地址 一.查看当前镜像地址 在命令行输入如下命令,即可查看全局镜像地址: $ composer config -g repo.pa ...
- MongoDB的删除操作
1.MongoDB 删除数据库的语法格式如下: db.dropDatabase() > show dbs admin .000GB config .000GB local .000GB sda ...
- redo log和bin log
讲redolog和binlog之前,先要讲一下一条mysql语句的执行过程. 1.client的写请求到达连接器,连接器负责管理连接.验证权限: 2.然后是分析器,负责复习语法,如果这条语句有执行过, ...
- poi 读取word 遍历表格和单元格中的图片
背景 项目需要解析word表格 需要批量导入系统,并保存每行信息到数据库 并且要保存word中的图片, 并保持每条信息和图片的对应关系 一行数据可能有多条图片 解决办法 没有找到现成的代码,怎么办呐? ...