1
ホストとデバイスの両方からアクセス可能な構造体を割り当てる最も良い方法は何か疑問です。一例として、以下の構造体を取る:統合GPUにゼロコピー構造体を割り当てる
チャンクは、配列の簡単な構造体であるstruct Buff {
int * index;
Chunk * chunks;
}
:今、私は、最初の構造体のためのゼロコピーメモリを割り当てることによって、これを達成し、その後のため
struct Chunk {
int sas[CHUNK_SIZE];
int das[CHUNK_SIZE];
};
構造体のメンバーは、次のとおり、深いコピーはユニで自動的に処理されている方法のようなもの。このため、より効率的な方法がある場合は
Buff * my_buff;
// Allocate zero-copy memory for the struct (as the container)
checkCudaErrors(cudaHostAlloc(&my_buff, sizeof(Buff), cudaHostAllocMapped));
// Allocate zero-copy memory for index
checkCudaErrors(cudaHostAlloc(&my_buff->index, sizeof(int), cudaHostAllocMapped));
// Allocate zero-copy memory for the array of chunks
checkCudaErrors(cudaHostAlloc(&my_buff->chunks, sizeof(Chunk) * NUM_CHUNKS, cudaHostAllocMapped));
、私が知りたいのですがfiedメモリ。
私はあなたの方法が最善であると信じています。私はあなたがTegra TK1またはTX1で作業していると仮定しています。その場合、最高のパフォーマンスを得るために一般的にやりたいことは、メモリー間コピーをまったく*避けることです。ゼロコピーはそれを達成するはずです。 –
@RobertCrovellaありがとう!はい、実際には、私は両方で働いています。次の質問として、my_buff-> indexを読み書きするためには、グローバルメモリへのアクセスがいくつ必要ですか?私は1つだけ願っています。 – arima
'index'はポインタではありません。 'buff'が既にGPUにアクセス可能な場合、それはどのような目的に役立ちますか? – talonmies