痔になりやすい生活習慣とは?

現在、スーパーコンピュータを使っています。
プログラミングにおいて掛け算・割り算を極力少なくすることは高速化の常套手段ですが、パソコンではなくスーパーコンピュータの場合においても、掛け算・割り算を少なくするということは高速化に効いてくるのでしょうか?
スーパーコンピュータだと高性能な乗算器・除算器を積んでいそうで、掛け算・割り算を少なくする恩恵をあまり受けられないような気がするのですが…

よろしくお願いします m(_ _)m

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>スーパーコンピュータの場合においても、掛け算・割り算を少なくするということは高速化に効いてくるのでしょうか?



効きます。ただしどのくらい高速化されるかについてはプログラミング方法と処理によります。
また掛け算や割り算を少なくしようとするあまりに逆に効率が悪くなり遅くなることもあります。

例えば「2で割る」という操作は割り算ではなく1ビットシフト命令を使うのが普通です(そうするとCPUにもよりますが1命令あたり100倍くらい速くなることもあります。速くなる実時間は極々わずかですが)。
仮にスパコンに高性能の乗除算器が積まれていて、内部でシフト演算をしていたとしても、割ろうとしている値が2なのかどうかを条件分岐のクロック数(おそらく1~3クロック)分だけ高速化されます。

私も昔はZ80で消費クロック数を一生懸命計算してできるだけ乗除算ルーチンを使わずにクロック数を削ることをやってました。しかし最近のCPUはどれもこれも速いので組み込み系のCPU(一般的にパソコンよりも遥かに遅いCPU)を使うときでさえ、プログラミングの効率化(アセンブラよりもC++を使って再利用可能なコードにしたり)の方に重点を置き、乗除算にはそれほどこだわっていません(あくまでも私の場合はです)。

また何だかんだと言っても乗除算にこだわるよりも処理のアルゴリズムを効率化した方がはるかに高速化されることが多いです。パソコンの場合もスパコンの場合も(円周率を求めるような)数値演算処理以外は乗除算にはそれほどこだわらなくてもいいかと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
乗除算よりもやはりチューニングやアルゴリズムということですね。
今までは乗除算にこだわりすぎていたような気がしました。
分かりやすい説明、ありがとうございました。
m(_ _)m

お礼日時:2005/01/27 01:15

そうかもしれませんね。


ただ、かけ算・割り算を極力少なくする、ということは、計算のアルゴリズム自体を改良する、ということですから、掛け算・割り算を極力少なくした結果計算量が少なくなるのであれば、計算量が少ない方が理論的に優秀と言うことになります。

あと、いくらスーパーコンピューターが優秀だとしても、そのスーパーコンピューターが積んでいる専門の演算装置を使用するような機械語命令を使わないと、大きな高速化はされないのではないでしょうか?
それは、つまり、特に計算を速くしないといけないところは、そのスーパーコンピューター用に最適化された高級言語で書くか、または、これが一番確実ですがアセンブリ言語で書くか、というところでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
アセンブリ言語の知識があまりないため、アルゴリズムの改良やチューニングで高速化を行いたいと思います。
しかし、アセンブリ言語というアイデアは今まで出てきませんでした。
今後、検討していきたいと思います。
m(_ _)m

お礼日時:2005/01/27 01:19

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q2進数の割り算が分かりません・・・。

2進数の割り算が分かりません・・・。
授業でいきなり出てきて大変に戸惑っています。
10010➗11(2進数)
の解き方を教えてください。
よろしくお願いします・・・!

Aベストアンサー

2進数の場合の割り算は引く事が出来るか?をフラグを立てていく感じになります。

Q引き放し法による除算アルゴリズムについて

突然の質問失礼いたします。
現在私は学校で引き戻し法・引き放し法といった除算のアルゴリズムについて学んでいるのですが、そのうちの引き放し法について質問したく投稿しました。

引き放し法について自分で勉強しようと思い、いろいろ調べていたのですが、商と余りを出す引き放し法は見つかっても、小数点以下にわたってまで商を求める引き放し法がまったく見つかりませんでした。
(例えば5÷2=2あまり1と結果を出すのではなく、5÷2=2.5と結果を出す引き放し法のことです。)

少数点以下にわたってまで商を求める引き放し法は商と余りを出す引き放し法で表現できるのでしょうか?
もしよろしければ教えていただけると幸いです。また、参考にすべきインターネットサイト等もあれば教えていただけると助かります。

Aベストアンサー

★30÷8と考えます。
>3÷8などと言った被除数<除数の場合は同じ方法でやってみると
>解がでない気がするのですが・・・。
 ↑
 解けます。
・3÷8 は商が 0 となりますがこの時は 3×10=30 から 8 を割ればよい。
 よって
 (1)3÷8=0
 (2)30÷8=3あまり6
 と計算します。0、3あまり6 と出ますから 0.3 となるわけです。
・あまりの 6 は計算を続けて
 (3)6÷8=0
 (4)60÷8=7あまり4
 となります。ここで 0.3 に 7 を追加して 0.37 となります。
・あまりの 4 は計算を続けて
 (5)4÷8=0
 (6)40÷8=5あまり0
 となります。ここで 0.37 に 5 を追加して 0.375 となります。
・割り切れたので 3÷8=0.375 となります。
 このように『被除数<除数』の場合は10倍して繰り返します。
 それでは宿題として3÷800はどうなるでしょうか?
 出来たら補足などに書き込んでみて下さい。
・以上。


人気Q&Aランキング