私は、Cuda、OpenMP、およびLLVM/ClangをWin10で使用する単純なアプリケーションの動作を試みています。オンラインで見つかったさまざまなドキュメントやパワーポイントのプレゼンテーションから、この機能は何らかの形でサポートされていると思いますが、Win10でサポートされているかどうか、またメインリリースに含まれているかどうかはわかりません。私はLLVM 4.0.0rc1を使用しています。私はさまざまな方法で頭からうまく構築できなかった後にバイナリをダウンロードしました。LLVM/Clangを使用したWin10でOpenMPを使用したCuda
このcodeを次のように変更しました。私はまた、これの様々なOMPとCの変形を実験しました。それはうまくコンパイルされます。 verbose outputから見ると、ビルドは太ったバイナリを作成しているようです。興味深いことに、それは私が目標(または私が目標を与える場合)に与えるものや、具体的にomptargetsにあるものをあまり気にしていないようです。また、nvprofによって報告されるcuda関数も実行します。
私が実行すると、4つのプロセッサすべてがOpen Hardware Monitorに従って100%の使用率になりますが、プロファイリングコマンドのメモリ使用量はわずかですがGPUでは何も起こっていません。私は何かを逃しているのですか、これはうまくいかないでしょうか? nvprof上
cudaError_t f;
int t = 999;
cudaProfilerStart();
printf("Enter\n");
#pragma omp target data map(tofrom: x[0:n],y[0:n]) map(tofrom: t,f)
{
f = cudaGetDevice(&t);
#pragma omp target teams num_teams(10) thread_limit(192)
#pragma omp parallel for
for (int i = 0; i < n; i++) {
for(int j = 0; j < 10000; j++) {
y[i] += a * x[i];
y[i] *= 2;
y[i] -= x[i]/4;
y[i] *= .99;
}
}
}
cudaProfilerStop();
出力:
==1844== NVPROF is profiling process 1844, command: example.exe 1000000
Enter
min = inf, max = inf, avg = 0.000000 0 0
==1844== Profiling application: example.exe 1000000
==1844== Profiling result:
No kernels were profiled.
==1844== API calls:
Time(%) Time Calls Avg Min Max Name
98.86% 135.83ms 1 135.83ms 135.83ms 135.83ms cudaProfilerStart
0.60% 819.35us 91 9.0030us 0ns 398.73us cuDeviceGetAttribute
0.53% 726.09us 1 726.09us 726.09us 726.09us cuDeviceGetName
0.00% 5.2860us 1 5.2860us 5.2860us 5.2860us cuDeviceTotalMem
0.00% 4.5310us 1 4.5310us 4.5310us 4.5310us cudaGetDevice
0.00% 2.6430us 3 881ns 0ns 2.2650us cuDeviceGetCount
0.00% 1.5090us 3 503ns 377ns 755ns cuDeviceGet