OpenCl每个计算单元的最大线程束(warp)和工作组(work-group)

3

我能否通过像clGetDeviceInfo这样的函数在一个计算单元上获得最大的warp/work-group呢?从我所找到的信息来看,这个数字仅取决于计算能力。那么是否有可以检测它的函数呢?

谢谢 jikra

1个回答

1

我想你正在寻找clGetKernelWorkGroupInfo

具体来说,CL_KERNEL_WORK_GROUP_SIZE和CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE将帮助您调整工作组大小。


谢谢您的回答,但我还需要其他东西: 我需要为一些测试设置所需的占用率。因此,我需要知道可以在我的硬件上运行的最大warp,并计算NDRange维度在所需占用率附近的分布。因此,我需要允许硬件的计算单元上的最大可能活动线程数。我能找到这个吗? - cizek
CL_KERNEL_WORK_GROUP_SIZE size_t -- 这提供了一种机制,使应用程序能够查询可以在特定设备上执行内核的最大工作组大小,该设备由device指定。 OpenCL实现使用内核的资源需求(例如寄存器使用情况)来确定这个工作组大小应该是什么。 - mfa
是的,我理解这个。如果我有NVidia Qadro 3000M,那么每个计算单元最多可以有48个warp和8个工作组。如果我的内核有63个寄存器,则CL_KERNEL_WORK_GROUP_SIZE返回512。 如果我执行NDRange(1,1,1)(1,32,16),则一个计算单元中总共有16个活动warp。 占用率将为16/48 = 0.33(33%),但如果我执行NDRange(2,1,1)(1,24,16),则一个计算单元中只有12个活动warp。 占用率将为12/48 = 0.25(25%)。为了进行此计算,我需要知道计算单元上的最大活动warp。 - cizek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接