特定の計算を実行する 3 つの異なる推力ベースの実装があります。1 つ目は最も遅く、必要な GPU メモリが最も少なく、2 つ目は最も速く、ほとんどの GPU メモリを必要とし、3 つ目はその中間です。それらのそれぞれについて、使用される各デバイスベクトルのサイズとデータ型を知っているので、 vector.size()*sizeof(type) を使用して、ストレージに必要なメモリを概算します。
したがって、特定の入力に対して、そのサイズに基づいて、どの実装を使用するかを決定したいと思います。つまり、使用可能な GPU メモリに収まる最速の実装を決定します。
私が扱っている非常に長いベクトルの場合、計算している vector.data() のサイズはかなり適切な見積もりであり、残りのオーバーヘッド (ある場合) は無視できると思います。
しかし、推力アルゴリズムの実装に関連するメモリ使用量のオーバーヘッド (ある場合) をどのように見積もればよいでしょうか? 具体的には、transform、copy、reduce、reduce_by_key、gather の見積もりを探しています。静的であり、アルゴリズムの入力および出力パラメーターのサイズの関数ではないオーバーヘッドは、非常に重要でない限り、あまり気にしません。
GPU メモリの断片化などの意味は理解していますが、これはしばらく脇に置きましょう。
この度はご検討いただき誠にありがとうございました。