任务的恒定大小 - 在 1x 和 2x CPU 上的执行时间相同 - OpenCl

Posted

技术标签:

【中文标题】任务的恒定大小 - 在 1x 和 2x CPU 上的执行时间相同 - OpenCl【英文标题】:Constant size of task - the same executing time on 1x and 2x CPU - OpenCl 【发布时间】:2017-01-24 07:43:58 【问题描述】:

我在理解关于 Integral 算法(在 OpenCl 中实现)的结果时遇到问题。 我可以使用两个 Intel Xeon E5-2680 v3 ,一个有 12 个内核。

从 OpenCl 我不知道为什么,但我只能看到一个设备,但我可以请求 12 或 24 个内核,所以我想如果使用 24 个内核,我“看到”一个或两个设备并不重要( 2 个 CPU)。

我正在以最大本地大小 = 4096 和最小全局大小 = 4096 运行这些任务,并且对于 1 个 CPU 和 2 个 CPU 执行时间相同,我将全局大小更改为 2* 4096、4* 4096、8 * 4096 和当我达到 16* 4096 全局大小时,1CPU 正在减速,但 2x CPU 正在加速,并且每下一个全局大小我都更改为比以前更大,2x CPU 比 1x CPU 快 2 倍。

我不明白为什么从一开始我们就看不到 2x CPU 优于 1x CPU。 对我来说同样重要的是,我正在收集 CPU 的功耗,在最后一个全局大小 = 8* 4096 中,当我们看到 1 个和 2 个 CPU 的执行时间相同时,我可以看到 2 个 CPU 的功耗要小一些,并且当全局大小增长时,我猜这 2 个 CPU 消耗低于 1 个 CPU,因为执行时间快了 2 倍,但它不应该等于或大于 1 个 CPU 吗? 可能重要的是:我检查了始终有 1 和 2 个 CPU 具有 2.5 Ghz 频率,并且它没有改变。 我关于上述的问题是:

    为什么在较小的全局 Size 上,1 CPU 和 2 CPU 的执行时间相等?

    为什么全局尺寸越大,2 CPU 的功耗越小。

    为什么在执行时间相等时全局大小 = 8*4096 的那一点,我使用 2 个 CPU 的功耗比 1 个 CPU 略低。

我需要补充一点,每次运行都是 10 倍,所以这些结果并非偶然

这是我的结果:

【问题讨论】:

【参考方案1】:

为什么在较小的全局 Size 的 1 CPU 和 2 CPU 上具有相同的执行 时间?

因为您使用 4096 作为本地大小。 cpu 的每个计算单元是 1 个核心。您将 16x4096 用于全局大小,因此它使用 16 个内核。可能您使用了内存绑定内核或一个内核访问其他 CPU 的缓存或内存,因此它使用 1 个内核或 N 个内核都没有关系。当您增加全局大小时,可以更频繁地使用其他 CPU 内存,从而形成更加对称的内存访问模式。

为什么在更大的全局尺寸上,2 CPU 的功耗更小。

2 CPU 有更多的缓存,因此它们可以同时调度更多的内核,甚至可能使数据的重用比访问 ram 低功耗。从 ram 中获取数据应该比从缓存中获取数据更耗电。

为什么在 Global Size = 8*4096 当我们有相等的时候 执行时间,我有 2 个 CPU 的功耗略低 超过 1 个 CPU。

使用 8 个内核(8 * 本地大小),必须使用单个 CPU,即使没有使用,相同的内存组组也可能被 CPU 使用,内存带宽成为瓶颈。同样,2 个 CPU 具有更多缓存,因此必须进行一些数据重用才能利用更大的缓存来降低功耗。


您应该尝试不同的设备裂变组合,以获得内核的最大局部性和数据共享性。线程可以随机分布在 CPU 和内核以及硬件线程之间。设备裂变解决了这个问题,并提供了对线程调度的更多控制。

【讨论】:

以上是关于任务的恒定大小 - 在 1x 和 2x CPU 上的执行时间相同 - OpenCl的主要内容,如果未能解决你的问题,请参考以下文章

拥有@2x 图像资源而没有@1x 资源

React Native应用程序不会将@ 1x,@ 2x或@ 3x图像加载到正确的屏幕密度

获取设备图像比例(例如@1x、@2x 和@3x)

如何为 tvOS 包含 1x 1080p 和 2x 4K 视频资产

人机界面指南 - 自定义标签栏图标的大小?

IOS标签栏图片大小和分辨率