OpenCL为吞吐量选择最佳设备



我正在使用Cloo,一个OpenCL C#库,我想知道如何最好地确定在运行时为我的内核使用哪个设备。我真正想知道的是GPU上有多少内核(计算单元*每个计算单元的内核)。我该如何正确地做到这一点?我目前可以确定计算单位和频率。

编辑:我已经考虑过在所有设备上进行评测(运行速度测试)并保存/比较结果。但是,据我所知,这也带来了一个问题,因为你无法编写一个最佳/公平地使用所有设备进行比较的程序。

这对于为每个内核调用选择最佳数量的工作线程也很有用。非常感谢您的帮助。

仅通过核心数量来判断性能是非常困难的。有些核心更宽,有些更快。即使它们相同,不同的寄存器空间/本地内存组合也会使猜测变得更加困难。

您应该有一个每个驱动程序、每个操作系统、每个算法的每个显卡性能数据库,并将其与当前频率相乘,或者在选择之前简单地对其进行基准测试,或者在所有设备进行实际加速工作时查询其性能计时器。

GTX680和HD7950具有相似数量的内核,但一些算法支持HD7950以获得额外的%200性能,而其他一些代码则相反。

无法查询核心数量。您可以查询计算单元的数量和每个计算单元的最大线程数,但除非它们具有相同的体系结构,否则它们与性能无关。

您可以查询每个工作组的最佳线程数,但这可能会随着您使用的算法而改变,因此您应该尝试尽可能多的值。标量函数的矢量化版本也是如此。如果它是一个cpu(或任何vliw-gpu),它可以同时乘以4或8个数字。

有时,驱动程序的自动编译器优化与手动调优的优化一样好。

https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetDeviceInfo.html

相关内容

  • 没有找到相关文章

最新更新