私はCUDAが初めてで、多数の配列を処理しようとしています。各配列は約 1000 文字の配列 (文字列ではなく、単に文字として格納されます) であり、最大 100 万個まで存在する可能性があるため、約 1 GB のデータが転送されます。このデータはすでにすべてメモリにロードされており、各配列へのポインタがありますが、すべてのデータがメモリ内で連続しているとは思えないため、1 回の呼び出しですべてを転送することはできません。
私は現在、推力で最初に取り組み、このメッセージに基づいてソリューション を作成しました...すべてのメモリを割り当てる静的呼び出しで構造体を作成し、個々のコンストラクターがその配列をコピーしました。デバイス配列へのポインターを持つ構造体を取り込む変換呼び出し。
私の問題は、各配列が個別にコピーされるため、これが明らかに非常に遅いことです。このデータをより速く転送する方法を考えています。
この質問(質問はほとんど関係ありませんが、ユーザーは似たようなことをしようとしていると思います) で、talonmies は zip イテレーターを試して使用することを提案していますが、それが多数の配列の転送にどのように役立つかわかりません。
この質問を書いているときに cudaMemcpy2DToArray と cudaMemcpy2D についても知ったので、おそらくそれらが答えですが、どちらもポインターへのポインターを入力として受け取らないように見えるため、これらがどのように機能するかはすぐにはわかりません...
どんな提案も大歓迎です...