ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

DSP(Digital Signal Processor)コミュの☆質問板2☆

  • mixiチェック
  • このエントリーをはてなブックマークに追加
質問板2です。質問板はながくなったので、こちらにお願いします。

コメント(13)

なんか発言数が少なくてこのコミュも終了に向かってるっぽいですね。
残念です・・・。

1.
組み込み用途に使えるレベルのC言語が出来れば十分だと思います。
性能を使い切ろうと思えば、SIMDやソフトウェアパイプラインに関する知識は必要かも。

2.
DMAを多用するので、キャッシュの制御については忘れがちなので気をつけた方がいいです。

3.
画像処理用途ならrestrictポインタは押さえたほうがいいかも、
使い方には気をつけないといけませんがこれを付けるだけでかなり高速化できる場合がありますよ。
SIMDは複数の命令を同時に実行する仕組みです。
例えば、「a=a1+a2, b=b1+b2, c=c1+c2, d=d1+d2」といった4回の足し算を1つの命令で実行できるので4回個別に足し算を実行するよりも高速に処理できます。
コンパイラで積極的にSIMDを使うようにコンパイルしてくれればいいのですが、現在はそうなってないみたいです。
なので、TIのDSP用のライブラリには組み込み関数としてSIMD命令が直接使えるようにしてあります。

キャッシュ制御はおっしゃる通りの処理ですよ。
パージ(無効化)とライトバックの2つの処理があります。
DMAで入力されたデータを使う時にパージを忘れるとキャッシュ上にある古いデータで処理してしまうし、
処理結果を出力する前にライトバックを忘れると、主記憶にある古い結果を出力してしまいますよね。

開発環境はまだ無いとのことですが、アセンブラとかも理解すれば
ハードをかなり理解できると思います。コア処理もライブラリ
に頼らず自分でかけばかなり高速化できますよ。
コンパイラのマニュアルやハードウェアのマニュアル
をよく読んだほうがいいですよ。
日本語マニュアルはあるんですか?
浮動小数点演算や固定小数点演算を使い分けるとか
浮動小数点演算に限ったことではないですが
ループ内の演算をアセンブラで書くことに
よって最適化(余計なものをループのそとに
出したりとか・・・)させるとかですかね。
頭の体操が必要になりますけど、結構楽しいですよ。
C64+コアでしか使ったこと無いですが、固定小数点のライブラリならIQmathというライブラリが無償で提供されていますよ。

浮動小数点演算はやっぱり遅いので滅多に使用しないですね〜。
関数のI/Fは浮動小数点にして、内部は固定小数点演算にするような感じでしょうか。。。

アセンブラに関しても、intrinsics関数というアセンブラの命令に対応した組み込み関数が用意されているのでそっちで慣れてからの方がやりやすいかも。
アセンブラを勉強していただくより、アーキテクチャをよく理解した方がよいと思いますよ。コンパイラの性能も良いですし、Intrinsics関数でプログラムした方が効率がよいと思います。

ライブラリは特化している部分もあるので、やりたいことと合っていれば自分でプログラムするよりかはよいパフォーマンスが得られると思います。

一部ソースがあるものもあるので、参考にしてみては?

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

DSP(Digital Signal Processor) 更新情報

DSP(Digital Signal Processor)のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。