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.
我认为这可能是一个非常愚蠢的问题,但我是 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.