OpenCL 在 GTX 760 上只显示 6 个并行计算单元?

OpenCL only show 6 parallel comute units on GTX 760?

我认为这可能是一个非常愚蠢的问题,但我是 OpenCL 的新手,刚刚在我的台式机上使用 GTX 760 GPU 获得它 运行。

现在,当我查询 OpenCL 的 CL_DEVICE_MAX_COMPUTE_UNITS 时,它说 GPU 上有 6 个。然而在板载GPU(Intel HD Graphics 4600)上它说有20.

这似乎有点令人失望,因为我希望 GTX 比板载 GPU 多得多?

或者 CL_DEVICE_MAX_COMPUTE_UNITS 不会直接转化为核心数?

你倾向于认为,"Oh how many cores my device has?""Therefore I will launch that many amount of threads."

对于OpenCL/CUDA这样的情况,这种思维方式是错误的。


一个核心包含有限数量的资源、内存和线程。根据每个 "thread" 将使用多少(因此,取决于 code/kernel),内核将能够同时 运行 不同数量的线程。

所以第一个未知数是:"How many threads a core can run?",直到代码编译后才知道,不同版本的compiler/driver会导致不同的结果。

如果你不知道每个核心有多少线程,那么知道“6x?=?”有什么用。您仍然不知道有多少线程可以 运行 并行,而且您永远也不会知道。当然可以取到最大值,但不一定总是这样,那在实际应用中有什么用呢?


您必须认为 GPU 是未知数量的非常简单的工作人员,只能以 X 组的形式执行相同的任务。

唯一重要的问题是"How many threads are going to work in parallel in the same group?"。因为您可以执行一些巧妙的合作技巧,使这些线程 运行 更快地结合在一起。那就是 "work group size".

其他参数简直就是多余的。只会让你的应用程序更快或更慢。或者允许您同时 运行 多项任务。但它不应该是一个设计参数。

与CPU时钟速度相同,或者L1缓存不是CPU编程中的设计参数。或者还有多少其他应用 运行ning.