最近我学习了 Unity3D 中的计算着色器,我突然可以在 GPU 上每秒进行比在 CPU 上更多的计算,前提是我可以将它们写成以参数化方式并行执行相同操作的多个线程运行的任务。
但是,GPU 与屏幕共享内存而不是 CPU,这会导致在 CPU 和 GPU 之间传输大量数据时出现延迟,而且它与屏幕共享空间,该空间通常比 CPU 内存低很多。
我的台式机是 i7 INUC,具有 16GB 内存和 1TB SSD,而 GPU 是集成的 Intel 650,内存要低得多,尽管它可以与 CPU 共享一些内存。
如果我想扩展 GPU,我必须购买 Thunderbolt 3 外置 GPU。这些 GPU 相当昂贵,我看到一款 Sonnet 开发者版 GPU 售价约为 430 美元,其中包括一个 RX 580 和大约 8GB 的 RAM,当然它仍然必须与屏幕共享内存,而不是主 CPU 内存。
所以我想知道是否可以存在具有单独的数学处理单元用于并行计算的系统,就像可以与主 CPU 共享内存的 GPU 一样?
是否存在可以执行类似操作的系统,或者扩展我当前系统的方法?
这实际上不会留下任何操作传输时间。他们在 386 和 486 时代曾经制造过数学协处理器,当然它并不完全相同。
顺便说一下,我关心的不是游戏,我曾经是一个业余游戏开发者,但后来我开始想了解量子物理、工程学、微分方程以及其他数学和科学研究。
答案1
是的,这样的系统确实存在,但可能不是你想象的那样。大多数超级计算机实际上都是这样工作的,它们拥有一些传统上称为 CPU 的处理器(通常称为 I/O 处理器),以及大量称为数学处理器的处理器(通常称为应用处理器)。
用于此目的的应用处理器的硬件示例包括:
- 英特尔的 MIC 平台,也称为 Xeon Phi。这些是基于 x86 的设备(大多数型号都是全长双宽 PCI-e 卡,尽管有些型号已作为插槽式芯片发布),具有 200 个或更多的执行线程。许多大型超级计算机主要由这些设备构建,尽管您实际上可以在网上以几千美元的价格购买上一代的单卡。
- NVIDIA 的 Tesla 平台。这些平台最初是其等效 Quadro GPU 的简单超专业化变体,经过修改后没有视频输出,并针对 FP 计算(而不是渲染)的原始吞吐量进行了优化。如今,它们大多是功能齐全的 GPU,但仍然专注于原始处理能力而非渲染。它们在商业上相当容易获得,但价格同样昂贵。
- AMD 的 FireStream 平台。与 NVIDIA Tesla 的情况类似,只是 FireStream 几乎在十年前就消失了。你仍然可以在一些地方找到这种显卡,而且通常价格相当便宜,但按照今天的标准,它们的性能并不强。
其他各家公司也推出了类似的产品。例如,IBM 的 Watson 平台就是基于这一原理构建的完整系统,只不过各个处理器都是功能独立的系统。