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

任务大小不变-在1x和2x CPU上的执行时间相同-OpenCl,opencl,cpu,cpu-usage,multicore,energy,Opencl,Cpu,Cpu Usage,Multicore,Energy,我在理解有关积分算法(在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

我在理解有关积分算法(在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,并且没有变化。 我对上述问题的提问如下:

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

  • 为什么在更大的全球规模的2 CPU有更小的功耗

  • 为什么在这一点上,当全局大小=8*4096时,当我们有相等的执行时间时,我用2个CPU比1个CPU的功耗稍微少一些

  • 我需要补充的是,每次跑步都是10倍,所以这些结果不是偶然的

    以下是我的结果:

    为什么在较小的全局大小上,1个CPU和2个CPU的执行相同 时间

    因为您使用了4096作为本地大小。cpu的每个计算单元是一个核心。您将16x4096用作全局大小,因此它使用16个内核。可能您使用了一个内存受限的内核,或者一个内核访问另一个CPU的缓存或内存,所以它使用1个内核还是N个内核并不重要。当您增加全局大小时,可以更频繁地使用其他CPU内存,从而使内存访问模式更加对称

    为什么在更大的全球规模的2 CPU有更小的功耗

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

    为什么在这一点上,当我们有相等的 执行时间,使用2个CPU时,我的功耗略低 超过1个CPU

    使用8个内核(8*本地大小),单CPU必须已经在使用,即使没有,CPU和内存带宽都可能在使用相同的内存组。同样,2个CPU有更多的缓存,所以必须进行一些数据重用,以利用更大缓存的优势,从而降低功耗


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

    为什么在较小的全局大小上,1个CPU和2个CPU的执行相同 时间

    因为您使用了4096作为本地大小。cpu的每个计算单元是一个核心。您将16x4096用作全局大小,因此它使用16个内核。可能您使用了一个内存受限的内核,或者一个内核访问另一个CPU的缓存或内存,所以它使用1个内核还是N个内核并不重要。当您增加全局大小时,可以更频繁地使用其他CPU内存,从而使内存访问模式更加对称

    为什么在更大的全球规模的2 CPU有更小的功耗

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

    为什么在这一点上,当我们有相等的 执行时间,使用2个CPU时,我的功耗略低 超过1个CPU

    使用8个内核(8*本地大小),单CPU必须已经在使用,即使没有,CPU和内存带宽都可能在使用相同的内存组。同样,2个CPU有更多的缓存,所以必须进行一些数据重用,以利用更大缓存的优势,从而降低功耗


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