cuda从入门到精通(一)之基本概念

本文介绍了CUDA的基本概念,探讨了CPU与GPU在异构计算框架中的角色与优势互补,展示了如何使用CUDA进行GPU编程,并提供了helloworld程序示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列博客配备github代码,本小节代码见:https://github.com/qixuxiang/cuda_zero_to_one/blob/master/hello.cu

开始学习cuda,当然刚开始应该讲环境配置,不过这里还是默认读者已经完成了CUDA环境配置,在ubuntu环境下开发。

CPU和GPU

CPU的全称是Central Processing Unit,而GPU的全称是Graphics Processing Unit。在命名上。这两种器件相同点是它们都是Processing Unit——处理单元;不同点是CPU是“核心的”,而GPU是用于“图像”处理的。在我们一般理解里,这些名称的确非常符合大众印象中它们的用途——一个是电脑的“大脑核心”,一个是图像方面的“处理器件”。但是聪明的人类并不会被简单的名称所束缚,他们发现GPU在一些场景下可以提供优于CPU的计算能力。举个不大贴切的例子:CPU可以看成大脑,虽然也可以计算,但是能力不强,善于发出各种指令调度;而GPU是四肢,接受CPU指令进行计算,负责搬砖跑腿。

在全民AI和全民挖矿的今天,GPU其实更被大家关注。无论是深度学习还是挖比特币,都需要强有力算力支撑,而算力背后就是一张张显卡,也就是GPU。

基于CPU和GPU的异构计算框架

上面写道:CPU发出指令,而GPU接受指令进行计算。GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,可以看成是CPU的协处理器,因此当我们在说GPU并行计算时,其实是指的基于CPU+GPU的异构计算架构。在异构计算架构中,GPU与CPU通过PCIe总线连接在一起来协同工作,CPU所在位置称为为主机端(host),而GPU所在位置称为设备端(device),如下图所示:

在这里插入图片描述可以看到GPU包括更多的运算核心,其特别适合数据并行的计算密集型任务,如大型矩阵运算,而CPU的运算核心较少,但是其可以实现复杂的逻辑运算,因此其适合控制密集型任务。另外,CPU上的线程是重量级的,上下文切换开销大,但是GPU由于存在很多核心,其线程是轻量级的。因此,基于CPU+GPU的异构计算平台可以优势互补,CPU负责处理逻辑复杂的串行程序,而GPU重点处理数据密集型的并行计算程序,从而发挥最大功效。

在这里插入图片描述
NVIDIA于2006年推出CUDA(Compute Unified Devices Architecture),可以利用其推出的GPU进行通用计算,将并行计算从大型集群扩展到了普通显卡,使得用户只需要一台带有Geforce显卡的笔记本就能跑较大规模的并行处理程序。CUDA提供了GPU编程的简易接口,基于CUDA编程可以构建基于GPU计算的应用程序。其实CUDA语言和C/C++语言完全兼容,只是新加了一些一些语法和约定。

我们先看一个最简单的hello world程序:

//hello.cu
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
int main(void) {
	printf("Hello CUDA \n");
	return 0;
}

编译和执行命令如下:

nvcc hello.cu -o hello
./hello

输出为Hello CUDA

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值