《基于CUDA的并行程序设计》学习笔记(三)——中

本文详细介绍了CUDA编程模型,包括执行结构、内核函数、线程层次、存储器结构与线程映射机制、通信机制以及CUDA的软件体系。CUDA程序在主机与设备间交替运行,内核函数在GPU上并行执行。线程组织为grid和block,通过线程ID访问存储器。通信机制中,block内的线程通过共享存储器通信,grid内的线程借助全局存储器。CUDA软件体系由库函数、运行时API和驱动API构成,nvcc编译器负责编译流程。
摘要由CSDN通过智能技术生成

这里写图片描述


第3章 CUDA编程基础

3.3 CUDA编程模型

CUDA架构第一次引入了主机(host)端与设备(device)端的概念。如下图所示,一个完整的CUDA程序由主机代码和设备代码两部分组成。主机代码在主机端CPU上串行执行,是普通的C代码;设备代码部分在设备端GPU上并行执行,称为内核(kernel)。kernel函数不是一个完整的程序,而是任务中能被分解为并行执行的步骤的集合。CPU执行的串行程序负责kernel启动之前进行数据准备和设备初始化的工作,以及在kernel之间进行一些串行计算。GPU执行的并行部分是在被称为grid和block的两个层次并行中完成的,即每个kernel函数存在两个层次的并行:网络(grid)中的线程块(block)间并行金额线程块中的线程(thread)间并行。

这里写图片描述

3.3.1 执行结构

CUDA程序在执行过程中,主机代码与设备代码交替运行,程序从主机端的串行代码开始运行,当运行至设备代码时,调用内核函数,并切换到设备端,启动多个GPU线程(thread)并行执行设备代码。每一个线程块(block)均包含多个线程,执行相同的指令,达到线程块内的并行,同时在每个线程网格(grid)中,实现不同线程块之间的并行。设备完成计算后,返回主机线程,主机继续执行串行操作。重复以上过程,直到程度执行完毕。

3.3.2 内核函数

先看一个简单的C文件,实现长度均为N的数组A和数据B的相加,结果保存在数组C中。

void vectorAdd(float *A, float *B, float *C, int N)
{
    int x=0;
    while(x<=N-1)
    {
        C[i] = A[i] + B[i];
        x++;
    }
}
int main()
{
    float<
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值