X86平台:
Intel i5-8500@3.00GHz x 6 (6核处理器)
Ubuntu16.04 64bit操作系统 16G RAM
gcc 5.4.0
ARM平台:
瑞芯微RK3399Pro
双核cortex-a72&&四核cortex-a53
aarch64 4G RAM
gcc 8.3.1
代码如下(功能是对内存块进行初始化):
#include <iostream>
#include <sys/time.h>
int main()
{
int size = 8274240;
int* data = new int[size];
struct timeval start, end;
gettimeofday(&start, NULL);
#pragma omp parallel for num_threads(2)
for(int i=0; i<size; i+=4)
{
data[i] = 0;
data[i+1] = 0;
data[i+2] = 0;
data[i+3] = 0;
}
gettimeofday(&end, NULL);
std::cout << "[Time] memset use time: "<<float((end.tv_sec-start.tv_sec))*1000+float((end.tv_usec-start.tv_usec))/1000 << " ms" << std::endl;
return 0;
}
问题:
在X86平台,设置2个线程耗时几乎是单线程的一半 (设置更多的线程加速效果不再明显,甚至耗时更多)
但是在ARM平台,设置多线程始终比单线程要慢(设置线程越多越慢)。
刚学openMP和高性能计算,求解答。。。
另外是否可以用类似perf工具分析性能瓶颈?