動画などでCUDAを使用する場合、毎フレームGPUのメモリを確保していては、 無駄な処理が増えてしまいます。 「メモリのアドレスを管理するための構造体」を定義することで、 1回だけメモリ領域を確保し、以降は同じメモリ領域を使いまわせるように出来ます。
CUDA入門 > サンプル入門 > 中級編 > 異なる関数で同じGPUメモリを使用
動画などでCUDAを使用する場合、毎フレームGPUのメモリを確保していては、 無駄な処理が増えてしまいます。 「メモリのアドレスを管理するための構造体」を定義することで、 1回だけメモリ領域を確保し、以降は同じメモリ領域を使いまわせるように出来ます。
上記のようにすることで、cudaInit関数でメモリ領域を確保し、 以降はCUDA_IMG構造体を引数に渡すことで、他の関数からも同じメモリを使用できるようになります。 ※main関数で使用する場合はあまり利点はありません・・・ ホスト側のメモリをcudaMallocHostで確保しているため、 通常のmallocなどで確保するよりも転送速度が速くなります。 使用するメモリのアドレスをcudaInitで作成したimgHostに割り当てれば、 それ以降の処理は転送速度が速い状態で使えます。 ちなみに、上記の構造体、関数を使用することで、 関数をライブラリ化してもCUDAを使用できます。 ライブラリ化の手順については、後日掲載します。