关于CUDA的编程模型的一些介绍
2015-05-27 10:45
239 查看
首先大概介绍下CUDA的编程模型,然后以示例程序对运行在GPU上的内核函数进行简单的介绍。
1.一个完整的CUDA程序:
主机端CPU的串行+一系列设备端kernel函数并行
2.运行在GPU上的程序统称为Kernel也就是常讲的内核函数;内核函数必须通过 _global_函数类型限定符定义,并且只能在主机端代码中调用。
3.CUDA在执行大量计算时,将计算任务映射为大量可以并行执行的线程,内核函数kernel是以block为单位执行的;各block之间是并行执行的,block之间无法进行通信,也不区分执行顺序。
4.我们在使用GPU进行大量计算任务时,为了提高执行的效率,尽量避免进行整数的除法和求模,这些操作在GPU中都是非常慢的。
5.两层并行模型是CUDA最重要的创新之一:
两层的并行:
A.Grid中block之间的并行
B.block中thread之间的并行
其中CUDA编程模型最重要的创新:在同一个block中的线程可以进行数据之间的通信;
CUDA中实现block内通信的方法:在同一个block中的线程共享存储器实现数据的交换;通过栅栏同步保证线程间能够正确的共享数据。为了实现线程之间的同步我们在kernel函数中需要同步的位置调用_sysncthreads()函数。
示例程序:对两个尺寸为NXN的矩阵A和B进行求和运算,然后将结果存储在矩阵C中。
/*创建kernel函数实现矩阵的相加*/
_global_ void Add(float A
,float B
,float C
)
{
int i=threadIdx.x;
int j=threadIdx.y;
C[i][j]=A[i][j]+B[i][j];
}
int main(void)
{
dim3 block(N,N); //定义了新的数据类型dim3。dim3是基于uint3定义的矢量类型
Add<<<1,block>>>(A,B,C);//kernel内核函数中Grid有1个block,每个block中则有block(N,N)个thread
}
1.一个完整的CUDA程序:
主机端CPU的串行+一系列设备端kernel函数并行
2.运行在GPU上的程序统称为Kernel也就是常讲的内核函数;内核函数必须通过 _global_函数类型限定符定义,并且只能在主机端代码中调用。
3.CUDA在执行大量计算时,将计算任务映射为大量可以并行执行的线程,内核函数kernel是以block为单位执行的;各block之间是并行执行的,block之间无法进行通信,也不区分执行顺序。
4.我们在使用GPU进行大量计算任务时,为了提高执行的效率,尽量避免进行整数的除法和求模,这些操作在GPU中都是非常慢的。
5.两层并行模型是CUDA最重要的创新之一:
两层的并行:
A.Grid中block之间的并行
B.block中thread之间的并行
其中CUDA编程模型最重要的创新:在同一个block中的线程可以进行数据之间的通信;
CUDA中实现block内通信的方法:在同一个block中的线程共享存储器实现数据的交换;通过栅栏同步保证线程间能够正确的共享数据。为了实现线程之间的同步我们在kernel函数中需要同步的位置调用_sysncthreads()函数。
示例程序:对两个尺寸为NXN的矩阵A和B进行求和运算,然后将结果存储在矩阵C中。
/*创建kernel函数实现矩阵的相加*/
_global_ void Add(float A
,float B
,float C
)
{
int i=threadIdx.x;
int j=threadIdx.y;
C[i][j]=A[i][j]+B[i][j];
}
int main(void)
{
dim3 block(N,N); //定义了新的数据类型dim3。dim3是基于uint3定义的矢量类型
Add<<<1,block>>>(A,B,C);//kernel内核函数中Grid有1个block,每个block中则有block(N,N)个thread
}
相关文章推荐
- 关于TI DSP 的软件编程的一些库介绍
- 关于TI DSP 的软件编程的一些库介绍
- CUDA C 编程权威指南 学习笔记:第二章 CUDA编程模型
- 服务器编程:关于群集的更正式的介绍
- 关于字符编码的一些介绍
- SOA编程模型介绍
- 关于网络编程(服务端)的一些笔记(zz)
- 关于使用PRO*C编程的一些简单说明和例子
- 关于网络编程中一些常用函数的理解
- 关于重叠IO网络编程模型的学习!
- 关于编程一些鲜为人知的真相
- 关于freeMarker的一些基本介绍~
- 关于字符编码的一些介绍
- 关于高频头(Tuner)的一些简要介绍
- 关于网络编程中MTU、TCP、UDP优化配置的一些总结
- 关于Homer2项目的一些介绍
- ios 关于常用的一些第三方框架的介绍
- http请求之关于content-type的一些介绍
- 看cuda初级教程视频笔记(周斌讲的)--CUDA、GPU编程模型
- 关于UML中逻辑模型的工具的详细介绍