小さな行列とカーネルを使用して複数の畳み込みを実行する必要があり、GPU の多くのプロセッサを利用することで可能な限り高速に実行できるようになることを望んでいました。
問題は次のとおりです。多くの行列 (~1,000 から ~10,000) または比較的小さいサイズ (~15x15 から 1x1 - スカラーのように) と、特定の数の畳み込みマスク (~20 から 1) があります。各畳み込みマスクの例ですべての行列を畳み込む必要があります。
A; %5,000 matrices of size 10x10, A(i) = a 10x10 matrix
B; 10 matrices of size 5x5, B(k) = a 5x5 matrix
res(j)=conv(A,B(1)); %res(j) is the result of convolving all 5,000
%matrices in A by the j'th kernel B(j)
目標は res(1),...,res(10) をできるだけ早く計算することです
最も効率的なアルゴリズムを実装する方法についての提案を聞きたいです。FFT ベースの畳み込みはおそらく遅すぎるでしょう。
これまで見てきたすべての実装は、2 つの大きな行列を畳み込むことを意図した 2 次元畳み込み用でしたが、多くの小さな行列を畳み込む必要があります。
現在、CUDA プログラミングについてはほとんど知りませんが、学習中です。
私はこれを自分で理解したいと思っていましたが、時間の制約により、CUDA でコーディングする方法を学ぶ間、経験のある人にアドバイスを求めることを余儀なくされています。
ありがとうございました!
ps私の目的に合った実装へのポインタは大歓迎です。私は大学生で、これは小さな研究プロジェクトのためのものなので、お金を払う必要はありません...