与えられた 11 個の単語のタイル セットから形成される可能性のあるすべての単語の組み合わせを見つけたいと考えています。CUDAでそれを行うことは可能ですか? はいの場合、方法よりも。ありがとう!
2 に答える
はい、CUDA で順列を実行できます。実際、sr. Wong Shao Voon には、CUDA と OpenCL を使用した Permutations アルゴリズムの実装があります。
彼はあなたが望むように文字列を使用しませんでしたが、これは大きな問題ではありません。アルゴリズムが終了した後、彼が使用した記号 (文字) をあなたのもの (単語) に変換するメソッドを作成する必要があります。彼がすべての順列を文字の 2D 配列に保存したと想像して、すべての行列を歩き回って、実際の char を出力する代わりに、必要な単語 (例: if(matrix[i][j] == 'A') printf("Anaconda");
) を出力します。
基準
「CPU アプリケーションに対して CUDA をベンチマークしました。ベンチマークで使用された CPU と GPU は、それぞれ Intel i7 870 (8 コア)、2.93Ghz、および NVidia Geforce 460 です。CPU アプリケーションは、8 コアをフルに活用して順列を見つけます。 . CPU アプリケーションは階乗分解を使用して、異なる CPU コア間で n 番目の順列を分割し、各ワーカー スレッドでは、STL next_permutation を使用して、最初の n 番目の順列からすべての連続する順列を見つけます。11 要素の順列を計算した結果を以下に示します。見つかった 11 要素の順列の合計数は 39,916,800です。結果を格納するために必要な配列のサイズは、39,916,800 x 11 = 439,084,800 です。これは、私の 1GB メモリ GPU が格納できる順列の最大数です。"
折りたたむ | コピーコード CPU : 550ms
純粋な階乗分解を使用したバージョン 1 (平均タイミング) CUDA : 550ms OpenCL : 581ms
階乗分解ごとに 1 つの next_permutation を含むバージョン 2 (平均タイミング) CUDA : 317ms OpenCL : 373ms
階乗分解ごとに 9 つの next_permutation を備えたバージョン 3 (平均タイミング) CUDA : 681ms OpenCL : 456ms
https://github.com/kkilictepe/CudaCombinationをご覧ください 。numba を使用した python 実装ですが、役立ちます。