当我们有显卡时,多核 CPU 的目的是什么?
What is the purpose of many-core CPU's when we have graphics cards?
我的理解是,要使一个问题受益于多核,就需要能够将其拆分为多个互不依赖的子任务。
但是,如果一个算法可以在多核 CPU 上分成 8、16 或 64 个子任务 运行,是什么阻止你进一步拆分它 运行在显卡上?那不是更快吗?
众核 CPU 有哪些 GPU 无法做到的?
这是我一直在处理的两个问题:
答:你在 3-space 中有一个三角形,里面有 64,000 个点 (xyz)。对于每个点,计算从点向上或向下到三角形平面的距离,以及向上或向下移动三角形每个角的量会影响距离。 (完美 TIN)
B:你有6542个质数;对于每个你想计算那么多数字的排列(例如,对于 7,你计算 0,1,2,3,4,5,6 的排列)。要计算素数 p 的排列,您必须将 p-2 分成两个较小的数字,对它们进行因式分解,查找它们因子的排列,并以某种方式交错排列。 (四分之一)
问题 A 非常适合 GPU 以及众核 CPU。 (我目前 运行 它在 12 线程 CPU 上,但还没有为 GPU 编码。)每个 GPU 核心 运行 都是完全相同的计算,唯一的区别是 xyz点的坐标。没有分支,循环运行每个点的次数相同。
问题 B 可以在多核 CPU 上 运行,但不太适合 GPU。较小的数字具有不同数量的因子,因此每个核心必须 运行 通过不同次数的循环。
在 GPU 中,每组内核 运行 对不同的数据执行相同的指令序列(不仅仅是相同的代码)。在多核 CPU 中,每个核都可以 运行 使用相同的代码,但指令序列不同,因为分支和循环的路径不同。内核也可以 运行 不同的代码;例如一个线程将文件中的数据读入缓冲区,而另一个线程将它们组织成某种结构。
我的理解是,要使一个问题受益于多核,就需要能够将其拆分为多个互不依赖的子任务。
但是,如果一个算法可以在多核 CPU 上分成 8、16 或 64 个子任务 运行,是什么阻止你进一步拆分它 运行在显卡上?那不是更快吗?
众核 CPU 有哪些 GPU 无法做到的?
这是我一直在处理的两个问题:
答:你在 3-space 中有一个三角形,里面有 64,000 个点 (xyz)。对于每个点,计算从点向上或向下到三角形平面的距离,以及向上或向下移动三角形每个角的量会影响距离。 (完美 TIN)
B:你有6542个质数;对于每个你想计算那么多数字的排列(例如,对于 7,你计算 0,1,2,3,4,5,6 的排列)。要计算素数 p 的排列,您必须将 p-2 分成两个较小的数字,对它们进行因式分解,查找它们因子的排列,并以某种方式交错排列。 (四分之一)
问题 A 非常适合 GPU 以及众核 CPU。 (我目前 运行 它在 12 线程 CPU 上,但还没有为 GPU 编码。)每个 GPU 核心 运行 都是完全相同的计算,唯一的区别是 xyz点的坐标。没有分支,循环运行每个点的次数相同。
问题 B 可以在多核 CPU 上 运行,但不太适合 GPU。较小的数字具有不同数量的因子,因此每个核心必须 运行 通过不同次数的循环。
在 GPU 中,每组内核 运行 对不同的数据执行相同的指令序列(不仅仅是相同的代码)。在多核 CPU 中,每个核都可以 运行 使用相同的代码,但指令序列不同,因为分支和循环的路径不同。内核也可以 运行 不同的代码;例如一个线程将文件中的数据读入缓冲区,而另一个线程将它们组织成某种结构。