1

CUDA で活用できるタスク並列処理には、いくつかの異なる形式があります。カーネルの実行と並行して、メモリのコピーを前後に実行できます。この場合、cudaHostAlloc を使用して固定メモリとしてホスト メモリを割り当てる必要があり、ストリームを使用して並列処理を実行できます。しかし、ストリームを使用していくつかのカーネルを互いに並行して実行することにのみ関心がある場合は、固定されたメモリを使用する必要がありますか、または通常の固定されていないメモリを使用できますか (つまり、malloc を使用します)?

ありがとうございました、

4

1 に答える 1

2

個別のストリームでカーネルを呼び出す限り、CUDA はそれらのカーネルを並行して実行しようとします。

カーネルは、デバイス メモリ アドレスがあるメモリのみを参照できます。ホスト メモリのデバイス メモリ アドレスを取得する唯一の方法は、マップされた固定メモリとして割り当てることです。これは、UVA が有効になっている場合に自動的に発生します。それ以外の場合は、cudaDeviceMapHost で cudaSetDeviceFlags() を呼び出し、cudaHostAllocMapped フラグで cudaHostAlloc() を呼び出す必要があります。

したがって、同時に実行されているカーネルが固定メモリを参照することが目標である場合、質問に対する答えは「はい、固定メモリを使用する必要があり、そのメモリをマップする必要があります」です。

于 2012-07-27T16:27:16.507 に答える