【发布时间】:2018-12-16 12:14:04
【问题描述】:
我试图了解 Nividia GPU 和普通(多线程)CPU 使用的线程技术之间的区别。特别是我的两个问题是:
系统的哪个部分对线程调度负责,它们是根据哪些方面调度的?
线程是否同步处理?
【问题讨论】:
标签: multithreading cuda gpu nvidia gpgpu
我试图了解 Nividia GPU 和普通(多线程)CPU 使用的线程技术之间的区别。特别是我的两个问题是:
系统的哪个部分对线程调度负责,它们是根据哪些方面调度的?
线程是否同步处理?
【问题讨论】:
标签: multithreading cuda gpu nvidia gpgpu
CUDA 内核和 CPU 内核从字面上看是完全不同的东西——名称更多的是一种营销方式;
负责线程调度是什么意思?它主要是软件和硬件。例如,纯 CPU 与实际的线程调度几乎没有关系,但提供了将线程调度器实现为操作系统一部分的必要功能。所以调度参数是由软件定义的。因此,您应该针对特定的操作系统提出您的问题。
CPU 提供的一件事就是所谓的硬件线程。每个硬件线程允许一个软件线程的“并行”执行。 (注意:使用超线程,执行并不是真正的并行,更多的是交错)。调度程序将所有正在运行的线程分布在这些硬件线程上。
这基本上是一个MIMD-System。
显卡上的调度要复杂得多。简而言之: 您有数千个 CUDA 内核 - 但与 CPU 相比,您无法为每个内核分配唯一的应用程序。 CUDA 核心被组织成组(所谓的 warp),同一组内的所有 CUDA 核心同时执行相同的线程。
这叫SIMT
【讨论】: