2

私は__CUDA_ARCH__を使用しようとしましたが、これはコードのデバイス部分でしか動作しないと読んでいます。 その後、私はgithubのこのコードに遭遇しました:linkコードのホスト部分からGPUの現在の計算機能を取得するにはどうすればよいですか?

これを実現する方法はありますか?

GPUがcudaMallocManagedが行わでしょうかcudaMallocs & & cudaMemcpysが代わりに場所を取ることになる場合にはユニファイドメモリをサポートしている場合、私は(ホストコードに)を決定したいと思いますので、私はこれを求めています。

私がやりたいものの例:

int main() { 
    // IF CUDA >= 6.0 && COMPUTE CAPABILITY >= 3.0 
     // USE cudaMallocManaged 
    // ELSE 
     // USE cudaMallocs && cudaMemcpys 
    // END IF 
    return 0; 
} 
+1

私は、計算機能を取得するためのSDKのコード例があると思います。 –

+0

@PaulRなので、 '__host__ cudaError_t cudaGetDeviceProperties(cudaDeviceProp * prop、int device)'を使用し、 'managedMemSupported'変数から値を読み取るようにしてください。 'cudaMallocManaged'の定義さえない古いCUDA APIと全く同じコードをコンパイルしたいのですが? – xorz57

+0

私には分かりません - CUDAで作業して以来、長い時間がかかりました。SDKにはコンピューティング機能を報告したコードサンプルがあることを思い出しました。 –

答えて

3

ここに関与する2つの質問があるように思える:私は(コンパイル時に)照会することができますどのように

  1. CUDAランタイムAPIバージョン特定のコードがコンパイルされているため、新しいランタイムAPIバージョンにのみ登場した特定のランタイムAPI要素(管理対象メモリに関連付けられているものなど)を使用するのが安全かどうかを判断できます。

    すでに1つの方法については、hereで説明しています。私は、実行時に管理するメモリを使用できるかどうかはどのように決定することができ

    #include <cuda_runtime_api.h> 
    ... 
    // test for CUDA version of 6.0 or higher 
    #if CUDART_VERSION >= 6000 
    // safe to use e.g. cudaMallocManaged() here 
    #else 
    // e.g. do not use managed memory API here 
    #endif 
    
  2. :この特定のケースのため要約版として、あなたのような何かをするだろうか?

    コメントで既に述べたように、コンパイルされているCUDAバージョンがCUDA 6.0以上であることを確認した場合(例:上記参照)、管理対象メモリのサポートをテストしてから、例えばcudaMallocManagedを使用してください。 deviceQueryCUDA sample codeは、実行時に機能をテストするための一般的な方法論(例えば、cudaGetDevicePropertiesを使用し、managedMemSupportedのプロパティをテストすること)を示します。

+0

ありがとう!非常に正確な答え! – xorz57

関連する問題