答えて

6

すべての種類の計算にDSPを使用できます。 DSPアプリケーション用に最適化された汎用CPUです。だから、たとえ浮動小数点のものであっても、パフォーマンスは上がらないものの、動作します。

大規模なデータ配列に対して整数演算を行うと、DSPが本当に輝きます。ここで、DSPは高速に計算することが容易であり、メモリとの間でデータを転送する時間がボトルネックになります。

あなたに何ができるかの図を与える:私はカメラ(ベイヤーデインターリーブを行うこと)から、その後処理データを実行するアルゴリズムを持っています。私は8ビットの入力イメージと24ビットの出力イメージを持っています。 〜350Mhzで実行されるビーグルボードDSP上のパフォーマンスは、1秒あたり144百万画素です。これは、処理されたデータのおよそ半分ギガバイトに相当します。

DSPを起動して実行し、hello worldプログラムをコンパイルするのは簡単ではありません。 DSPカーネルドライバを統合する必要があります(私はDSPLINKを使用します)。あなたは、(巨大な)DSP/ARM interopライブラリの使い方、簡単なhelloの世界のためだけにツールチェーンを使う方法を学ばなければなりません。少なくとも2週間は計画する。

これは実際の作業は、内部memorys、DMA、割り込み、そのようなすべてのものを管理する方法を、DSPのための高速なコードを書く方法を学ぶことから始まり働くたら。最後に

あなたは正しい仕事を割り当てた場合、容易のCortex-A8をアウトパフォームすることができます信じられないほど高速なDSPのロックを解除するためには、それだけの価値があります。さらに、画像コプロセッサーにアクセスすることで、計算量をさらに減らすことができます。そして、完全なARM9 CPUがタイトにDSPに接続され、そこにはアイドル状態にあり、使用されるのを待っています。

+0

DSP kernalドライバをどのように統合できますか?手順を説明してください。 –

+0

あなたが何をしているのか分かっている場合、すべての統合作業を行うのに半年かかります。これらのステップをすべて1つまたは2つの説明で簡単に説明することはできません。 –

1

ビーグルボードのような異種プラットフォームでのプログラミングモデルは、DSPにGPP(ARM)からアプリケーションの計算部分をオフロードすることは通常です。 c64xにはdspカーネルドライバとコンパイラが必要です。詳細についてはDSP BIOSプログラミングガイドを見て: http://omappedia.org/wiki/DSPBridge_Project

あなたはすでにそれを考慮されていない場合、私は皮質A8のNEONあなたの画像処理アルゴリズムのために試してみるお勧めしますし、あなたが得るパフォーマンスの向上の種類を見るでしょう。これはDSPドライバ/コンパイラを必要とせずにC言語でプログラムするのはかなり簡単です。

3

はい、できますが、それは、this OpenCV port projectの一部でない場合は、自分でアルゴリズムを実装する必要があります。

BeagleBoardのDSPは、画像サイズが大きすぎないほど強力です(320x240、おそらく640x480)が、最適なスループットが必要な場合は、実装で固定小数点演算などを処理する必要があります。

EDIT:なぜ固定点

TI C6xxx DSPの2種類があります:小さい数値(C64xx)より高い数字(C67xx)がいずれかを有するが、ハードウェア浮動小数点ユニットを有していません。 これはIntelのようなデスクトップCPUとは異なります。

のBeagleBoard-XMには浮動小数点ユニットを有していないC64xxを埋め込みます。 したがって、浮動小数点で動作する数学関数を呼び出すたびに、浮動小数点計算はデバイスによってエミュレートされますが、これは遅いです。 整数型のネイティブ演算を呼び出すため、固定小数点演算でこれらの演算を実装すると最大スループットが得られます。

+0

固定小数点演算は、最適なスループットを持っている理由は? –

0

ARMデバイスには当てはまりませんが、 "DSP"と "OpenCV"を検索した後、x86ベースのサーバで高性能を得るには、TI c66x CPUシリーズが適しています。浮動小数点命令。 OpenCVのはc66xアクセラレータカードに移植され、問題なく実行されました:

http://processors.wiki.ti.com/index.php/C66x_opencv

関連する問題