【发布时间】:2020-11-28 14:27:42
【问题描述】:
当我在使用 GCC 编译期间启用 OpenACC 时,我的代码变慢是有原因的吗?我目前在 Windows 10 上使用 GCC 6.3.0。我真的不确定为什么会发生这种情况。
这是我正在编译的命令:g++ -fopenacc -o a Example.cpp
这是我的 C++ 代码:
#include <stdlib.h>
#include <cassert>
#include <chrono>
double *A, *B, *C;
int main(int argc, char* argv[]) {
long long N = 100;
A = new double[N * N];
B = new double[N * N];
C = new double[N * N];
srand(42);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
A[i * N + j] = rand();
B[i * N + j] = rand();
}
}
for (int x = 0; x < 10; x++) {
auto start_time = std::chrono::high_resolution_clock::now();
#pragma acc kernels
{
#pragma acc loop independent
for (int i = 0; i < N; i++) {
#pragma acc loop independent
for (int j = 0; j < N; j++) {
double total = 0;
#pragma acc loop independent reduction (+: total)
for (int k = 0; k < N; k++) {
total += A[i * N + j] * B[k * N + j];
}
C[i * N + j] = total;
}
}
}
auto end_time = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> duration = end_time - start_time;
printf("%f seconds\n", duration.count());
}
return 0;
}
【问题讨论】:
-
似乎是并行化的开销。
标签: c++ gcc parallel-processing matrix-multiplication openacc