如何卸载到GPU与OpenACC在Windows?



我正在尝试在Windows中使用OpenACC。我正在使用GCC来编译。(附8.1.0版本)

我在网上找到了一个使用OpenACC的示例代码。

在命令提示符下,我输入了如下内容:

C:Userschang>g++ -fopenacc -o C:Userschangsource repository project18 project18 testing.exe C:Userschangsource repository project18 project18 Source1.cpp">

当代码运行时,如果我在任务管理器中查看性能,我看不到GPU使用的任何变化。

如果我跳过-fopenacc

C:Users change>g++ -o C:Userschangsource repository project18 project18 testing.exe C:Userschangsource repository project18 project18 Source1.cpp">

使用-fopenacc和不使用-fopenacc在速度上没有区别。

所以我想知道在我使用这个OpenACC之前是否有一个先决条件。

下面是我找到的示例代码。

提前感谢。

p。年代就我所记得的,我还没有下载openacc.h,并试图在网上找到它,但找不到它在哪里。这会是个问题吗?我想既然我可以运行exe文件,这似乎不是一个问题,但只是以防万一。

/*
*  Copyright 2012 NVIDIA Corporation
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/
#include <iostream>
#include <math.h> 
#include <string.h>
#include <openacc.h>
#include <chrono>
#define NN 4096
#define NM 4096
using namespace std;
using namespace chrono;
double A[NN][NM];
double Anew[NN][NM];
int main(int argc, char** argv)
{
const int n = NN;
const int m = NM;
const int iter_max = 1000;
const double tol = 1.0e-6;
double error = 1.0;
memset(A, 0, n * m * sizeof(double));
memset(Anew, 0, n * m * sizeof(double));
for (int j = 0; j < n; j++)
{
A[j][0] = 1.0;
Anew[j][0] = 1.0;
}
printf("Jacobi relaxation Calculation: %d x %d meshn", n, m);
system_clock::time_point start = system_clock::now();
int iter = 0;
#pragma acc data copy(A), create(Anew)
while (error > tol && iter < iter_max)
{
error = 0.0;
#pragma acc kernels
for (int j = 1; j < n - 1; j++)
{
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]);
error = fmax(error, fabs(Anew[j][i] - A[j][i]));
}
}
#pragma acc kernels
for (int j = 1; j < n - 1; j++)
{
for (int i = 1; i < m - 1; i++)
{
A[j][i] = Anew[j][i];
}
}
if (iter % 100 == 0) printf("%5d, %0.6fn", iter, error);
iter++;
}
system_clock::time_point end = system_clock::now();
std::chrono::duration<float> sec = end - start;
cout << sec.count() << endl;
}

目前,GCC不支持Windows上的GPU代码卸载。例如,请参阅https://stackoverflow.com/a/59376314/664214或http://mid.mail-archive.com/87d08zjlbd.fsf@euler.schwinge.homeip.net。这当然是可能实现的,但需要有人去做,或者支付工作。

最新更新