【发布时间】:2019-07-25 16:31:21
【问题描述】:
我正在尝试使用 openMP 制作一个简单的 GPU 卸载程序。但是,当我尝试卸载时,它仍然在默认设备上运行,即我的 CPU。
我安装了一个编译器,g++ 7.2.0,它支持 CUDA(在我使用的集群上)。当我运行下面的代码时,它显示它可以看到 8 个 GPU,但是当我尝试卸载时它说它仍在 CPU 上。
#include <omp.h>
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#define n 10000
#define m 10000
using namespace std;
int main()
{
double tol = 1E-10;
double err = 1;
size_t iter_max = 10;
size_t iter = 0;
bool notGPU[1] = {true};
double Anew[n][m];
double A[n][m];
int target[1];
target[0] = omp_get_initial_device();
cout << "Total Devices: " << omp_get_num_devices() << endl;
cout << "Target: " << target[0] << endl;
for (int iter = 0; iter < iter_max; iter++){
#pragma omp target
{
err = 0.0;
#pragma omp parallel for reduction(max:err)
for (int j = 1; j < n-1; ++j){
target[0] = omp_is_initial_device();
for (int i = 1; i < m-1; i++){
Anew[j][i] = 0.25 * (A[j][i+1] + A[j][i-1] + A[j-1][i] + A[j+1][i]);
err = fmax(err, fabs(Anew[j][i] - A[j][i]));
}
}
}
}
if (target[0]){
cout << "not on GPU" << endl;
} else{
cout << "On GPU" << endl;}
return 0;
}
当我运行它时,我总是发现它不在 GPU 上,而是有 8 个设备可用。
【问题讨论】: