OpenCL:查询处理元素的数量

OpenCL:查询处理元素的数量,opencl,Opencl,是否可以在OpenCL中查询处理元素的数量(每个计算单元)?如果是,如何进行?我在上找不到相应的参数 我不确定处理元素是否是标准术语。我是从学校得到这个词的 我想查询这些信息是因为我很好奇,不是出于实际目的。处理元素(PE)是标准术语,不,您不能查询数字 现在我看到了一些不可能的原因: 定义本身: PE:虚拟标量处理器。一个工作项可以在一个或多个服务器上执行 处理元素 因此,根据体系结构的不同,返回的数字或多或少是没有意义的。例如,我认为以前的AMD GPU架构使用VLIW处理器 PE是标准中最

是否可以在OpenCL中查询处理元素的数量(每个计算单元)?如果是,如何进行?我在上找不到相应的参数

我不确定处理元素是否是标准术语。我是从学校得到这个词的

我想查询这些信息是因为我很好奇,不是出于实际目的。

处理元素(PE)是标准术语,不,您不能查询数字

现在我看到了一些不可能的原因:

  • 定义本身:

    PE:虚拟标量处理器。一个工作项可以在一个或多个服务器上执行 处理元素

    因此,根据体系结构的不同,返回的数字或多或少是没有意义的。例如,我认为以前的AMD GPU架构使用VLIW处理器

  • PE是标准中最有用的一种抽象,用于说明/定义一些概念,例如SIMD、SPMD以及平台模型的定义。但这一概念并未在实践中使用(尽管开发人员了解这一概念对于实现良好性能非常有用)。您将关注工作组中的最大工作项数

  • 即使在给定的体系结构中,处理元素也有不同的类型。例如,如果我们以SMx(相当于计算单元)为例,它有192个SP CUDA内核、64个DP单元和32个特殊功能单元(SFU)。那么,询问PE数量的查询返回的数字应该是多少


  • 对不同的最大线程数进行基准测试,然后找到获得最大占用/发布的线程数。例如,1280内核的GPU将很乐意使用1280(或256 x 5)线程和多个线程。但是它不喜欢1024个线程、2048个线程和4096个线程,因为在这个设置中总是有空的/等待的空闲内核。另外,不要忘记将线程组大小设置为256(更小的线程组只会增加占用并使基准测试过时)。256倍的工作台。如果2048和2604给出相同的结果,那么将线程组大小减少到128,并测试2048-2604这一较窄的范围。@huseyintugrulbuyukisik我是OpenCL的完全初学者。我认为你的评论意味着没有直接简单的方法通过标准OpenCL查询这个问题,对吗?你需要一个“更接近硬件”的API,甚至可能需要像gpu-z一样使用gpu的驱动程序(我不希望这是一个数据库硬编码的东西)。当我第一次启动opencl时,我也在搜索同样的东西,但找不到。即使在compubench.com网站上也无法列出他们的核心编号。例如,HD7750的每个计算单元的核心数与HD7970的相同(所有64个用于GCN)。Nvidia卡通常有192个用于600系列。Intel HD使用4和8宽。版本。摆弄驱动程序来查询核心编号或使用数据库或获取计算单元编号并将其乘以192/64。@huseyintugrulbuyukisik“不可能”也是可以接受的答案。你应该考虑张贴它。