omp计算时间(高精度)

来源:互联网 发布:3dcg制作软件 编辑:程序博客网 时间:2024/06/06 21:43
#include <bits/stdc++.h>#include <omp.h>using namespace std;const int MAX = 1e8;int *data, *temp, N;void merge(int l1, int r1, int r2) {    int top = l1, p = l1, q = r1;    while (p < r1 || q < r2) {        if (q >= r2 || (p < r1 && data[p] <= data[q])) {            temp[top++] = data[p++];        }        else {            temp[top++] = data[q++];        }    }    for (top = l1; top < r2; top++) {        data[top] = temp[top];    }}void merge_sort(int l, int r) {    int i, j;    for (i = 2; i < r; i *= 2) {        #pragma omp parallel for private(j) shared(r, i)        for (j = 0; j < r-i; j += i*2) {            merge(j, j+i, min(j+i*2, r));        }    }}int main(int argc, char *argv[0]) {    N = atoi(argv[1]);    data = (int*) malloc(sizeof(int)*N);    temp = (int*) malloc(sizeof(int)*N);    freopen("data.txt", "r", stdin);    for (int i = 0; i < N; i++)        scanf("%d", data+i);    double start = omp_get_wtime();//获得时间    int i;    #pragma omp parallel for private(i) shared(N, data)    for (i = 0; i < N/2; i++)        if (data[i*2] > data[i*2+1])            swap(data[i*2], data[i*2+1]);        merge_sort(0, N);    double end = omp_get_wtime();//获得时间    for (int i = 0; i < N; i++)        printf("%d ",data[i]);    printf("\n%f\n", end-start);//两次相减求时间差}