我正在尝试像bitwise那样测量原子操作的时间。
我遇到的问题是我不能只计算0&1
,因为IDE正在进行优化而忽略了这个命令,所以我不得不使用赋值
num = 0&1.
为了获得准确的操作时间没有作业我正在检查执行唯一作业所需的时间,我使用x=0;
做了
并在最后返回类似这样的内容
return assign_and_comp - assign_only;
问题在于我经常得到负面结果。
num=0&1
成本可能低于x=0
吗?
我不能使用任何时间测量功能,不幸的是gettimeofday()
我已经看过This soution,首先我被迫使用gettimeofday()
,但最重要的是我以相同的方式进行调整,确定操作前后的时间,然后返回差异。
但是,我试图将这个分配与操作分开,而这并不是他们在灵魂中所做的事情。
这是我的完整代码。
#include <iostream>
#include <sys/time.h>
#include "osm.h"
#define NUM_ITERATIONS 1000000
#define SECOND_TO_NANO 1000000000.0
#define MICRO_TO_NANO 1000.0
using namespace std;
//globals variabels
struct timeval tvalBefore, tvalAfter;
double assign_only = 0.0;
int main() {
osm_init();
cout << osm_operation_time(50000) << endl;
return 0;
}
int osm_init(){
int x=0;
gettimeofday(&tvalBefore,NULL);
for (int i=0; i<NUM_ITERATIONS; i++){
x = 0;
}
gettimeofday(&tvalAfter,NULL);
assign_only = ((tvalAfter.tv_sec-tvalBefore.tv_sec)*SECOND_TO_NANO+
(tvalAfter.tv_usec-tvalBefore.tv_usec)*MICRO_TO_NANO)/NUM_ITERATIONS;
return 0;
}
double osm_operation_time(unsigned int iterations){
volatile int num=0;
gettimeofday(&tvalBefore,NULL);
for (int i=0; i<iterations; i++){
num = 0&1;
}
gettimeofday(&tvalAfter,NULL);
double assign_and_comp = ((tvalAfter.tv_sec-tvalBefore.tv_sec)*SECOND_TO_NANO+
(tvalAfter.tv_usec-tvalBefore.tv_usec)*MICRO_TO_NANO)/iterations;
return assign_and_comp-assign_only;
}