使用OpenMP进行GPU数组加法

3

我正在尝试使用nvidia GPU进行OpenMP卸载,并尝试在C++中进行一些数组计算。

目前我的输出结果不理想,因为我刚开始使用OpenMP进行卸载计算。如果有人能指导我正确的方向,我将不胜感激。

代码片段:

#include <omp.h>
#include <iostream>

using namespace std;

int main(){

        int totalSum, ompSum;
        const int N = 1000;
        int array[N];
        for (int i=0; i<N; i++){
                array[i]=i;
        }
        #pragma omp target
        {
                #pragma omp parallal private(ompSum) shared(totalSum)
                {
                        ompSum=0;
                        #pragma omp parallel for
                        for (int i=0; i<N; i++){
                                ompSum += array[i];
                        }

                        #pragma omp critical
                        totalSum += ompSum;

                }


                printf ( "Caculated sum should be %d but is %d\n", N*(N-1)/2, totalSum );
        }

        return 0;


}

目前,我知道总和应该计算为一个数字499500,但我的计算机输出的是非常大而且也是负数的数字。

1个回答

5
您在OpenMP构造函数中有一些拼写错误,具体如下:
  1. #pragma omp parallal -> #pragma omp parallel;
  2. #pragma omp parallel for -> #pragma omp for
对于第二点,您不需要使用parallel,因为您已经在并行区域内了。
请尝试以下操作:
using namespace std;

int main(){

        int totalSum = 0, ompSum = 0;
        const int N = 1000;
        int array[N];
        for (int i=0; i<N; i++){
                array[i]=i;
        }
        #pragma omp target
        {
                #pragma omp parallel private(ompSum) shared(totalSum)
                {
                        ompSum=0;
                        #pragma omp for
                        for (int i=0; i<N; i++){
                                ompSum += array[i];
                        }

                        #pragma omp critical
                        totalSum += ompSum;
                }


                printf ( "Caculated sum should be %d but is %d\n", N*(N-1)/2, totalSum );
        }

        return 0;
}

printf("希望你一切都好"); - undefined
@aran 我很好,谢谢 :) 工作很忙,你最近怎么样? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接