
No.9ベストアンサー
- 回答日時:
#5=#7=#8 です。
> Cのループは再起呼び出しより速度が速く
末尾再帰の話はとりあえず忘れていただくとすると、
Cに限らず、一般にプログラムはループで書けるならループで書いたほうが再帰呼び出しを使うより処理は速いですし、必要メモリ量も少なくてすみます。
> さらにFORTRANでは並列処理によって高速化が計られている
ループが高速化されるというより、ベクトル演算が高速化されるといった方が正確かもしれません。
同じループでも、微分方程式を解くときの反復演算のように、r0からr1を求めて、r1からr2を求めて、、、を繰り返すようなループは、ベクトルプロセッサを使ったところで並列化は不可能です。
ベクトルプロセッサの強みは、ベクトルの各要素の計算を一度にやってしまえる点にあります。
v = abs(v)
と書けば、vがベクトル長nのベクトルなら、n並列で絶対値の計算をしてくれるわけです。
これをC言語で、
for( i=0 ; i<n ; i++ ) v[i] = abs( v[i] );
と書いてしまうと、n回のabs関数の呼び出しを同時にやっていいのか、i=0から順番に呼び出さなければならないのかが(基本的には)わからないため、並列化できないのです。
No.7
- 回答日時:
#5です。
あれからいろいろ調べてみました。> 最近のFORTRANは知りませんが、元は再起呼出しができないため
FORTRAN90以降はできるようになっているようです。
ただ、再帰呼び出しは記述性を向上させているだけで、性能としては時間的にも空間的にもループで書くより不利なのでは?
Schemeのように末尾再帰が最適化されることを保証しているならともかく。
> この部分では関数呼出の手間だけ有利
関数呼び出しの手間だけでなく、多くの数学関数では、副作用が生じないことが保証できることも大きな利点だと思います。vをベクトルとして、FORTRANの
v = abs(v)
に相当する記述をCのループで書いた場合、並列化はまず無理だと思います。
なので、ベクトル演算と多くの数学関数を言語処理系として規定しているという点は、Cに対するかなりのアドバンテージといえるのではないかと思います。
(組み込み関数、と書きましたが一般の関数でも並列化してよいかどうかは、調べても該当する記述を見つけることができなかったのでわかりません。これができるとすれば、FORTRANはちょっとした並列構文を備えてることになり、Cと根本的に違う機能を持っていることになりますね)
少なくとも、FORTRANが並列処理、特にベクトルプロセッサ向けの最適化を意識した言語設計になっていることは間違いないようです。
また、科学記述計算に関する「記述能力」については圧倒的にFORTRANの方が上といってよいでしょう。
ご回答ありがとうございます。いろいろ調べていただき、お手数をかけました。御礼申し上げます。
科学計算の記述に関しては、FORTRANの方が優れているでしょうね。ベクトルプロセッサとして考えた場合、Cのループは再起呼び出しより速度が速く、さらにFORTRANでは並列処理によって高速化が計られていると理解してよろしいでしょうか。
No.6
- 回答日時:
#5の方の例はどっちかというと特殊な例だと思います。
ベクトル演算、並列演算の機能を持つハードウェア上で実行するばあい、
その機能に対応したFORTRANがあってCがないとか、
機能があっても配列演算文の点でFORTRAN有利とかの例はあるでしょうが、
言語そのものの性能の違いとはまた異なるように思います。
もしかすると、FORTRANの方が最適化がしやすく、
高性能なコンパイラがつくりやすいということはあるかも知れませんが。
あとは、「標準的な」Cだと関数呼出になる部分が
FORTRANだと組込み関数として言語の一部になっているので、
この部分では関数呼出の手間だけ有利かも知れません。
まあ、FORTRANも言語仕様がいくつもありますし、それによっても違うかもしれませんが。
最近のFORTRANは知りませんが、元は再起呼出しができないため、再起呼出ができることによって効率的に動く計算ならCが有利かも知れません。
もっとも、科学技術計算ではあんまりないかも知れませんが。
それに、再帰は非再帰なアルゴリズムでできる場合もありますしね。
ご回答ありがとうございます。確かに、FORTRANの方が最適化しやすかったりするかもしれませんね。言語の仕様にまでかかわってくる問題ですね。
No.5
- 回答日時:
私自身はFORTRANは使ったこともないのですが、、、
例えばベクトル演算を行う場合、Cでは普通ループを利用して書くしかないですが、FORTRANでは配列演算文というものを使って書くことができます。
これによって、コンパイラはベクトルの各要素の計算の並列処理が可能であることを容易に知ることができます。
このような差は、(地球シミュレータに代表される)ベクトルプロセッサを利用する際には大きいと思われます。
参考URL:http://www.komoto.org/fortran/
ご回答ありがとうございます。確かにかなり本格的な科学技術計算をやろうとすると、FORTRANの方が優れた機能を持っていそうですね。参考のURLも紹介していただき、ありがとうございました。
No.4
- 回答日時:
#3です。
(お礼も読んだ後)(1)記し忘れたことがあります。科学技術計算では、この方法(アルゴリズム)では、収束が遅い、こちらでは速いと言うのが良くあります。ですから遅いと証明されている方のアルゴリズムで組めば、Cでも遅くなりませんか。
(2)CもFortranもコンパイル方式です。
(3)コーディングの形の上では、四則演算などは、CもFortranも数学式と近い表現が許されていますね。
だから両コンパイラとかオプチマイザの違いに行き着くのでは。cコンパイラもかってDOS時代には10種類ぐらいの名前は聞いたことがある。
再度のご回答ありがとうございます。
収束が遅いアルゴリズムで組めばCでも遅くなる、というのは同感です。
結局行き着くところは、コンパイラやオプチマイザということで、結論としては、#1や#2の方の回答と着眼点は同じですね。
あと、気象や原子力といった大規模な科学技術計算を行っている方でも、同じ計算をCとFORTRAN両方で作ったということはないのではないかと思います。プログラムを組む目的からは、はずれていますから。
Windowsでは、こんな記事がありました。
http://www.geocities.jp/fujimaki691202/download/ …
No.3
- 回答日時:
議論の建て方がおかしくないでしょうか。
小生も生半可なものですが。
科学技術計算は解法のアルゴリズムの種類によって、答えがでるまでの時間が、左右されるとおもう。更に大きくはアルゴリズムが同じでも、例えば同じルンゲクッタ法でも、細部まで全世界の研究機関にあるFORTRANライブラリが同じとも思えないです。
またデータの特徴がある場合、それを利用したりすれば速くもなるでしょう。ですからFORTRANと一概に言えないとおもう。
増して,Cで組んだものではFORTRANと違いがあるでしょうし、世界的な頭脳が改良したFORTRANと、駆け出しのCプログラマとでは差があると思う。
ライブラリの中も機械語になったとき、リンケージライブラリの中の機械語ルーチンは、組まれた言語の来歴は問わないでしょう(組み合わされる)。FORTRANでも無だな繰り返し等は改良できる。
機械語の実行速度のほかに、入出力装置の速さや、内部メモリの多少によるスワップなどの影響も大きいでしょう。
FORTRANは必要に応じてアルゴリズムやプログラムの改良も出来る人たちが扱う分野のものであることをお忘れなく。
もっと将来気象や原子力やその他大規模システムでも経験されたら考えて見られたらどうでしょう。
実際にそう言う経験者も多数おられるはずで、答えて欲しいですが、OKWEBを見ておられず、答えて頂けない層の人達でしょう(現にOKWEBでは数理技術的質問には回答がほとんどつかない)から、実現は殆どないでしょう。
ご回答ありがとうございます。主にご回答は、アルゴリズムの最適化に関して、またマシンのリソースが実行時にどう働くか(例えばメモリでスラッシングがおこるかどうか)ということに関してまで注意を払われた議論だと思います。非常に実用的な議論だとは思いますが、ここでは、そういうものを理想化して、すべて最適化した上での議論を行いたいというのが、私の質問の建前です。
たとえば、もっと単純に、コンパイル言語とインタプリタ言語ではどちらが実行速度が速いかという問では、コンパイル言語の方が早いというのは当たり前のことで、では、そのコンパイル言語の中でも、科学技術計算では、どの言語が計算速度が速いのかという素朴な質問が本質問の意図です。
質問の意図はわかっていただけたでしょうか。
No.2
- 回答日時:
最新のgccで最適化レベル最大でコンパイルすれば
cの方が速いと思います。
基本的にはどっちも速いでしょうけど、確かめてみては?
http://gcc.gnu.org/fortran/
参考URL:http://gcc.gnu.org/fortran/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 x=r・cosθの2回微分 θ=ωtとすると? 5 2022/05/10 23:53
- その他(プログラミング・Web制作) プログラミング 処理速度 1 2022/11/25 11:05
- 物理学 【 物理基礎 2物体の運動方程式 】 問題 写真の図を見て、物体A、Bの加速度の大きさを答えよ。 ま 1 2022/11/30 18:50
- 計算機科学 科学計算においてワークステーションを使うのはなぜ? 7 2023/02/16 19:21
- 計算機科学 fortranという言語は今でも科学技術計算でPythonと同じくらい使われてると聞いたのですが、そ 10 2022/08/25 00:43
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- 数学 平均の速さの求め方について質問させて頂きます。 12 2023/08/09 17:13
- 物理学 速度とは何か? 7 2023/04/16 13:45
- その他(IT・Webサービス) 高速処理可能な表計算ソフトについて ExcelやGoogleスプレッドシートのような表計算ソフトで、 2 2023/04/29 16:06
- 物理学 相対速度の公式v=v[a]-v[b]というのは、直線上でしか成り立たないという認識であってますか? 6 2022/05/02 14:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
入射角反射角
-
べき乗の計算が遅い理由
-
65536は2の何乗なのでしょうか?
-
「評価」「評価値」という言葉...
-
勤怠管理表を作成しています、...
-
パソコン
-
Nの階乗
-
DLL(VC++で作った)で稼動中の...
-
C++ で預金計算
-
VBAの高速化に関しての質問
-
分数計算で分母と分子を維持す...
-
C# C1FlexGrid SUBTOTAL で計算式
-
交通流シミュレータ
-
FCC(面心立方)の位置に粒...
-
PHPとJavaでSHA256の結果を同じ...
-
モジュラス103の計算とは何でし...
-
駅間の距離を求め運賃計算するJ...
-
C#でDirectXを利用し、曲面を描...
-
エクセル 再計算とVBA の...
-
VBAで関数をつくる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
エクセルで特定のセルのみを任...
-
matlabで計算終了
-
モジュラス103の計算とは何でし...
-
変化させるセルが変化しない
-
数値計算の高速化 (cos, sin, exp)
-
CとFORTRANの計算速度はどちら...
-
モジュロ
-
スレッド処理からダイアログを...
-
時間(ミリ秒を含む)の引き算
-
VB6で正確なミリ秒を計測したい...
-
60進数の四則計算
-
PHPとJavaでSHA256の結果を同じ...
-
C言語についてです。 再帰を使...
-
なぜオーバーフローになるので...
-
VBA入力フォームで労働時間の計...
おすすめ情報