OpenMP在C中的基准

时间:2013-11-17 01:28:29

标签: c openmp benchmarking

我正在寻找C中OpenMP的基准测试。只是一个简单(无用)的任务,表明这种技术确实有效。
类似的东西:

#include <omp.h>
#include <stdio.h>
#include <sys/time.h>
#define NULL 0
int main ()
{
    int i, j;

    long long int to_usec(struct timeval t)
    {
        return t.tv_sec*1000000LL + t.tv_usec;
    }
    struct timeval s_time, e_time;
    gettimeofday(&s_time, NULL);

    // long lasting code...
    #pragma omp parallel for
    for(i=0; i<100000; i++)
    {
        // ...
    }

    gettimeofday(&e_time, NULL);
    printf("total time [ms]: %lld\n", (to_usec(e_time) - to_usec(s_time)) / (1000));
}

有人有想法吗?

2 个答案:

答案 0 :(得分:0)

作为一个简单的基准测试,可以在阵列上使用数据并行操作。例如:

double a[N], b[N], c[N];

/* initialize arrays A and B with some data. */
init (a, b);

#pragma omp for
for (i = 0; i < N; i++)
    c[i] = a[i] * b[i] + 1;

通过调整N和内部操作的复杂性,您将能够非常快速地看到效果。 (您可能需要在堆上而不是在堆栈上分配数组)

答案 1 :(得分:0)

对于基准测试,OpenMP ARB站点提供links to some。 EPCC OpenMP微基准测试特别令人感兴趣,因为它们测量每个构造的实现开销。也可以使用支持OpenMP的STREAM benchmark来查看内存带宽如何随线程数量而变化。 STREAM是一个特别简单的基准 - 只是一堆循环而且很容易理解。