2016-06-21 10 views
-1

通常のCUDAプログラム:cudaDeviceSynchronizeはmemcopy時間を短縮できますか?

  1. は、など
  2. ...ホストから
  3. をホストするための装置
  4. コールカーネル
  5. メモリコピーデバイスにCUDAデバイスに
  6. メモリコピーをメモリ空間を割り当てます

ホストをデバイス時間に測定する場合

time = clock(); 
    2. mem host to device; 
    cudaDeviceSynchronize; 
    time = clock() - time ; 

私の場合は0.1sの値が得られます。私のPCIバス速度は実際には24GB/sであり、これは1000時間の時間価値がより小さくなると仮定しているので、私は、0.1秒がPCIバスを起動するのに使用されると仮定します。

私は1000時間でデバイス時間にホストをループしようとしましたが、初めて0.1秒を表示し、残りの時間はわずか0.000秒(ミリ秒を超えることはできません)で、合計1000ループの時間はちょうど0.12秒です。

私はデバイスのPCIバスをアクティブにしておき、ホストをデバイス時間に短縮する必要があります。以下に示すように、私はcudaDeviceSynchronizeを使用してみました:

cudaDeviceSynchronize; //---to keep PCI bus activate 
    time = clock(); 
    2. mem host to device; 
    cudaDeviceSynchronize; 
    time = clock() - time ; 

iは取得時間は、デバイスへのホスト上で費やされる時間が最小化される0.000sです。あれは正しいですか? 0.1秒= PCIバスを「起動」する時間ですか?

+2

0.1秒はおそらくCUDA初期化時間です。 –

答えて

1

Robert Crovellaは、CUDA関数の最初の呼び出しで測定している時間が、CUDAの初期化に関連していることを示しています。

さらに小さな期間を測定する場合は、おそらく関数呼び出しのオーバーヘッドを測定するだけです。より重要な番号を取得するには、コピーしているメモリのサイズを大きくする必要があります。

CPUとGPUの間のコピー時間を測定することに興味がある場合は、documentationで説明されているように固定されたメモリを使って再生してください。

関連する問題