我有一些在Visual Studio(MSVC编译器)上运行的代码,每个消息的平均速度为127个CPU周期。我把它移植到Linux(Mint 16),Netbeans 7.4和GCC 4.8。该代码符合C ++标准。
我必须做的唯一更改是使用内联GCC版本替换__rdtsc()
。要运行代码,我将Netbeans更改为Release模式,进入属性并更改设置,以便这是一个“性能发布”。然后我点击绿色箭头,程序每个消息平均占用229个CPU周期 - 几乎是MSVC时间的两倍。
我是否正确运行Netbeans发布模式?我知道在Visual Studio上你必须按ctrl + f5才能获得正确的性能释放。我不确定是否有使用Netbeans的同等错误?我希望Linux上的代码更快!
除了原始数组之外,代码不使用任何容器。
定时:
我使用的Windows:
unsigned long long start = __rdtsc();
//Code
unsigned long long finish = __rdtsc();
Linux,除了我使用以外,与上面相同:
#if defined(__i386__)
static __inline__ unsigned long long rdtsc(void)
{
unsigned long long int x;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
return x;
}
#elif defined(__x86_64__)
static __inline__ unsigned long long rdtsc(void)
{
unsigned hi, lo;
__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );
}
#endif