- ベストアンサー
プログラミングにおける掛け算・割り算
現在、スーパーコンピュータを使っています。 プログラミングにおいて掛け算・割り算を極力少なくすることは高速化の常套手段ですが、パソコンではなくスーパーコンピュータの場合においても、掛け算・割り算を少なくするということは高速化に効いてくるのでしょうか? スーパーコンピュータだと高性能な乗算器・除算器を積んでいそうで、掛け算・割り算を少なくする恩恵をあまり受けられないような気がするのですが… よろしくお願いします m(_ _)m
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>スーパーコンピュータの場合においても、掛け算・割り算を少なくするということは高速化に効いてくるのでしょうか? 効きます。ただしどのくらい高速化されるかについてはプログラミング方法と処理によります。 また掛け算や割り算を少なくしようとするあまりに逆に効率が悪くなり遅くなることもあります。 例えば「2で割る」という操作は割り算ではなく1ビットシフト命令を使うのが普通です(そうするとCPUにもよりますが1命令あたり100倍くらい速くなることもあります。速くなる実時間は極々わずかですが)。 仮にスパコンに高性能の乗除算器が積まれていて、内部でシフト演算をしていたとしても、割ろうとしている値が2なのかどうかを条件分岐のクロック数(おそらく1~3クロック)分だけ高速化されます。 私も昔はZ80で消費クロック数を一生懸命計算してできるだけ乗除算ルーチンを使わずにクロック数を削ることをやってました。しかし最近のCPUはどれもこれも速いので組み込み系のCPU(一般的にパソコンよりも遥かに遅いCPU)を使うときでさえ、プログラミングの効率化(アセンブラよりもC++を使って再利用可能なコードにしたり)の方に重点を置き、乗除算にはそれほどこだわっていません(あくまでも私の場合はです)。 また何だかんだと言っても乗除算にこだわるよりも処理のアルゴリズムを効率化した方がはるかに高速化されることが多いです。パソコンの場合もスパコンの場合も(円周率を求めるような)数値演算処理以外は乗除算にはそれほどこだわらなくてもいいかと思います。
その他の回答 (1)
- betagamma
- ベストアンサー率34% (195/558)
そうかもしれませんね。 ただ、かけ算・割り算を極力少なくする、ということは、計算のアルゴリズム自体を改良する、ということですから、掛け算・割り算を極力少なくした結果計算量が少なくなるのであれば、計算量が少ない方が理論的に優秀と言うことになります。 あと、いくらスーパーコンピューターが優秀だとしても、そのスーパーコンピューターが積んでいる専門の演算装置を使用するような機械語命令を使わないと、大きな高速化はされないのではないでしょうか? それは、つまり、特に計算を速くしないといけないところは、そのスーパーコンピューター用に最適化された高級言語で書くか、または、これが一番確実ですがアセンブリ言語で書くか、というところでしょうか。
お礼
回答ありがとうございます。 アセンブリ言語の知識があまりないため、アルゴリズムの改良やチューニングで高速化を行いたいと思います。 しかし、アセンブリ言語というアイデアは今まで出てきませんでした。 今後、検討していきたいと思います。 m(_ _)m
お礼
回答ありがとうございます。 乗除算よりもやはりチューニングやアルゴリズムということですね。 今までは乗除算にこだわりすぎていたような気がしました。 分かりやすい説明、ありがとうございました。 m(_ _)m