0
OpenACCによって加速されるタスクがあります。私は、カーネル計算の中で動的なメモリ割り当てを行う必要があります。私は次のように簡単なデモを作成しました。このデモでopenaccカーネル内で実行中にデータを作成する
#include <iostream>
using namespace std;
#pragma acc routine seq
int *routine(int init) {
int *ptr;
#pragma acc data create(ptr[:10])
for (int i = 0; i < 10; ++i) {
ptr[i] = init + i;
}
return ptr;
}
void print_array(int *arr) {
for (int i = 0; i < 10; ++i) {
cout << arr[i] << " ";
}
cout << endl;
}
int main(void) {
int *arrs[5];
#pragma acc kernels
for (int i = 0; i < 5; ++i) {
arrs[i] = routine(i);
}
for (int i = 0; i < 5; ++i) {
print_array(arrs[i]);
}
return 0;
}
、私はカーネル構造体の内部で実行中のルーチンを呼び出すようにしようとしています。通常の手順では、GPU内にいくつかのデータを作成し、その中にいくつかの値を入れる必要があります。
私はコードをコンパイルできますが、実行時の問題は次のように報告します。
[email protected]:create_and_copyout$ pgc++ -o test main.cc -acc -Minfo=accel
routine(int):
6, Generating acc routine seq
main:
23, Generating implicit copyout(arrs[:])
26, Accelerator restriction: size of the GPU copy of arrs is unknown
Loop is parallelizable
Generating implicit copy(arrs[:][:])
Accelerator kernel generated
Generating Tesla code
26, #pragma acc loop gang, vector(32) /* blockIdx.x threadIdx.x */
[email protected]:create_and_copyout$ ./test
call to cuStreamSynchronize returned error 715: Illegal instruction
私はこの作業(カーネル構成の処理内で動的にメモリを割り当てる)を行うために何をすべきかと思います。もしあなたが助けてくれれば本当に感謝します。
ありがとうございます。しかし、パフォーマンスは非常に重要です。私はいくつかの結果をあきらめて、最良のものだけを残すことを考えています。 –