cuda编程(5)

1、介绍图形处理单元 (GPU) 提供比 CPU 高得多的指令吞吐量和内存带宽 类似的价格和功率范围。 许多应用程序利用这些更高的功能来 在 GPU 上运行比在 CPU 上运行得更快。 其他计算设备,如 FPGA,也非常节能,但提供的能源要少得多 编程灵活性优于 GPU。GPU 和 CPU 之间存在这种能力差异是因为它们 设计时考虑了不同的目标。 虽然 CPU 旨在擅长执行 一系列操作,称为 线程 ,尽可能快且可以执行 几十个这样的线程并行运行,GPU 旨在擅长执行 数千个并行(分摊较慢的单线程性能以
摘要由CSDN通过智能技术生成

1、介绍

图形处理单元 (GPU) 提供比 CPU 高得多的指令吞吐量和内存带宽 类似的价格和功率范围。 许多应用程序利用这些更高的功能来 在 GPU 上运行比在 CPU 上运行得更快。 其他计算设备,如 FPGA,也非常节能,但提供的能源要少得多 编程灵活性优于 GPU。

GPU 和 CPU 之间存在这种能力差异是因为它们 设计时考虑了不同的目标。 虽然 CPU 旨在擅长执行 一系列操作,称为 线程 ,尽可能快且可以执行 几十个这样的线程并行运行,GPU 旨在擅长执行 数千个并行(分摊较慢的单线程性能以实现更大的吞吐量)。
2. 编程模型

2.1. 内核

CUDA C++ 通过允许程序员定义 C++ 函数来扩展 C++, 称为 kernels ,当被调用时,会在其中执行 N 次 由 N 个不同的 并行 CUDA 线程 ,而不是仅 曾经像普通的 C++ 函数一样。

内核定义为 global 宣言 说明符和执行该内核的 CUDA 线程数 给定的内核调用是使用新的 <<<…>>> 执行 配置 语法(请参阅 C++ 语言扩展 )。 每个执行内核的线程 被赋予一个唯一的 线程 ID ID ,该 可在 内核通过内置变量。

作为说明,以下示例代码,使用内置变量 线程标识符 , 将两个 向量 相加 A 和 B 大小为 N 的 并存储 结果转化为向量 C :

// 内核定义

__global__  void VecAdd( float * A, float * B, float * C) 
 {
    
     int i = threadIdx .x; 
     C[i] = A[i] + B[i]; 
 } 

 int main() 
 {
    
     ... 
     // 内核调用 N 个线程 
     VecAdd <<< 1, N >>> (A, B, C); 
     ... 
 } 

这里,每个 的 N 个 执行 线程 向量添加() 执行一对加法。
2.2. 线程层次结构

为了方便, 线程标识符 是一个三分量向量࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值