2017-02-09 15 views
1

私は、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 

答えて

2

私はIBMのエンジニアとの電子メールを交換しました。 fork of LLVM/Clangのアップストリームはまだ進行中です。また、x86にも対応していますが、Windows上で動作するかどうかは不明です。

parallel-computing.proへの私のリンクには、OpenMPとCudaをサポートする古いフォークがあります。私は、もしあれば、これらのプロジェクト間の関係が何であるか分かりません。より最近のpresentationを見ると、より新しいフォークがOpenMP 4.0をサポートしており、IBMはPower8 CPUのサポートに貢献していることは明らかです。これは、Windowsの不確実なサポートについて部分的に説明しています。私はgithubのコードを検索し、Win32の広告Win64マクロが定義されていることに気付きました。