我一直在使用 odroid-xu3 进行小型实验perf stat
,cpufreq-set
它是一个带有 Exynos 芯片(A7 和 A15 ARM 内核的异构处理器)的嵌入式设备。我使用 BLAS lvl3 基准来运行我的实验,并且我一直在使用该taskset
实用程序将任务固定到 A15 核心。我还仔细检查了它是一个单线程实现。
希望在高频或低频运行时周期数应该相同,但我可以看到一个小的变化,例如分别在 400MHz、1000MHz 和 1600MHz 运行 GEMM 内核(矩阵乘法,100 次运行)我得到以下结果:
7166620830 cycles
17.923790714 seconds time elapsed
7235173436 cycles
7.237463382 seconds time elapsed
7428037080 cycles
4.643897351 seconds time elapsed
您可以看到,即使持续时间与频率也不是真正的线性关系(至少与测量的周期数一致......)。一个假设是该任务有点内存限制,但我在单精度实现中得到了类似的结果......你知道这可能是什么原因吗?
编辑:矩阵有 400 个样本,我使用环境变量 OPENBLAS_LOOP(openblas 基准测试)运行 100 次。我尽量避免运行其他应用程序,我无法判断负载为 0%,但已经接近。你建议我停止一些特别的事情吗?由于它已经是超过 100 次实验的平均值,因此相同频率的变化非常低(<0.1%),当我改变频率时大约有 4% 的差异,而且最高频率的周期数总是更大,所以确实如此看起来不像它更“嘈杂”,它看起来像是在高频发生了其他事情。