OpenCL仅在GTX 760上显示6个并行comute单元?

OpenCL仅在GTX 760上显示6个并行comute单元?,opencl,gpu,Opencl,Gpu,我认为这可能是一个非常愚蠢的问题,但我对OpenCL非常陌生,刚刚用GTX 760 GPU在我的台式计算机上运行了它 现在,当我查询OpenCL的CL\u设备\u MAX\u计算单元时,它说GPU上有6个。然而,在板载gpu(英特尔高清图形4600)上,它说有20个 这似乎有点令人失望,因为我希望GTX比板载GPU有更多功能 或者CL\u设备\u MAX\u计算单元是否不能直接转换为内核数?您可能会想,“我的设备有多少内核?”“因此我将启动那么多线程。” 这种思维方式对于OpenCL/CUDA这

我认为这可能是一个非常愚蠢的问题,但我对OpenCL非常陌生,刚刚用GTX 760 GPU在我的台式计算机上运行了它

现在,当我查询OpenCL的
CL\u设备\u MAX\u计算单元时,它说GPU上有6个。然而,在板载gpu(英特尔高清图形4600)上,它说有20个

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

或者
CL\u设备\u MAX\u计算单元
是否不能直接转换为内核数?

您可能会想,“我的设备有多少内核?”“因此我将启动那么多线程。”

这种思维方式对于OpenCL/CUDA这样的案例是错误的


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

所以第一个未知是:“一个内核可以运行多少线程?”,在编译代码之前是未知的,不同版本的编译器/驱动程序可能会导致不同的结果

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


你必须认为一个GPU是一个未知数量的非常简单的工人,他们只能在X组中执行相同的任务

唯一重要的问题是“在同一组中有多少线程将并行工作?”。因为您可以使用一些巧妙的协作技术,使这些线程一起运行得更快。这就是“工作组规模”

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


与CPU时钟速度相同,或者一级缓存不是CPU编程中的设计参数。gtx 760可以读取6个cl计算单元,但我认为每一个计算单元实际上都是192个核加上宣传的6*192=1152个核的虚拟化。如果不是这样,请纠正我。单凭这个数字并不能说明卡片的性能,也不能说明您可以分配的工作量。还有一个简单的问题,看看它是否有帮助:这是有道理的。有没有办法查询线程数?也就是说,我能在不知道具体卡的情况下动态地找到号码1152吗?显然,如果你只想知道规格细节,你就无法得到这个号码。如果你需要维基百科列表中的信息,可以做一个网络爬虫。CL_设备\u最大\u工作\u组\u大小将告诉您允许的最大工作项计数,但您无法知道您正在发出的工作是否并行执行,您必须“信任”硬件。换句话说,拥有1152个线程并不意味着每个线程都在自己的核心中执行。