【CUDA并行程序设计系列(3)】CUDA线程模型

时间:2024-10-10 22:27:50

前言

CUDA并行程序设计系列是本人在学习CUDA时整理的资料,内容大都来源于对《CUDA并行程序设计:GPU编程指南》、《GPU高性能编程CUDA实战》和CUDA Toolkit Documentation的整理。通过本系列整体介绍CUDA并行程序设计。内容包括GPU简介、CUDA简介、环境搭建、线程模型、内存、原子操作、同步、流和多GPU架构等。

本系列目录:

  • 【CUDA并行程序设计系列(1)】GPU技术简介
  • 【CUDA并行程序设计系列(2)】CUDA简介及CUDA初步编程
  • 【CUDA并行程序设计系列(3)】CUDA线程模型
  • 【CUDA并行程序设计系列(4)】CUDA内存
  • 【CUDA并行程序设计系列(5)】CUDA原子操作与同步
  • 【CUDA并行程序设计系列(6)】CUDA流与多GPU
  • 关于CUDA的一些学习资料

前一章的代码虽然是在GPU上执行,但并没有涉及到并行运行。GPU计算的应用情景在很大程度上取决于能否从许多问题中发掘出大规模并行性。本文将介绍CUDA的线程模型,通过实例代码(矢量加法和矩阵加法)演示CUDA下的并行程序设计。

矢量加法

我们通过比较在CPU和GPU的矢量加法的例子来看CUDA的并行执行,矢量加法CPU的代码如下:

#include <>
#define N 10
void vecAdd(int *a, int *b, int *c)
{
      int tid = 0;
      while (tid < N)
      {
            c[tid] = a[tid] + b[tid];
            ++tid;
      }
}
int main(void)
{
      int a[N], b[N], c[N];

      for (int i = 0; i < N; ++i)
      {
            a[i] = -i;
            b[i] = i * i;
      }
      vecAdd (a, b, c);
      for (int i = 0; i < N; ++