0

KNN の Verilog 実装を計画しています。しかし問題は、KNN に関連するユークリッド距離測定用語です。減算、二乗、加算が必要だからです。ユークリッド距離でknnをコーディングすると、コードが複雑になると思います.コードの複雑さ、したがって合成回路の複雑さが軽減されるように、距離を見つけるための簡単な方法(ハードウェアに優しい)はありますか. 私の考えは、コードブックをメモリに保存することです。入力を与えると、k 最近隣インデックスが出力として生成されます。

4

1 に答える 1

1

k-Nearest Neighbors の検索には、2 つの部分が含まれます。1) 入力ベクトルとすべての参照ベクトルの間の距離を計算し、2) k 個の最小距離を検索します。

パート 1) では、減算器、乗算器、アキュムレータで構成されるパイプライン化されたユークリッド距離関数を設計できます。減算と累積 (加算) には、乗算に比べて比較的短いクロック周期が必要です。ビット幅によっては、それらもパイプライン処理する価値がある場合があります。1 サイクルの乗算器は非常に高いクロック周期を必要とするため、パイプライン化する必要があります。

ここでは、整数を扱っていると仮定しています。浮動小数点で作業する必要がある場合、浮動小数点の乗算と加算は分岐分岐のためにパイプライン化できないため、運が悪いです。

パート 2) では、すべての距離を比較して最小の k を見つける必要があります。これにはいくつかの方法があります。考えられる 1 つの方法は、単一の最小距離を見つけるコンパレーターのツリーを使用することです。それが見つかったら、一連の距離からその距離を削除し、k 回繰り返すことができます。

パート 1 では、基本的に CPU/GPU の機能ユニットを実装していることに注意してください。これはほぼ確実に、Verilog の実装よりも高速になります。CPU/GPU を超える最大の改善点は、パート 2) k の最小距離を見つけることです。

于 2017-03-15T17:07:40.720 に答える