2017-01-22 9 views
2

MatlabプログラムをGPUで高速化しようとしていますが、関数knnsearchがGPUをサポートしていないので、私は自分のブルートフォース関数を書くことにしました。Kが非常に小さいベクトルでKの最小要素を見つける

(もちろん、CUDAカーネルの作成や既存のライブラリの使用といった他のオプションもありますが、それらを設定するにはしばらく時間がかかりますし、Windows 10でもmexファイルを扱うための設定は苦痛です、エラーがポップアップし続ける....ので、私は今、ブルートフォース方式に固執する)。

ブルートフォース検索であっても、私はいくつかの大きな改善が見られました(コードは2倍速く実行されます)。 ここに私の関数とプロファイリングの結果があります(これは本当に短いです)。enter image description here この関数は単一のクエリポイントを取り、リファレンスポイントの中でK最近傍点を見つけます(すべてのポイントはgpuArrayに格納されます)。最初は、距離の計算に最も時間がかかると思っていましたが、プロファイラの結果で分かるように、ソート部分は最も時間がかかりました。

配列内の最小のK要素を見つける部分を最適化することでコードを改善したいと思います。 Kは非常に小さく(K < = 50)、データポイントの数は非常に多い(> = 10000)ことに注意してください。私はこの特定のタスクに合ったアルゴリズムがあることを理解していますが(ヒープソートですが、ヒープ・ビルディング・パーツが必要です)、GPUを使用して実装する方法や遅くならない方法はわかりません。誰でも助けてくれますか?ありがとうございました:)

+0

参照ポイントの数はいくつですか?寸法dの大きさは? – rahnema1

+0

@ rahnema1基準点の数> = 10000、寸法のサイズd> = 100 –

答えて

0

knnsearchは、MATLAB R2016bのGPUでサポートされています。

+0

文書へのリンクを提供できますか?私はgoogleにしようとしましたが、その結果はありませんでした:( –

+0

@DangManhTruong https://www.mathworks.com/help/stats/release-notes.htmlを参照してください。GPUサポート:pdist、pdist2、knnsearch accept gpuArray "under R2016b。 – beaker

+0

@beaker:このバージョンをインストールしてスピードアップを提供できるかどうかを確認してください –

関連する問題