5

我正在尝试使用 OpenMP 卸载到 AMD GPU,我在 OpenMP 4.5 规范中阅读了目标设备表示可以将代码和数据卸载到的设备,但我无法判断卸载是否成功,或者它是否成功确实已卸载到我的 AMD GPU。

为了测试卸载是否确实有效,我尝试计算有和没有编译指示的时间,并使用墙上时间检查差异,但两种情况下返回的时间都是 0:

这是用于测试的简单代码,我将尝试在我的项目中使用它:

int n = 10240; float a = 2.0f; float b = 3.0f;
float *x = (float*) malloc(n * sizeof(float));
float *y = (float*) malloc(n * sizeof(float));
double start = omp_get_wtime();
#pragma omp target data map(to:x)
{
#pragma omp target map(tofrom:y)
#pragma omp teams
#pragma omp distribute parallel for
for (int i = 0; i < n; ++i){
    y[i] = a*x[i] + y[i];
}
#pragma omp target map(tofrom:y)
for (int i = 0; i < n; ++i){
    y[i] = b*x[i] + y[i];
}

}
std::cout << "Time: " << (omp_get_wtime() - start) * 1000.0 << " ms" <<std::endl;
free(x); free(y); return 0;
}

注意:我在 Windows 中使用 gcc 5.1.0

任何帮助将非常感激。

4

0 回答 0