6

ピン留めされたメモリの作成について質問があります。

現在、CUDAを使用して大量のデータを処理しています。

実行時間を短縮するには、メモリコピーとカーネル起動をオーバーラップさせる必要があることがわかりました。

いくつかのテキストと Web ページを検索した後、メモリ コピーとカーネル起動が重複するため、ホスト メモリを固定メモリに割り当てる cudaMallocHost を使用してホスト メモリを割り当てる必要があることに気付きました。
ホストで整数型や配列型を使う場合、固定メモリを作るのは簡単でした。

ちょうどこのような...

cudaStream_t* streams = (cudaStream_t*)malloc(MAX_num_stream * sizeof(cudaStream_t));
for(i=0; i<MAX_num_stream; i++)
    cudaStreamCreate(&(streams[i]));

cudaMallocHost(&departure, its_size);

for(n=1; ... ; n++){
   cudaMemcpyAsync( ... streams[n]);
   kernel <<< ... , ... , ... , streams[n] >>> (...);
}

しかし、私の場合、私のホストの出発メモリはバーターの種類によって設定されています。

また、cudaMallocHost を使用して vector-type-host-memory を固定メモリに変換する方法がどこにも見つかりません。

この問題を解決するために私を助けたり、アドバイスをしたりしてください。私の拙い英語を読んでくれてありがとう。ありがとう。

4

1 に答える 1

6

直接、を使用して他のPODタイプにメモリを割り当てることはできませんcudaMallocHost

固定メモリを使用する が本当に必要な場合は、内部で呼び出すstd::vector独自のモデルを実装し、そのカスタム アロケータを使用してインスタンス化する必要があります。std::allocatorcudaMallocHoststd::vector

あるいは、スラスト テンプレート ライブラリ(CUDA ツールキットの最近のリリースに同梱されています) には、スラスト独自のベクトル クラスで使用できる実験的な固定メモリ アロケータが含まれています。これは、それ自体が のモデルですstd::vector

于 2012-09-17T08:01:18.130 に答える