質問: ハードウェア処理とソフトウェア処理の違い asicなどのハードウェア処理とソフトウェア処理の違いって具体的に何なんでしょうか? ハードウェア処理の方が速度が速く、 ソフトウェア処理の方が柔軟性が高いと覚えているんですが、 友人に「なんでハードウェア処理は速度が速いの?」と質問され答えられませんでした・・・ どなたか具体的にわかるかた、いらっしゃいませんか?
回答: 友人の質問に対しては、 q.「なんでハードウェア処理は速度が速いの?」 a.「既に、行う処理が決まっていて単位時間に同時に必要になる機能が必要なだけ用意されているから」 といったところかと思います。 ソフト処理は、既に用意された汎用的なハードウェアを、順番よく、うまく組み合わせて使うことで目的の処理を果たします。 ハード処理は、目的の処理が先にありきで、その目的に必要なハードウェアをいくらでも用意できます。 簡単な例で、例えば(今ではありえないけど)加算器が一個しか用意されていないcpuがあったとしましょう。 百個の数値の足し算をしてくださいといわれたら、メモリからレジスタに値を読んでは、予め用意されていた汎用の加算器を通してa+bの処理をしてはアキュームレータに保存するような処理を百回繰り返して実現します。こんなことなら、加算器をもっと用意しておけば並列に何個か足せたのに~、と思う瞬間です。 しかし、金も電力もマスク費用もいくらかけても構わない!といわれれば、100個の数値を一発で格納するレジスタf/fと、100個の加算器を通した出力をアキュームレータf/fに流し込めば、タイミングがmetする限りは1クロックで済みます。そのかわり、それしか出来ません。 但し、ハードのほうが早いというのは必ずしも当てはまりません。逆に、上記のような簡単な処理くらいならpentium4ほどに膨大な電力や大きなチップ面積を食うようなハードは不要です。 1 bitの加算器しか用意しないで、100個 x (ビット幅)回の加算処理(1万クロック近くかかって)でようやく演算結果を出す代わりに、チップ面積を小さくしてお安く、省電力なハードウェアに致しました、という場合だってあります。 なお、このハードもそういう決まった処理を決まった時間でしかこなせません。 具体例は、以上のようなところですがいかがでしょ。 これがmpegデコーダになろうがdvdレコーダになろうがdspだろうがネットワークルータだろうが理屈は同じです。 柔軟性といえば、c言語からハードを作る事だってできますけど、速度は必要とされる機能を、どれだけ予め用意できるか≒金と電力どれだけだせますか、次第です。