アプリケーションは2つのソートされた整数リスト(交差点を設定)、たとえばlist1とlist2を交差させることです。CUDAを使用したバイナリ検索の分岐の分岐を減らす方法
list1の各要素にはGPUスレッドが割り当てられ、リスト2に表示されているかどうかを確認するためにバイナリ検索が行われます。このアプリケーションでは、スレッドの発散が膨大になることは容易にわかります。私はスレッドの発散を減らすための良いアプローチがあるのだろうかと思います。私はこのアプリケーションを実装するためにCUDAを使用しています。
私はP-ary検索と呼ばれるアプローチがあることを知っていますが、私の仕事はバイナリ検索のスレッドの相違を減らすことです。また推力と呼ばれる図書館があることは知っていますが、発散を減らそうとする試みはないようです。
はどのくらいの大きさのセットです範囲メモリからアクセスすることにより、例外を発生させることができ整数?発散では、長さ 'n'の2つのリストをマージすると' O(n) 'の比較が行われます。それぞれの相違は相違します。私はあなたが多くの相違を持っていることを受け入れなければならないと思って、それらを短くしてください。 (より大きな問題は、メモリのブロックを並列にロードすることです) – btilly
私は同意します - メモリアクセスは発散の大きな問題です。バイナリサーチのステップと終了という2つの発散源があります。それらのスレッドはとにかく実行されるので、終了についてはあまり気にしません。ループのバイナリステップはif/elseだけをインデックスとして更新します。それよりはるかに悪いのは、あなたが2番目のリストのどこからでも読んでいるという事実です。私は最初に両方のリストをソートすると少し助けるかもしれないと思います。 –
duh。ソートlist1。 –