首页 > 解决方案 > CUDA 拥有并行内核意味着什么?

问题描述

我正在阅读一篇关于 CUDA 的文章,上面写着“CUDA 程序是具有并行内核的串行程序”。我的问题是:

  1. 它是一个串行程序意味着什么?我知道串行与并行相反,但是对于在不同处理器、不同内核等上运行的 CUDA 代码而言,这意味着什么?我知道 CUDA 的意义在于它促进了并行编程,所以我很想知道它的哪一部分是串行的。

  2. 拥有多个内核意味着什么?我一直认为内核是操作系统的一部分,我认为 CUDA 只是在操作系统中运行的软件,对吧?CUDA 如何拥有多个内核以及如何使用它们来实现并行性?

标签: parallel-processingcudaoperating-systemkernel

解决方案


  1. CUDA 内核是从单线程的角度编写的。它回答了“每个线程会做什么?”的问题。CUDA 内核为每个线程将做什么提供了一个单一的定义。从单线程的角度来看,它似乎是一个串行程序。然而,它在启动时变为并行,当许多线程“并行”执行相同的代码时。

  2. 我认为你误解了。CUDA 具有“并行内核”意味着 CUDA 中的每个内核都有机会表达(根据它的编写方式,以及 CUDA 概念的细节,例如内置变量)和清单(在启动时,跨多个执行线程) 并行性。这并不意味着 CUDA 本质上需要多个内核来表达并行性。单个 CUDA 内核启动本质上是并行的。

您可能希望阅读CUDA 编程指南


推荐阅读