这是个好问题。我一直想知道衡量绩效的最佳方法是什么。我不认为你会找到一个简单的答案。我通常做的是使函数指针指向函数的不同变体,然后在多次迭代中为每个函数计时。我使用了来自 OpenMP 的函数(即使不使用任何线程)omp_get_wtime()
来进行计时。例如,假设我有一个函数的两个变体,foo_v1
并且,它采用一个包含多个元素foo_v2
的数组。我可以用来衡量这两个功能的性能的通用方法如下:a
n
#include <stdio.h>
#include <omp.h>
void foo_v1(float *a, const int n) {
//
}
void foo_v2(float *a, const int n) {
//
}
int main() {
const int n = 1000;
float *a = new float[n];
void (*fp[2])(float *a, const int n);
fp[0] = foo_v1;
fp[1] = foo_v2;
const int nrepeat = 1000; //some number large so that the functions take at least a second to finish
for(int j=0; j<2; j++) {
double dtime = omp_get_wtime();
for(int i=0; i<nrepeat; i++) {
fp[j](a, n);
}
dtime = omp_get_wtime() - dtime;
printf("time in seconds %f\n", dtime);
}
delete[] a;
}
您可以在此处查看我在赏金问题中使用 16 个函数变体执行此操作的示例。
加快浮动转换的速度?
我不确定这种比较性能的方法有多好,但这是我一直在使用的方法。