【科学技術計算】C言語とFortran どっちがいい?
1 :
Einstain :
03/01/16 20:16 科学技術計算のコードを作るんだけど、 FortranでなくてCで作った方がこの先有利?
2 :
名無しさん@1周年 :03/01/16 21:14
>>1 matlabまたはmatlabクローンでおながいします。
3 :
名無しさん@1周年 :03/01/16 21:26
Cだろうねぇ。
4 :
名無しさん@1周年 :03/01/16 22:46
<血液型A型の一般的な特徴>(見せかけの優しさ・もっともらしさ(偽善)に騙されるな!) ●とにかく気が小さい(神経質、臆病、二言目には「世間」、了見が狭い) ●他人に異常に干渉する(しかも好戦的・ファイト満々でキモイ、自己中心) ●自尊心が異常に強く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとする (ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際にはたいてい、内面的・実質的に負けている) ●「常識、常識」と口うるさいが、実はA型の常識はピントがズレまくっている(日本の常識は世界の非常識) ●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者に弱く、弱い者には強い) ●あら探しだけは名人級(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす) ●基本的に悲観主義でマイナス思考に支配されているため、性格がうっとうしい(根暗) ●一人では何もできない(群れでしか行動できないヘタレ) ●少数派の異質、異文化を排斥する(差別主義者、狭量) ●集団によるいじめのパイオニア&天才(陰湿&陰険) ●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい) ●他人からどう見られているか、体裁をいつも気にしている(「世間体命」、「〜みたい」とよく言う) ●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度も言う、知障) ●表面上意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は個性・アク強い) ●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う) ●自ら好んでストイックな生活をし、ストレスを溜めておきながら、他人に猛烈に嫉妬する(不合理な馬鹿) ●執念深く、粘着でしつこい(「一生恨みます」タイプ) ●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。しかも冷酷) ●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(他人をけなして相対的に自分の立場を引き上げようとする等) それと、O♀はエコヒイキきつくて、冷酷だからな。 A♂の異質排除×O♀の冷酷=差別・いじめ とあいなる。
6 :
名無しさん@1周年 :03/01/17 19:18
一回のシミュレーションの時間によると思います。 最適化コンパイルでCとFORTRANの計算速度差が10%くらいですと私はFORTRANを選びますね。 それだけで数時間から数日時間を節約できます
7 :
名無しさん@1周年 :03/01/19 17:44
保守性の観点からはFortran9xの方がCよりも格段に良いだろう。
8 :
名無しさん@1周年 :03/01/21 16:08
FORTRANのほうが簡単だし
9 :
名無しさん@1周年 :03/01/22 22:58
10 :
名無しさん@3周年 :03/01/22 23:32
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
24時間受付 090−8505−3086
URL
http://www.h5.dion.ne.jp/~grobal/ メール
[email protected] グローバル探偵事務局
>>1 コメントさえ、きちんとつければ何だろうといいんだよ。
>>1 スパコン(死語?)とかでも使えるようにするならまだまだFORTRANなんかな?
「慣れてるほう」でやりゃいーんぢゃない 科技ソフトの保守なんて言語が
なんだろーとどうせタルいし
14 :
名無しさん@3周年 :03/02/21 13:45
引数に値をセットして欲しかったり、 配列などを使うと、本当はそれほど必要でもないのに ポインターを使わないとプログラムがかけないC言語は、 プログラムの動作安全性や理解しやすさの観点からは、 落第だ。以前のFortran66などでは構造化プログラミング ができなかったし、データ−構造も満足にはかけなかったが、 Fortran9xではそのどちらもちゃんと扱えるし、動的記憶も 割付できる。しかもオブジェクト指向に似たモジュール プログラミングもできるのだ。 Cでなければ出来ないという ようなことは、ほぼなくなったといってよい。OSがCベースで 計算機システムのOS機能を呼び出すことでもなければ、 Fortranで書いたほうが、システム間の移植性もよい。
15 :
名無しさん@3周年 :03/02/21 16:07
親身になって教えてくれる人がいればC、独力で作るならFORTRAN。
17 :
名無しさん@3周年 :03/02/22 16:39
C++
C++なら簡単なことならポインター解らなくても大丈夫になったし、 inline展開で問題を分割統治して見通しをよくしながら効率を維持できるし、 templateなんかは例えばさまざまな種類のベクトルなどの表現が容易で拡張性も効率もOKだし。 速度についていえばfortranが頑張ってきた最適化の技術も役に立っているようだ。 なによりPCでかつ只で広く使える。ついでにいうと最近はcはコンパイラを一生懸命改善してくれるが fortranはwinだと使い手もいないし、あんまり頑張ってくれないぽ
19 :
名無しさん@3周年 :03/04/08 09:45
IntelのコンパイラはF90もあるよ。Windows版もあるよ。
20 :
名無しさん@3周年 :03/04/08 16:07
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ・∀・) < イイ!!
/, / \_________________
(ぃ9 |
/ /、
/ ∧_二つ
/ /
/ \ ((( ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ /~\ \ ( ・∀・) < イイ!
/ / > ) (ぃ9 ) \_______
/ ノ / / / ∧つ
/ / . / ./ / \ (・∀・) イイ!
/ ./ ( ヽ、 / /⌒> ) ゚( )−
( _) \__つ (_) \_つ / > (・∀・)イイ!
玩具/AV買うならココでつよ
http://lovetec-jp.com/
22 :
名無しさん@3周年 :03/04/08 21:49
23 :
名無しさん@3周年 :03/04/09 04:43
26 :
名無しさん@3周年 :03/04/09 05:36
あぼーん
30 :
名無しさん@3周年 :03/04/09 19:39
31 :
名無しさん@3周年 :03/04/10 06:39
32 :
◆NjJALam... :03/04/10 17:40
俺もC++マンセー 最初からある程度使えるテンプレートライブラリが付いてるし その都度アロケータや数値計算ライブラリを差し替えればいいだけ ただFortranはポインタが無かったり、文法がシンプルな分、 最適化はしやすいと聞いたことがある
33 :
名無しさん@3周年 :03/04/10 18:59
36 :
名無しさん@3周年 :03/04/14 12:31
37 :
名無しさん@3周年 :03/04/14 15:16
四則演算だと今、どっちが速いの? まだFORTRAN?
>>38 単純な四則演算だけなら差は無いんじゃない?
それに、使うコンパイラや計算機によっても変わってくる。
同じ会社のコンパイラだと、フロントエンドが違うだけで
コード生成部分は同じものを使ってる事だってあるし。
言語的にはC++よりFortran90の方が並列処理化しやすい(らしい)が
並列処理できない計算機じゃ、あまり恩恵がない。
40 :
名無しさん@3周年 :03/04/16 01:27
すいません、私用のPCでもフォートラン使いたいんですけど、 Linuxをインストールすればフォートランのコンパイラも入って るんですか?Cコンパイラは普通入ってますよね? 初心者な質問で申し訳ないです。
>>40 Windowsならcygwinでg77もgccも使える。
Linuxインスコするの止めはしないが。これはこれで楽しいし。
手っ取り早く済ませるならcygwin。
使い方がぐぐるか、該当スレ探せ。
42 :
名無しさん@3周年 :03/04/16 01:37
g77いれれば使える。 Win環境で使いたければcygwinで使う手もある。
43 :
名無しさん@3周年 :03/04/16 01:48
44 :
(σ・∀・)σ :03/04/16 04:05
みなさんありがとうございます。 cygwinというのは高価なんでしょうか? フォートランのコンパイラは非常に高価だときいていますが、 フォートラン90というのは77と大きく異なるものですか? 自分は今までCを使ってきたのですが、研究室が変わって フォートランを使わねばならない状況になってしまって とまどっています。全く使ったことがないものですから。
46 :
名無しさん@3周年 :03/04/16 20:38
(^^)
∧_∧ ( ^^ )< ぬるぽ(^^)
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
52 :
名無しさん@3周年 :03/06/04 18:35
age
54 :
名無しさん@3周年 :03/06/05 16:11
fortran90と77では何がどう違うの?
56 :
名無しさん@3周年 :03/06/05 16:39
59 :
名無しさん@3周年 :03/06/26 19:49
そういえば、 戸川 隼人さんってまだ存命ですか?
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
∧_∧ ( ^^ )< ぬるぽ(^^)
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
63 :
名無しさん@3周年 :03/08/23 14:50
数値計算のため、フォートランを覚えなくてはならない状況になったわけですが、 フォートランの定番入門書を教えてくださいませんか? よろしくお願い致します。
>>64 ありがとうございます!
アマゾンで検索したらその本が一番上でひっかかりました。
フォートランのことは全く知らないのですが、従来のワークステーションとか
最近はやりのcygwin上でもフォートラン90は走らせられるのですか?
その辺がさっぱりで・・・すいません。
>>65 ワークステーションでもWindowsでも、商用のcompilerを購入すればOK。
貴方が学生か社会人かは分からないけど、数値計算のためにFortranを
覚えろと言う人がいるということは、そこにFortranを使える環境が
あるということでは?
自宅などでFortran90を使える環境が欲しいということなら、
LinuxやFreeBSDでIntel Fortran Compilerの無料版を使えば良い
かと(ただし、個人・非商用限定)。
67 :
名無しさん@3周年 :03/08/26 17:05
>>66 レス遅れてすいません。
えっと、何がわからないかというと、フォートラン90というのは77とかいうのと
全く異なるものなのですか?
つまり、フォートラン90の本を買って、覚えても90用のコンパイラが入ってなければ
使えないとか。
研究室のワークステーションでは、コンパイルのときにg77 というコマンドで
実行してましたから、90とは違うのかな?
とりあえず、自宅でフォートランを走らせたいんですけど、Linuxを入れるのは
難しいらしいですし、自分もPC自体初心者ですから、簡単なcygwinを入れようと
思ってるんです。これには77のコンパイラは入っているようです。
68 :
名無しさん@3周年 :03/08/26 18:52
色白美巨乳の綾ちゃんです。
サムネイルの通り騎上位での下からのアングルが
最高の抜きどころですかねぇ。
冒頭のビキニでのオナニーシーンもいいし・・・
とにかく抜きどころが満載ってことです。
それにしても綺麗なオッパイです。
無料動画はこちら
http://www.exciteroom.com/
>>67 メインに使っているのはC/C++なので、分かる範囲で。
> えっと、何がわからないかというと、フォートラン90というのは77とかいうのと
> 全く異なるものなのですか?
基本的には77の拡張が90。ただし、削除された機能もある。
> つまり、フォートラン90の本を買って、覚えても90用のコンパイラが入ってなければ
> 使えないとか。
> 研究室のワークステーションでは、コンパイルのときにg77 というコマンドで
> 実行してましたから、90とは違うのかな?
g77は部分的に90をサポートしているので、頻度はともかくコンパイル
できない状況は有り得るかと。
> とりあえず、自宅でフォートランを走らせたいんですけど、Linuxを入れるのは
> 難しいらしいですし、自分もPC自体初心者ですから、簡単なcygwinを入れようと
> 思ってるんです。これには77のコンパイラは入っているようです。
cygwinに入っているのもg77。
参考URL:
ttp://www22.ocn.ne.jp/~moriyama/notes/robust-programming.html
70 :
名無しさん@3周年 :03/08/27 08:51
>>69 ありがとうございます。
自分もこれまでCを使ってきたので全然判らなくて・・・
すいません・・・
一番気になってるのは、フォートラン90の本は77を完全に含んで
いるのかということです。90と77の違いがよく判らないのですが、
みなさんがg77でコンパイルしていたので、77のほうを使っているので
はないかと思っているのですが・・・
90の本を買っても全然77が組めない、なんてことになると、また
本を買いなおさないとなりませんよね。
個人的には、物理の数値計算が出来ればいいです。あとLAPACKが使えれば。
フォートランはそもそも数値計算用に開発されたものなので、それを
覚えろと異動先の教授に言われました。研究室の学生も全員フォートランのようです。
それに、Cより簡単らしいですし、いろいろ利点があるそうなんです。
ウィンドウズ用のコンパイラもフリーであるとききました。
90の本を買って、g77でコンパイルできない機能は使わない、という
ことは可能でしょうか?そんなことは不可能なくらい大きく拡張されて
しまったのでしょうか?おバカな質問で申し訳ないです。
> みなさんがg77でコンパイルしていたので、77のほうを使っているので
> はないかと思っているのですが・・・
とか、
> フォートランはそもそも数値計算用に開発されたものなので、それを
> 覚えろと異動先の教授に言われました。研究室の学生も全員フォートランのようです。
ということなら、その異動先の人たちに訊いた方が早いのでは?
この程度の質問ができないで、その人たちと上手くやっていけるとは
思えないが…それに、
>>64 で紹介されているURLにも有用な情報がある。
不馴れな環境で戸惑っているのかもしれないけど、2chで質問する前に
できることが色々あるのでは。
>>70 F90の本で勉強してF77のプログラムをつくることは可能ですが、
かなり難しいでしょう。(C言語を使っていたのなら特に)
私はF90を覚えてからF77でプログラムをつくるのが苦痛になってしまいました(w
F90は規格上、F77のすべてを含みますが拡張された部分がかなりあるので
逆にF90のプログラムをF77のコンパイラでも動くようにするのは
かなり大変な作業になると思います。
FORTRAN77の参考書は最近あまり見ていないのですが
竹内則雄/ 平野広和 著 「FORTRAN77とFortran90」 (森北出版)
はどうでしょうか?
題名に反して(?)内容はほとんどFORTRAN77の文法書になっています。
後半でFortran90で追加された機能についてもふれているので、
F77を覚えながらF90についても知ることが出来ると思います。
73 :
名無しさん@3周年 :03/08/28 00:31
>>72 そうですか、、、
ありがとうございます。
みんなg77でコンパイルしているところをみると、90はまだまだ
少数派なんですかねぇ・・・
74 :
お絵描きBBS :03/08/28 06:06
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 同人をやっています! 明るく、楽しいHPですよ!
\____ __________________
V
, -―- 、 /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/了 l__〕 〈] /お絵描きBBSがたくさん,ありますよ!
7| K ノノノ ))))〉 ,、 |
http://pink.sakura.ne.jp/~erotan/ l」 |」(l| ( | | ||. !lm \_ _________
| |ゝリ. ~ lフ/リ lアノ V
| | /\∨/‐-/`'/
. l l | /ヽ/==|‐-- '
!リl/ // ヽ _ , '⌒ ⌒\
_〈 // \\\ ノ// ヘヘ、
. `つノl// ヽ // |||)、 <絵を描くのが好きな人は
//'へ゛ーノ お絵描きしに来て下さいね!
76 :
名無しさん@3周年 :03/08/28 19:13
皆さん数値計算の結果とかはGNUPLOT使ってます? これってフリーなんでしょうか?
77 :
名無しさん@3周年 :03/08/28 19:27
堤さやかちゃんの引退記念作です。
可愛らしい顔に大きなオッパイ少女っぽいパンティーがそそります。
絡み自体はいたってノーマルですがこの子がやっているだけで下半身に血が集まります。
本気で感じている姿はやっぱいいですね。
モロ見え動画を無料でゲッツ!!
http://www.pinktrip.com/
78 :
名無しさん@3周年 :03/08/28 23:42
>>70 FORTRANやってメリットあるのはその研究室がこれまで作ってきた過去の
資産を使えること・・・ぐらい。
あなたが電気系のエンジニアになる予定がなければFORTRNでもMATLABでもいいです。
でも、そうじゃなければC/C++を使えるほうがはるかにメリットは大きいでしょう。
ちなみにC/C++からFORTRANライブラリを呼ぶことは可能です。
あと、
Cygwinは極めて遅いよ。
80 :
名無しさん@3周年 :03/09/20 20:46
81 :
名無しさん@3周年 :03/09/20 22:02
fortranってまだあったの?
83 :
名無しさん@3周年 :03/10/13 16:21
スーパーコンピューティングの世界ではFortranが常識。 日本のメーカーのスパコンは伝統的にベクトルマシンだが CよりFortranの方がベクトルマシン上での最適化が効きやすい。 NECのSX-7使ってるけど、いちおうスパコン用のCコンパイラーも 用意されているが周りでC使ってる人を見たことがない。 純粋に数値計算だけ行うために、スピードの出ないCを使わなくてはならない 積極的な理由があるのかよくわからん。
84 :
名無しさん@3周年 :03/10/14 11:20
スーパーコンピュータではFortranのほうが少し速い のは知っているが、あくまでも少し速いという認識。 たしかに、数値解析をやる分にはFortranのメリットも感じるが、 世の中で普及しているのは圧倒的にC/C++。Fortranのほうが C/C++に比べて数倍速く動くのであれば別だが、ちょっと速い程度 では普及しているC/C++になびく人も多くなる。 実際のところ情報分野一般として見るとで、Fortranは壊滅的だし。 この状況だと数値計算の分野も例外なくC/C++化が どんどん加速されると思う。 現段階では、自分のためだけの計算コードというのであれば Fortranのほうがいいのかもしれんが、今後そのコードを他人に 配布したり、スパコンだけでなくWSやPCでも手軽に使ってもらえる ようにしておきたければ、C/C++のほうが有利さはあると思う。
85 :
名無しさん@3周年 :03/10/15 03:36
>>84 コメントありがとさん。
拙者はずーっとFortranオンリーの人間なんでC言語はかじった程度しか
知らないんだけど、確かに情報処理にFortranは使おうとするのは厳しい。
だけど、流体とかモンテカルロシミュレーションではFortranがばりばり
現役だし、速度のこと言うとC言語のC言語らしいところ(構造体とか
ポインターとか)はメモリアクセスの連続性を損なうとかで
スカラーマシンでもそうだと思うけど、ベクトルマシンではかなり
性能を落とす要因になる(と両方使ってる人に聞いた)。
linpackみたいな性能評価プログラムがFortranで書かれてるのも
スパコンの性能引き出そうとしたらそれがベストだからなのではと
思います。ちなみにFortran90で構造体とかサポートされたけど、それを使って
シミュレーションコードを書くと同じ理由で遅くなるのでメーカーサイドからも
お勧めできませんといわれます。あと、科学技術計算と言えば最近
並列計算が盛んになってきてますが自分の知る限りMPI+Fortranで
やるのが一般的なんじゃないんですかね?もしCで並列計算している
人がいたらどんな分野の計算に使ってるのかちょっと興味あります。
ちなみに自分はHPFで粒子シミュレーションなどに使ってますが
DO ループぶん回すだけの計算ならFortranで必要十分だしプログラムも
Fortranの方が読みやすいと思うんだけどなあ。まあその辺りは
それぞれ感じ方も違うと思いますが。
でもまあ、書いてて自分でも思ったんだけどFortranはやっぱりすでに
特定の分野以外では廃れつつある感は否めないっすね。
せめて数値計算科学の分野ぐらいでは生き残ってほしい。
86 :
名無しさん@3周年 :03/10/16 03:27
>>85 >>84 のコメントしたものです。
こちらこそどうも!
自分もスパコンを使って研究などをしとります。
MPI+Cもやっとりますよ(w。流体計算に使ってます。
メモリアクセスの問題から考えれば、ポインタや構造体の使用は
ベクトル化には不利に働くでしょう。これらの使用をできるだけ避け、
通常の配列を使用すれば、メモリアクセスという点ではあまり
問題ないっすね(当たり前)。ポインタの使用はCらしさの
ひとつでもあるのでスパコンのベクトル化を考えれば、
言うとおりCを使用するメリットはあまりないかもね(w。
HPFは使ったことないので知らない。コンパイラ系の分散並列は
記述が簡単そうだし、HPFはメモリの配分がかなり自由なのは魅力だね。
MPIは汎用のライブラリだから、使い勝手はかなり良いメリット
はあるともいえる。
並列化の最適化の点では…HPFはわからん。VPP FortranはVPP機に
あわせて作られてる分、MPIより少し速くなるらしいが…。
Fortranのほうが見やすいというが、自分的にはあまり大差を
感じないっすね。この辺は慣れの問題だと思う。
ただ、仮にプログラムをほとんど知らない人にどっちの言語をやれば
いいかと聞かれれば、C/C++となってしまう。なぜなら、C/C++が
多くの人々に認知されてて広い分野で使えるから。別にFortranやったあと
C/C++でもいいんだけどね(その逆もあり)。
スパコン使ったことがないので教えてください。 ベクトル計算機っていわゆるマッチドフィルタでしょ? スカラプロセッサはΣx(i)*y(i)の計算に少なくともn回ループ まわす必要があるのに対して、最小システムクロック(1クロック とは言わないがハードウェアで一発で実行できる)で実現できると 言う点。 メモリの個々のアドレスにアクセスするのにポインタは便利だと 思うんだけどね。すべての計算が内積計算でもないんだし・・・?
88 :
名無しさん@3周年 :03/10/17 01:27
>>86 実際、Fortranだけでこの先やってけるかというと不安ですね。
仕事の必要上Cのソースコード読まなきゃいけない時とかもあるんで。
ちなみにHPFですが、現状ではMPI分かるならそっちで書いた方が
いいよー、と使ってる人間ですら言いたくなるような代物です。
おっしゃるように汎用性の面からも現状ではPGI製のHPFコンパイラくらい
しか手に入らないという問題点もありますが、プログラムの方も
確かにコメント文をはさむだけで並列化されるのは楽ですが、なんというか
「安全第一」的な解釈をコンパイラーがして、余計な通信まで発生させて
しまったり、通信バッファー用の配列を使いまわせばいいものを
通信の前後でallocateと開放を繰り返すのでオーバーヘッドが馬鹿に
なりません。まだまだ開発途上の言語だと思います。
89 :
名無しさん@3周年 :03/10/17 01:39
それから、
>>87 さん、
えー、マッチドフィルタというのを知らないので答えになってるか
分からないんですが、ベクトルマシンで上の例のような計算するときに
x(i),y(i)の値が各々メモリ上に連続に乗ってないとスピードがでないんです。
たとえばx(ix(i))みたいなリストベクトルだとか、iの値を10個飛ばしに
ループをまわすとかだとあまり性能を引き出せません。
で、ポインターなんですがこれはC言語やっている人の方が詳しそう
なんで間違っているかも知れないですけど、おそらくメモリ上の連続
アクセスになっている保障がないんじゃないでしょうか。
何か答えようとしてるのか聞いてるのか分からなくなってしまいましたが。
理論物理では未だにFORTRANが常識だよ。 でも俺もCかC++覚えたい。 暇がないが・・。
91 :
名無しさん@3周年 :03/10/26 00:27
Javaは論外でしょうかね?
93 :
名無しさん@3周年 :03/11/03 12:51
FORTRAN90以降のFortranなんて、使う意味があるのかな。 Fortran77以前は、膨大なソフト資産があるから意味があるけど、それを使わない のなら、cやc++でも十分と思うけど。 先生がFortranをmustにするのは、f77以前の話じゃないのかな。スーパーコンを ガチガチに使うのであれば、また少しちがうかもしれないな。 普通の人は、f77以前か、c++といところかな。
>>93 90でもサブルーチンは77のを使えるからな。
先生がFortran77をmustにするのは、御自身がF77しか使えないから というのは内緒です。
96 :
名無しさん@3周年 :03/11/04 08:32
>理論物理では未だにFORTRANが常識だよ。 >でも俺もCかC++覚えたい。 >暇がないが・・。 FORTRANは3日もあればそこそこ書けるようになるが C++はちと大変だ。The C++ Programming Language --- Over 1000 page
98 :
名無しさん@3周年 :03/11/06 21:23
>97 名前:名無しさん@3周年 :03/11/05 14:12 >.... >FORTRANは3日もあればそこそこ書けるようになるが c++もそこそこ書けるよ。
99 :
名無しさん@3周年 :03/11/07 10:52
科学技術計算だけを考えるならFORTRAN
100 :
名無しさん@3周年 :03/11/08 00:13
仕事でFortranのPGのチューニングしたんだけど 配列データのメモリ格納の順番が数学と違うのでバンクコンフリクト を起こすんだよね。 チューニングしててはじめて知ったよ。 ループ入れ替えただけでパフォーマンスが向上したよ。
c
103 :
名無しさん@3周年 :03/11/08 08:22
多次元配列でよくある話。特に、ベクトルマシンでは顕著。例えば、2次元配列 だと、cになれた人は、x[i][j]でjが先に回る。Fortranはx(i,j)でig先に 回る。x[i][j]の感覚でx(i,j)と書けば、バンクコンフリクトを起こすことがある。 これはわかりやすい例。ベクトルマシンだと、下手すると10倍くらい違ってくる。
え,フォートランってまだあったの?
105 :
名無しさん@3周年 :03/11/08 14:57
>>103 漏れも大昔、電話回線でプラ研のVPには入り、バッファの配列を逆に廻したら
とたんにパフォーマンスが落ちたらしく、後でボコられた。
106 :
名無しさん@3周年 :03/11/08 15:46
>104 名前:名無しさん@3周年 :03/11/08 09:09 >え,フォートランってまだあったの? 健在、健在。科学技術はFortranはmust。c、c++は知ってていいけど、Fortran を知らなきゃ話にならない。 Fortranもequivalenceを常時使えればたいしたもの。昔(1960〜1980)のFortran プログラムを見ると、cの機能は、こんなことから出てきたんだなとよく わかるよ。cのプロも古いFortranソースプログラムを見ると勉強になるね。
107 :
名無しさん@3周年 :03/11/08 16:50
Fortranで一番やっかいなのはWRITE文のFORMATだろう。 それにしてもDEC PDP-11のテンキーを使ったエディターは絶品だよね。
109 :
名無しさん@3周年 :03/11/08 20:02
CのコンパイルはFORTRANと違って論理とかの面で間違ってても簡単に 通ってしまうので結果を見てからじゃないと間違いに気づかないと UNIXマガジンに書いてあっんだけど本当? それならしばらくはFORTORANはmustですな。
112 :
名無しさん@3周年 :03/11/09 02:27
>>110 「論理面の間違い」というのがどんなことを指しているのかわからないけど
コンパイル時の文法チェックという点ではFORTRAN77よりもANSI以降の
Cの方が厳しいと思います(当然、コンパイラにもよりますが)
FORTRAN77では規格上、空白を無視したり暗黙の型宣言がありますから。
113 :
名無しさん@3周年 :03/11/11 04:21
>>112 > FORTRAN77では規格上、空白を無視したり暗黙の型宣言がありますから。
Fortran90になってから、"implicit none"が推奨になったんだけど
f77から使っている人はやっぱりどうしても暗黙の型に頼って書くもんじゃ
ないでしょうか(少なくとも自分は)。
使う変数いちいち型宣言するのって、どうもめんどくさいだけにしか思えない。
Cを使っている人はFortranのプログラム見て、「変数が沸いてくる」という
印象を持つと聞いたことがあるけど、陽に型宣言するメリットって
打ち間違いで未定義変数使っちゃう事を防ぐ以外に何かメリットあるんでしょうか。
会社に入ることになったんですが、シュミレーション系では 言語は何を使うんでしょうか? 今までは科学計算としては大学でFORTRANしか使ってこなかったのですが
115 :
名無しさん@3周年 :03/11/11 17:54
>>114 シミュレーション系だったらほぼFORTRANしか使わないから安心汁!
116 :
名無しさん@3周年 :03/11/11 19:11
>印象を持つと聞いたことがあるけど、陽に型宣言するメリットって >打ち間違いで未定義変数使っちゃう事を防ぐ以外に何かメリットあるんでしょうか このメリットは大きい。i0とioの違いに気付くのに1ケ月かかったなんて よくある話。暗黙の型宣言は、笑い話がある。yuukaは正しい答えを出すけど kumikoは間違った答えを出す。 implicit nonでもc++でも、整数はijklmnで始まる変数名にしてしまう。
DO 10 I=1. 100
118 :
名無しさん@3周年 :03/11/12 01:27
I,Jを整数とするときに, Cで I/J と整数割算を実行するのと,FORTRANで I/Jを実行するのでは 結果が違うことを知らずに,ずいぶん悩んだことがあった.
画像を扱うライブラリで Cのものは結構ありますが、 Fortran のはありますか? 画像データもFortran プログラムから 出力したいのでつ。
121 :
名無しさん@3周年 :03/11/15 10:52
>119 名前:名無しさん@3周年 :03/11/13 00:08 cとのリンクを勉強したほうがよい。アメリカのシミュレーションプログラムは ほとんど、cとForteanで切り分けています。その筋の大学や国研の人とコネが あれば、ソースレベルで入手できるから勉強になりますよ。
122 :
数値計算屋さん :03/11/19 00:34
現役のFortran使いです。 こんな事いっては何ですが、数値計算を行う場合、FortranだろうがC言語だろうが あまり関係ない。必要とする計算を実現できればよいのですから。 問題は、計算を行う場合アルゴリズムが大切で、これを理解するのが一番難しい。 まあ、ライブラリを使えばことは足りますが。 経験的には、C言語とFortranでは自由度の少ないFortranの方がより最適化が効いて 高速化しやすい。記述性、読みやすさは経験値によって異なりどちらが優位かなんて あまり関係ない。自分が分かりやすいプログラム言語を使えば良いのです。
123 :
名無しさん@3周年 :03/11/20 23:11
ベクトルをプリミティブで扱える言語 (と言っていいのかな) は, のきなみ FORTRAN を呼べるようになっていますね. 適材適所かなと思います. 計算が膨大な部分は FORTRAN で, 計算でないところは流行りの高級言語, その他の計算は MATLAB 系で,という風でいいですか?
124 :
名無しさん@3周年 :03/11/21 08:53
>121 名前:名無しさん@3周年 :03/11/15 10:52
>>119 名前:名無しさん@3周年 :03/11/13 00:08
>cとのリンクを勉強したほうがよい。
違う言語で生成したオブジェクトをリンクできるようになるのが現実的
ですね。エクセルをUIにすると結構便利です。
125 :
名無しさん@3周年 :03/11/26 04:36
F9xでは、文関数を使うと、いろいろワーニングが出てうざいな。
>>125 文関数はFortran95で廃止予定事項になってるからね。
127 :
名無しさん@3周年 :03/12/05 23:37
僕は計算科学分野の数値計算においてオブジェクト指向に 意味がみいだせるのならC++(まあ、ちょっと問題もあるけど) で、そうでなく関数でやっていっていいのならFortran90で いいんじゃない?(文法的にCでやれることはほとんど F90の段階でできる。)計算科学分野での一種デザインパターン ができればC++でやっていくのは面白そう。
>>127 面白いだけになりそう...
FORTRAN は高くて計算専用の計算機に,
すごい商用コンパイラと入っていることが多いから,
そこで動かすための言語っていう感じだね.
(注意すれば) ポータビリティがあるアセンブリw
129 :
名無しさん@3周年 :03/12/06 00:11
C言語とC++言語は、ポインタ(というが実際にはアドレス)を多用した プログラムをかける為、計算機科学のセンスがちゃんとした人間が 書かないと、バグだらけ、潜在的のなバグの温床のソ-スを大量に 書いてしまい勝ちである。しかもC言語C++言語は環境をインクル-ド することを前提になっていて、実はポ-タビリティの無いソ-スコ-ド になりがちだ。マクロを埋め込んで書く流儀は、保守性を損ねる。 長期に渡って使われるであろう大規模システムは、OSとの独立性も 考慮してFORTRAN90、95等で書く方が長期的にはメリットがあるはず。 プログラミングが本当の専門職ではない科学や工学の研究者が プログラムを書くのにちょうど適当な機能と複雑さ、レベルを備えた 言語としてFORTRAN90はお薦めである。CとC++は学習に時間がかかり すぎる上に、言語を完全に把握するためにはこまごましたことを しかもシステムに併せて理解しなければいけない。大規模システムを 全部そういったシステム依存にも書ける言語で開発することは 賢明ではないと思う。
130 :
名無しさん@3周年 :03/12/06 00:31
Cを使おうがFORTRANを使おうが 所詮は道具なのだから何でもいいんじゃない? 結局、自分が使いやすいものを使えばいいと思う 研究データの蓄積もあるだろうから環境にもよるのだろうけど
131 :
名無しさん@3周年 :03/12/06 00:46
>>130 処理系同士の互換やらがしっかりしていれば幸せなんだと思うよ.
人の思考の仕方によって,言語に向き不向きがあるのも
問題を複雑にするよね.
C, FORTRAN じゃ同じようなもんだけど.
シンボル名は 6 文字まで.これでうまくやっていく奥義をご存じの方いますか?
132 :
名無しさん@3周年 :03/12/06 01:24
>>129 数値計算をやる分、環境をインクルードってのは
それほどないとは思うけど、Fortran90が
「適度な機能と複雑さ、レベルを備えた言語として」
お薦めなどは納得。ただ、数値計算分野がオブジェクト
指向的な捕らえ方では本当にとらえきれないものだろうか?
明確な物理対象にたいしては、構造体を使うのはプログラムが
まとまるし、で、構造体をつかいはじめるとそれに対する
メソッドってのはいくつかつけたくなる。一方であんまりに
こりすぎたクラスなんかを使うと、わけがわからなくなるって
のもあったりもする。僕自身は、今は幾分クラスをつかった
関数型の書き方をしていたりするが。
133 :
名無しさん@3周年 :03/12/06 02:07
cもフォーも両方習得できるだろ、普通に。 英語より簡単だ
134 :
名無しさん@3周年 :03/12/06 04:21
いまの Fortran90 は長さが30文字のような名前を変数などに使うことが できるんだよ。 構造体も描けるし、モジュ-ルの機能によって一種の オブジェクト指向を極めて禁欲的にだけども実現できる。演算子の オ-バ-ロ-ドも可能。だけどもプログラミングのコツは、強力な機能は ポイントを押えて使うことにあり、なんでもかんでも、オブジェクト 指向に走るのは賢明ではない。あることを3行でかけていたことを 1行でかけるようにする為に、裏側で沢山のそのコ-ドに独自の定義を 凝らして書いてもしょうがない観たいなところがある。それよりも だれが読んでも何をしようとしているのかが、その言語を知っている 人なら自明に分かるのだとしたら、へんな定義を使わず素直に実現 した方が、よいだろう。程度の問題だけどね。
135 :
名無しさん@3周年 :03/12/06 15:00
>134 名前:名無しさん@3周年 :03/12/06 04:21 >いまの Fortran90 は長さが30文字のような名前を変数などに使うことが >............................. >ポイントを押えて使うことにあり、なんでもかんでも、オブジェクト >指向に走るのは賢明ではない。あることを3行でかけていたことを >1行でかけるようにする為に、裏側で沢山のそのコ-ドに独自の定義を >......... もうすこし具体的に言うと、物理的意味がはっきりしているところは オブジェクト指向を心掛けてよいのではないか。たとえば、弾丸の飛行 距離を計算する場合、常識的には x=a*t**2+b*t+c と1行で終わるから、ベタ書きしてしまいたくなるけど、弾道計算はやりだせば キリがなく、それだで膨大なプログラムになるから関数を引用した方がよい わけだ。後で簡単に入れ替えられるから。 短ければ、ベタ書き、長ければオブジェクト化と、何も考えずにやる人が 結構多い。物理的意味がはっきりしているところは、後で入れ替えることが 多い。要は、何をしているのかきちんと理解していることですね。
>>135 頻繁に呼ばれるところの計算量を増やしても大丈夫でしょうか?
137 :
名無しさん@3周年 :03/12/08 23:35
Fortranの演算ルーチンのソースをf2cでCに変換して、その他はCで書く!
138 :
名無しさん@3周年 :03/12/09 18:41
>頻繁に呼ばれるところの計算量を増やしても大丈夫でしょうか? それはケースバイケース。必要ならしかたがない。もともとそういう 問題だから。計算量を減らす努力も勿論必要です。 あと、オーバーヘッドの問題もあるので、インライン展開も有効ですが 今はオプションでインライン展開する処理系もありますから、そいう 使い方も修得されては。
140 :
名無しさん@3周年 :03/12/10 22:19
Laheyの最新版あたりでは、PC系のFortrannコンパイラでもインライン展開も サポートしているのでは。
みなさん当然の如く承知でしょうが。。。。。。 C/C++ だと行列の扱いがアレなのがやっぱり痛い。 色々とクラスはあるけど、乱立してるし自作が一番とか言う人もおるし。 お手軽、ポータブルな実装に早く登場してもらいたいもんだ
>>141 しかも,matlab 系の方が行列の演算は速いらしいですね.
octave などのフリーソフトウェアでさえもそうなんだとか.
143 :
名無しさん@3周年 :03/12/13 19:40
全く数値計算をしたことのない者ですが、フォートランを覚えなければならなくなりました。 フォートランの定番の教科書・参考書がありましたら教えてください。 Windowsと研究室のワークステーションで走らせることができればいいです。 よろしくお願いします。
145 :
名無しさん@3周年 :03/12/13 20:55
富田って人のフォートラン90ってのがいいときいたんですが・・ あとフォートラン90サブルーチンライブラリって本も。 どうなんでしょうか?
最適化よりアルゴリズム・コーディングの方が重要なヤカン
>>142 なんとまあ。。。
まあヤツらは内部でLAPACK大先生を呼出してるらしいし、速いでしょうな。
FORTRANも、90なら(Cに慣れた私にとって)イイ感じなんですが、何分gcc
に無いってのは手軽さに欠けますよね。もうすぐF95が実装されるそうですけど
!! 語り尽くされた事の蒸し返しスマソ
MatlabよりOctaveの方が速いよ。 特にliboctave+atlasでPen4 3GHz SSE2使えばなら5GFLOPSぐらいは出ると思う。 いろいろライブラリがあるけど、liboctaveが一番使いやすいんじゃないの? Matlabちょこちょこいじって方向性が固まった段階でliboctave使って大規模 演算を実行するっていうのが効率高いと思うんだけど。 ところでWin環境で数値演算やってる奴なんているのかね?Unix環境と比べると シェルスクリプトが貧弱すぎてやっぱり使い物にならんな・・・いつまでたっても XPになってちょっとはましになったけど・・・
>>149 シェルスクリプトがないと,気軽にできないことが多いんですよね.
数値計算プログラムを動かすときだって,手間が減らせない.
計算機の奴隷ですね.
.BAT が難しい割に貧弱なせいでしょうか.
cygwin 無しでも快適なスクリプト環境が欲しいのです.
151 :
名無しさん@3周年 :03/12/15 01:55
pen4で5GFLOPSもでるの?スパコン1ノード並じゃない?
Pen4 3GHzなら理論性能は6GFLOPSだな SX-7は1CPUで8.8GFLOPS
gccの -msse2 -mfpmathだともひとつ速度が出ないね? これが十分機能すればblitzでもいいんだろうけど、Pen4つかうなら atlas使うのが正解だな。atlasはMatlabでも採用が決まったそうだけど 現行の6.5はatlasは使ってないのかな?
154 :
名無しさん@3周年 :03/12/16 03:09
理論性能はなかなか出ないでしょ。 俺の記憶だと、pentium4はせいぜい出ても1〜2GFLOPSだと思うが (ベンチの仕方にもよるかもね)。
HT対応のPen4 3GHzなら理論性能は12GFLOPSだけど 実際はメモリがボトルネックになるからそんなに出ない intel compiler+ATLASでLINPACKやったら頑張っても4.5Gぐらいかな スパコンはメモリがCPUと同じクロックだから理論性能に近い値が出る
156 :
名無しさん@3周年 :03/12/16 18:30
ニューメリカルレシピFortran90って必携ですか?
何気にintel conpiler(Fortran)使いにくくね?
>>157 どの辺がですか?
C まだファイルを 1 個 compile しただけなので,使い心地が分からず.
>>157 そりゃ、conpilerじゃ、使いにくいだろうね
スパコンで使ってる主記憶はPCと同等品だよ。調べてみ。NECの技報に載ってるよ。 スパコンが速いのはあくまでもベクトルプロセッサがあるから。 N回ループの次の計算で Σa(i)b(i) 乗算器N個、加算器N個用意すれば、組み合わせ回路だけで(1クロックで)、 演算可能。実際はデータフェッチに2Nクロックかかるんだけど・・・ 因みにベクトルプロセッサは別名マッチドフィルタともいうよ。 スカラプロセッサではそりゃ太刀打ちできない。
スパコンのシステムクロックって遅くなかったか? とても3GHzなんて値じゃなかったと思う。
ベクトル型スパコンはメモリアクセスも速いよ。
(部品はPCと同等品かもしれないけど)
メモリから単位データを読みだすのにNクロック必要だとすると、
ベクトル型スパコンは主記憶全体をN個のバンクという部分メモリに分けて持ってる。
実は、アドレス上連続している領域は、飛び飛びに違ったバンク内のメモリに
格納されてる。
そんで、各バンクは、メモリ読み出しに必要なNクロックのひとつずつズレた状態に
なっているように同期されてるの。
すると、配列データなどのアドレス上連続しているデータが、1データ/1クロックの
速さで読みだせ、そのままベクトルプロセッサに流しこめると。
(もっと詳しい人、添削たのむ)
ちょっと古いけど、これ読むとおもしろいかも
http://www.teu.ac.jp/kougi/tukamoto/ipsj/9909/ie9909.html
だからへっぽこコードだとバンクコンフリクト起こして 大変なことになるんだよなぁ
164 :
名無しさん@3周年 :03/12/21 21:28
ZERO DIVIDER
アセンブリ言語最強。
166 :
名無しさん@3周年 :03/12/23 18:15
名前: 染霧田趣味男 年齢: 45歳 一人称: ぼく 髪型: ツインテール 服装: ミニスカ白衣 職業: 万年助手 性格: 真面目で陰湿 好きな物: うなぎ 嫌いな物: サメ 趣味: サメ狩り、映画鑑賞
Fortranてまだ現役なんだな 漏れが昔FORTRAN77(「ちっち」と発音してた)使ってた頃は、東大のスーパーコンピュータ 使用料金がダイヤルQ2よりもタケーよ、みたいな事言ってた 最近のパソコンは安くて早いから、そっちでサクッとやった方が良いんじゃないの? 計算させる内容にもよるんだろうけど
168 :
名無しさん@3周年 :03/12/30 03:03
>>167 Fortran90, 95, 2000って規格も出たけど、なぜかまだF77で組んでる人がいっぱいいます。
なぜか大文字ONLYな人を良く見かけます。
スパコンを独占して一つのプログラムを動かすなら、そこらのパソコンより十分速いけど、
通常は使用出来るCPUの限度が決まってるんだよね。
結果、東大など日本で数本の指に入るスパコンなら、十分な演算能力が得られるけど、
それ以外の大学なら、最新のパソコン使った方が高速な事も多い。
パソコンもずいぶん安くなったし、理論で数値シミュレーションをする研究室では、
自前でPCクラスター組んでる所もよく見かけるようになった。
169 :
名無しさん@3周年 :03/12/31 09:44
格安のパソコンのフリーなフォートランコンパイラがFORTRAN77準拠 だからというのが理由としては大きいのです。もしもG77がG90に なれば、FORTRAN90への以降が急激に進むことでしょう。
171 :
名無しさん@3周年 :03/12/31 14:52
今でも g95 で Fortran 95 なコードをコンパイルできます.
何の実装がまだなんでしょうか?
間違った計算結果が出てくるような bug もあるのでしょうか.
>>1-170 なぜ Fortran 95 と書かずに 90 と書くのですか?
FORTRAN には 初代FORTRAN, FORTRAN66, FORTRAN77, Fortran90, F, Fortran95, Fortran2000 といったバリエーション(というか規格や仕様の違い)がある。
>>171 仕様がほぼ同じ
ソースファイルの拡張子はどちらも*.f90
F90≒F95
>>173 > F90≒F95
そうなんですか。それじゃあFortran2000は90/95と比べてどの辺が違うんでしょう?
176 :
名無しさん@3周年 :04/01/06 10:16
工学系のcpp屋なんでcppマンセーなんですが 結構、Fortran屋はcppを誤解しているかなぁって思います。 スパコン Fortran > cpp PCベースなら cpp > Fortran です。 なんでかって言うとスパコンにはFortranのすごい商用コンパイラがついていて PCではIntel-Cコンパイラが使えるからです。 (iccは経験的にgccの1.5〜2.0倍速いコードを吐きます) Fortranの方がベクタライズは得意ですが マルチスレッド(プロセス)同期はcppの方が得意ですしね。 ま、東大レベルのスパコンにアクセスできるんじゃなきゃ、 手元で気軽にテストできるPC環境でしこしこチューニングした方が速いコードが書けると思います。 チューニング用のソフトはPCの方が充実していますしね。 チューニングすれば結構簡単に10倍くらいは早くなりますので スパコンが有利なのはメモリが速いから キャッシュとかあまり気にしないでコードが書けるってトコかな 正直、Pen4*2PCを10台も並べればそこんじょらのスパコンよりよっぽど速くなります。 もちろんちょっと前にはやったSGIのロートル疑似スパコンなんかよりも速いですし、 で、cppはバグのあるコードを書きやすいって言いますが、 最近は可変配列(std::vector)もサポートされていますし 行列(boost::uBlas)もだいぶ整備されてきています ので昔ほどポインタを多用する必要はもうありません。 assertやdebug_newを使えば結構バグは自動的に発見できます。 あと、allocaも便利です。 最近のアルゴリズムは複雑なんで仮想関数は封印するにしても オブジェクト指向無しじゃそうそう、書けないと思うのですよ。
ようは 卒論生ならともかく、この道で食っていくつもりの 人間がcpp使いこなせないと言うのは恥ずかしいって言いたいんだがね。 別スレでcppけなしている奴がいるが無知と無能をさらけ出しすぎだ。 問題になるようなcppの欠点は現在はほとんど克服されているよ
オブジェクト指向マンセー
>>176 私自体はある程度CPPはできるのですが、過去のソフトウェアのメンテナンスやら速度面の都合でCで書いています。
CPPとCでの速度の差はほとんど無くなったと考えていいのでしょうか?
新しく興すソフトは便利さと可読性を考えるとCPPで書き起こしたいのですが・・・
大学なのでメンテナンスを引き継ぐ人がcppを理解できるかという問題もありますが(--;
コンパイルして走らせて、変に遅い所だけ条件分岐工夫して、って 程度で最速の8割ぐらいいけるならそれでイイのではないだろうか。
181 :
名無しさん@3周年 :04/01/06 21:15
フリーのfortranコンパイラーキボンヌの人が多いみたいだけど、 商用パッケージ使っている人たちはどんなのを使ってるんでしょうか。 自分の場合、今までにAbsoft,富士通、dec(compaq)、PGI(hpfコンパイラー) あとnecのスパコンなどいろいろ使ってみたけど、同一マシンで動かしてないので 計算性能とか最適化のされ具合いとか比較したことがないです。 使い勝手は、まあどれも同じようなもので日本メーカーのものが マニュアルやエラーメッセージが日本語なだけ楽かな、という程度。 でもgccよりはどれも当然速かった。
182 :
名無しさん@3周年 :04/01/07 00:42
>>181 使った事があるFortranコンパイラは、
・Intel(<-hp<-compaq<-DEC)
Windowsとx86環境のLinuxな人に多い
x86系、特にintel製のCPUへの最適化に優れる
アカデミック向けの価格も安いし、Windows環境なら最大勢力のヨカン
ちなみに、Linux版はフリーでも使えます
DECはなくなっちゃったけど、DECなしには現在のIT技術を語れないッス
・PGI
x86環境のLinux向け
AMDのx86互換CPUへの最適化も可能
昔から実行速度に定評がある
・Absoft
IDE付き
Mac, Windows, x86環境のLinuxなど、幅広い環境をサポート
あまり見かけないけど、Macで計算する人はこれを使ってるのでは?
でも、「M a c で シ ミ ュ レ ー シ ョ ン ?」
・Sun
OSがSolarisでCPUがSPARCなら、これ
PCというよりはスパコン向け
SPARC並列計算機でよく使われている
・g77
フリーだから、PCクラスターでも安くつく
cppのcに対して速度が劣ると考えられる点 ・仮想関数呼び出し 仮想関数呼び出しはinlineが難しいので ループ深部での使用は避けること ・デストラクタの仮想化 デストラクタを仮想化するとオブジェクトサイズにペナルティーを 食うのでcomplexやquaternionのような軽量クラスを仮想にしてはいけない。 (と言うか、小さいクラスでは仮想関数を一切使ってはいけない) ・オブジェクトの初期化 オブジェクトはメモリ上に構築されるので complexのようなレジスタに収まる 軽量オブジェクトをループ深部で生成破棄を繰り返すと ペナルティーになる(iccでは最適化できるがgccでは無理) ・std::vectorの初期化 オブジェクト配列をstd::vectorで生成すると かならず、デフォルトコンストラクタが走るので注意 ・std::vectorの割り当て std::vectorの割り当てはのろいnew, deleteを用いるので ループ深部ではあらかじめバッファを作成しておくこと uBLAS等のライブラリでも似たようなことはあるので注意 ・for_each<>, begin(), end() これらのstl推奨文法は最適化が難しいので 極力回避すること ようはbetter Cとして使う分には絶対cppの方が有利です。 また、デバッグ版では配列の範囲エラーはASSERTで拾うようにしましょう。 大概の行列ライブラリにはそういったオプションがあります。 std::vector::operator[]にASSERTを仕込んでもいいです。
>>183 > (と言うか、小さいクラスでは仮想関数を一切使ってはいけない)
間違い。小さいクラスでもポリモーフィックにすべきものはそうすべき。
complex や quaternion で仮想関数を使わないのは当然だが、
それはあくまで大量に(数メガ、時には数ギガ)使うことが予想される
データ型としての性質が強いから。
> オブジェクト配列をstd::vectorで生成すると
> かならず、デフォルトコンストラクタが走るので注意
間違い。初期化時にデフォルトオブジェクトを渡すと
コピーコンストラクタしか呼ばれない。
まぁ、C++ が速度に関して Fortran に負けるのは当然。
ただ、ホットスポット以外では速度なんて気にする必要はないし、
最初からチューンしまくったプログラムを作ってしまうと
デバッグや保守が難しくなるので、
そういう場面では C++ の方が有利。
>>182-185 ためになる情報Thx
昔BASICをやっていたのでF77程度ならすぐに習得できそうな気もするけど
コンパイラはうちの研究室の規模だとg77かな(^^;
今のところAlphaなのでCompaqのF90コンパイラ使えるけどOpteronになったら買わないと・・・。
RISCマシンのアセンブラは書く気になれないけどx86系ならアセンブラというても使えるw
科研費に受かっていることを祈ってMPIの勉強中o(*≧д≦)o"
187 :
名無しさん@3周年 :04/01/07 20:58
ほんとに
>>182-185 を読んだら C++ やらなきゃと思っちゃった.
仕様として C がきれいだから,なんて言ってた自分が痛ましいです.
C++ のガイドライン付きチュートリアルがあればいいんだけどなぁ.
Fortran 入門書にもガイドライン付きにしないといけませんよね.
アセンブリ言語でちまちま最適化しても、 コンパイラの最適化の方が速かったりすると鬱。
> コピーコンストラクタしか呼ばれない。 _| ̄|○ スピード上げるにはアセンブラどうこうよりも メモリの使い方に気をつけるのが一番ですよ ところで185よ。 cppがFortranに明示的に速度で負ける条件って なんか他に知っているかい?
入門書 Essential C++ ガイドライン Effective C++ と More Effective C++ パフォーマンスチューニング Efficient C++ 数値計算ではオブジェクト指向はあんまり気にしなくていいので まずはこれをどうぞ
>>189 複素数かな。
Fortran だと組み込み型だから最適化しやすい。
GCC だと拡張組み込み型の複素数を
ラップする形になってるけど、
クラスにして扱うが故に幾分不利。
C99 だと組み込み型を直接扱うことになるから
いいんだけども。
>191 うーむ、クラスだって言ったって std::complexはメンバ全部inlineだし 変な無駄な初期化をしない限りペナルティーは無いと思うのですが、 それでも、最適化で差が出るものですか? 確かにgccレベルの最適化じゃ差は出そうですが r**i がC++に無い問題も テンプレートで解決できますし
inline だろうがオブジェクトがメモリに必ず置かれるなら、 テンポラリオブジェクトが必要になる d = a * b * c; とかでは差が出そう。 全部 inline ならテンポラリオブジェクトも レジスタに置いてくれるように最適化されるのなら問題ないかも?
それは確かKAIが特許持っているから ライセンス受けているiccしか その最適化できないと言う話を聞いたことはあります。
95へぇ〜
196 :
名無しさん@3周年 :04/01/08 00:39
>>195 へぇ多すぎ(w
>>193 の式をVC7でP4最適化すると、std::complex<int>で
d = a*b*c;は40命令。その中に3回要らないmovが入ってる。
2回書き込み、1回読み込み。書き込みのうち1回は完全に捨て。
ヘェーヘェー。インテルコンパイラだとどうなんだろ。
197 :
名無しさん@3周年 :04/01/08 01:14
急報、 LINUXのANSI Cの標準関数である、 fminf, fmaxf, fmin, fmax, fminl, fmaxl が LINUXのcc あるいは gcc で -lm により数学関数ライブラリをくっつけて 実行ファイルを作ると、最大、最小の値が でたらめです。 fmin(2.2, 3.3) fmax(2.2, 3.3) の値などを出力してみれば分かります。 インテルのコンパイラ icc ではこのような問題はありません。 RedHat や Vine では確実におかしいです。 IA32, IA64, AMD-64 全ておかしいです。 おそらく libm.a が変なのでしょう。 追伸: IA32 では gcc , icc 共に、 long double は 12 バイトなのですが、 AMD-64では 16バイトになっているようです。これはバグではないけど、 煩わしい問題を将来起こしそうですね。
いい加減にfortranやめろや
>>190 Essential C++ は訳本がピアソンから出ているやつですか?
エッセンシャルが付くタイトルが多いですね.
Effective ... はアスキー,Efficient ... はピアソンですね.
// 大学の図書館には入門のやつだけ無い...
complex<int>でいったい何するのよ?
203 :
名無しさん@3周年 :04/01/09 09:42
数値計算ならFortran なぜなら累乗の計算に**が使えるから。 Cなんてかったるくてやってられません。
204 :
名無しさん@3周年 :04/01/10 12:00
>>203 このスレでは,
「C++ でも注意して使えば速度を落とすことなく開発を早くできる」
ということになっているようです.つまり,
C++ にすれば?
正直、Cを使うくらいならFortranでもかまわないと思う CとC++の違いは f77とf90以上だよ
206 :
名無しさん@3周年 :04/01/10 15:39
うむ。fortranは簡単だし。でも90がなければCかも
>206 c++も初心者にやさしいよ。
>>205 F90 は許せるが F77 は許せない。
構造体が無いのは気が狂う(改変とデバッグと保守が大変)。
ベクトル一つ扱うのにも氏ぬる>構造体がない。 とりあえず演算子多重定義マンセーしとく
211 :
名無しさん@3周年 :04/01/15 18:36
Windows使いですが、Linux入れないとF90のコンパイルできませんか? どうしてもF90使いたいんですけど。
>>211 コンパイラ買え。10万あればインテルからMKL付きで買える。
213 :
名無しさん@3周年 :04/01/16 03:37
10万なんて高すぎます。
214 :
名無しさん@3周年 :04/01/17 14:33
linuxで次のCプログラムは動作しますね(not CPP) #include <tgmath.h> main() { complex z=1+2i; printf("%f+%fi\n", __real__ z, __imag__ z); printf("%f+%fi\n", __real__ exp(z), __imag__ exp(z)); return 0; }
216 :
名無しさん@3周年 :04/01/17 16:06
>>214 linux で,と言われましても,
linux には数多くの C コンパイラがあるのです.
tgmath.h って何よ,と思ったら /usr/include にありました (w
しかも,
1.000000+2.000000i
-1.131204+2.471727i
と出ました.これって ISO 公認の C?
217 :
名無しさん@3周年 :04/01/17 21:46
> 211
cygwin から
cvs -q -z3 -d:pserver:
[email protected] :/cvs/gcc co -r tree-ssa-2002061
9-branch gcc
を実行してgcc-3.5のCVSツリーを取ってきてMakeすると動作するかな? gfortran.
218 :
名無しさん@3周年 :04/01/17 23:28
C99なんて使っている人いるんだね 年寄りには興味のないことだが
219 :
名無しさん@3周年 :04/01/18 01:58
C99 か… ただ、Matrix とかVertorについても X * Y + B とか書きたいとかなると結局クラスと演算子の多重定義が必要になってくる。 型に応じていっぱい関数書くのが面倒になればtemplateが必要になるし… Cの機能を拡張すると結局C++になってしまうんじゃないのかな? Cを改良しても結局C以上、C++未満にしかならないように思うんだけど? C++をもっと簡単にとか言い出すとCSになってしまいそうだし。 gccがCSをサポートしたら俺も使ってみたい。使ったことないからなぁ。
D という道も...。 まだまだ作成途上で実用したいとは思わんが、 そのうち...どうだろうねぇ...。
221 :
名無しさん@3周年 :04/01/18 13:34
>>221 またずいぶん古いネタをひっぱりだしてきたもんだな。
223 :
名無しさん@3周年 :04/01/20 02:19
そのネタ知らなかったけど。 >オブジェクト指向プログラミングは非直感的で、不合理で、効率が悪いということを見て取れます。 確かにそう思うわ。 一見よさげに見えるけど。 安心して使えるクラスライブラリをこしらえることはCで書きなぐることに比べたら5倍は時間が必要なように思う。 自分だけがわかって使ってる分にはいいかもしれないけど。人に提供するようなクラスはちょっと作る自信ないな。 大体、他の言語と比べて注意点が多すぎる罠。 ちょっと使わないと忘れちゃうし。Over 1000ページだろStroustrup本。
で、どこを立て読みすればいいの?
225 :
名無しさん@3周年 :04/01/20 07:16
226 :
名無しさん@3周年 :04/01/21 01:01
クラスライブラリと暮らすかということは、 アメリカに住むか、フランスに住むか、日本に住むかなどと同様に、 総じて文化的な問題に似ている。 同じ問題を解決するのに、まったく異なるクラスライブラリを前提として 作ったもの同士は、それぞれの主張を持っており、用意に統合や協調 出来ない要因を孕んでしまう。最後は力関係で決まることになろう。 武力による粉争の解決はこれを永久に放棄する、と決心してみたところで 粉争が解決しないだけではあるまいか? 戦国時代のように、どれかが 天下を統一しないうちは平和の状態は実現しないのかもしれない。
だんだん、プログラム書いたことの無い奴の発言が増えてきたな
>223 stlやboostはものすごく便利だと思うんですけど。 提供されるライブラリは使うだけ使っといて、それ以外(自分自身のコーディングスタイル)はbetter cとかじゃ駄目?
229 :
名無しさん@3周年 :04/01/22 03:24
STLってそんなに便利?俺がいいと思ったのはbitset クラスぐらいかな? リスト構造とかって昔からCいじってた奴は大概自分で作った雛形とか持ってるんだよね。 テンプレートがなかったCだと格納するデータ型の部分をエディタで直接書き直したりしてたかもしれないけど。 vector にしても valarray にしても別になくてもいいものをたくさんこさえてくれた感じ。 ただ、純粋なC文法では既にソース書いてないよ。拡張子は.cc
STL を使った方が、他の人が読みやすいというのはある。 あと、自分のクラスライブラリを持ってこなくても使えるし。
Cっていうのはハードウェアが見えたところが良かったんだけど、 C++はそれを隠蔽する方向なのが気に入らない。ハードウェアを無視しちゃまともな ソフトにならないでしょ?ハードを動かす手順がソフトなのに。 でも、 Matrix<complex<double>> X, Y, Z Z = X * X +Y; って書けるのは大好きだったりする。ダイナミックキャストも遊びで 使ってる分には面白い。
本当に C++ を使ってるのかと小一時間...。 C# ならそういうところもあるけどさ。
>ハードウェアを無視しちゃ 何のためのBLAS,やLAPACKなのかと。 今ならATLASみたいなのだってあるし…… それに、c++が隠蔽するんじゃなくて、OOPが隠蔽するんでしょ。 実装部分では性能重視にいけるのが純粋なOOPLではないc++の強み。 でも二重ディスパッチが用意されてないのでちょっと寂しい……
>本当に C++ を使ってるのかと小一時間...。 何言ってる?ダイナミックキャストのことか?コンパイル時点で 決まってしまうアップキャストなんて、所詮はif で条件判断書くのと同じだろ? if分で条件判断するよりseich case使いましょってのと大差ないだろうが。 しょせん人間の見た目の違いだけ。 実行速度求めるならベクタテーブル作るべきだし、実行時に型を決めて動作する なんてのはCではなかなか実現しにくいからおもちゃとして動かすのは面白いって 言ってんだよ。 >何のためのBLAS,やLAPACKなのかと。 >今ならATLASみたいなのだってあるし…… ATLASは単にBLASからSSEコールするだけの仕組みでしょ? BLASやLAPACKなんてFORTRANのライブラリであって、FORTRANから ハードウェアを見通せるなんて尋常じゃないな。FORTRANのコード見て アセンブリコード見えるか?俺にはCの方がよっぽどアセンブラコードを イメージできる。 例えばもともと計算機がもってるデータ型 char. int, double をできるだけ隠蔽しようとするポリシーがC++にはあるってこと。 OOPじゃないよ。
>>233 ストラウストラップのP949 L2あたり見てみ。
組み込み配列は出来るだけ避けて、STL使えってのがC++の方向性。
俺は、数値計算やるうえでSTLの必要性は全く感じてないし、配列の要素アクセスは
出来る限りポインタのインクリメント/デクリメントでやらなきゃ気持ち悪い。
>>234 >if分で条件判断するよりseich case使いましょ
フラグによる分岐と状態変数による遷移とでは意味が違うのですが。
そこを見た目の違いだけと言ってしまうセンスは頂けない気がします。
>FORTRANのコード見てアセンブリコード見えるか?
大体分かると思うのですが?メモリのアロケーションとかもちゃんとしてるし。
Cみたいに演算順序がテキトーなのよりずっとましだと思うのですが?
コンパイラオプション付けりゃええじゃんと言われればそれまでだけど。
でも私も
>>234 さんのようにC++はおもちゃ感覚でしか使ってないんですけどね(汗
ただ数値計算においても規模と環境によってはSTLの必要性が十分あると思います。
>>236 > ただ数値計算においても規模と環境によってはSTLの必要性が十分あると思います。
ちなみに、
>>236 さんはどのような場合に必要性があるとお考えでしょうか?
私はやっつけで書くときにSTLをよく使っています。頭で考えたデータ構造がそのまま使えることが多いので。
で、規模がでかくなってくると計算時間との兼ね合いで結局Fortranで書いてもC/C++で書いてもたいしてかわらん記述になることが多いです。
>>234 >本当に C++ を使ってるのかと小一時間...。
ハードの隠蔽の話だよ。
ハードを叩く必要があれば別に C++ だろうと直接叩ける。
直接叩かずハードを隠蔽したクラスを使うとか言っても、
そのクラスを作るときにはハードを直接叩くし、
C でハードを隠蔽したライブラリを使うのと大差ない。
仮想関数をハード的に呼び出すのはちょい難しいけど、
メンバ変数へのアクセスや仮想でないメンバ関数の呼び出し程度なら
簡単にできることも多い。
速度を最高にチューンするのが目的としても、
それなりの組み方ができる。
C++ は better C としても使えるのだから。
あと、必要のない場面でそういう組み方をするのは無駄。
最適化の性能まで要求するのなら、そこでだけ C や Fortran を使って、
速度の必要のないところは C++ を使えばいい。
> コンパイル時点で決まってしまうアップキャストなんて、
> 所詮はif で条件判断書くのと同じだろ?
確かに条件判定書くのと処理的には同じだが、
変更を加えたり拡張したりした際に
そのメソッドを使う側で一切の変更を必要としないというのが
どれほど重要なことか分かってるのだろうか。
実行速度を求めるのではなく、
安全性、保守性、拡張性を求めているのだ。
> おもちゃとして動かすのは面白いって言ってんだよ。
まぁ、おもちゃとしては面白いけどね。>ダウンキャスト
ただ、ダウンキャストが必要なコードは可能な限り避けるよう
心がけた方が安全なコードが書ける。
>STLの必要性 ・数値計算を実行したいが数値計算処理だけが目的ではない場面 ・これから他人の手が入ることが想像され、そして高速化について辛辣でない場面 ・教育の場面 大体こんなところではないでしょうか? 要は保守性と性能とのトレードになると思うのですが、 研究機関だと材料系などでは二つ目の状況が多発してると思います。 (うちの大学だけかもしれません。その場合はすいません。 処理部分は数分から数十分程度なので、それよりもデータのフォーマットや管理が大切になります。 必然的に安心して手軽に実装したいわけです。 学生も二三年周期で変わりますし、可読性は重要です。 こういう場面では優秀な人がポインタ使って高速なコード書いても、 部分的に処理を変更する際など大変な労力が生まれます。
あまり考えずに書いてしまいましたが、 "ポインタ使って高速なコード書く云々"ってアレな表現ですね。 けど大体トラブルが発生するのはその辺りで、 関係ない人(私含む)がヘルプに走る事態になるので、 そのうっぷんがこういう表現を生み出す要因だったりします(w
234の眼前でおもむろに「部分最適化」と呟いたら顔真っ赤にして怒り出しそう
>最適化の性能まで要求するのなら、そこでだけ C や Fortran を使って、 >速度の必要のないところは C++ を使えばいい。 実際これをやろうとしてもなかなかできないだろ? friend 関数作って中で他言語のサブルーチンコールするか、 private メンバ使わないようにするとかだろ? 俺は実際、liboctave 使うことはあっても、FORTRANライブラリのblasを Cから直接コールしたことなんかないんだけど、 FORTRANサブルーチンっていうのはCの関数とは引数並びが逆順になるんじゃないの? >そのメソッドを使う側で一切の変更を必要としないというのが >どれほど重要なことか分かってるのだろうか。 表面的にはスマートな拡張とか再利用とかいうのが理想であっても、 実情はそうじゃないことが多いだろ? 逆に言うと、変更したことがソースを見てもわからない-> 結局バグの温床になるってことが多いような気がする。 ストラウストラップの96年のインタビューがジョークなのか本気なのかも一つ よくわからないけど、コードの再利用っていうのを続けていくとどっかで、もう わけがわからなくなって結局リセットってならない?逆に言えばそういう作業が あるから飯のネタになるんだろうけどね。
> 実際これをやろうとしてもなかなかできないだろ? やってるけど? 行列クラス作って、 対角化とか特異値分解とかでは LAPACK のルーチン呼んでる。 friend 関数やら private メンバやらがどう必要になるのかは理解できない。 > FORTRANサブルーチンっていうのはCの関数とは引数並びが逆順になるんじゃないの? 厳密に言えばコンパイラ依存なんだろうけど、実際には逆順になることはないだろう。 両方ともプロトタイプを必要としない言語だから(C では限定的に)、 両方とも可変長引数の場合と同じ順番で引数を渡す必要がある筈。 実際、逆になってるのは見たことないしね。 多次元配列の添え字は逆順だけどな。 > コードの再利用っていうのを続けていくとどっかで、 > もうわけがわからなくなって結局リセットってならない? 検証範囲が限られるので、むしろチェックは楽。 単体テストもできるし。 再利用しなかったら、全部検証しなきゃいけなくなる。 死ぬ。
>private メンバ使わないようにするとかだろ? こうしないとprivateメンバにアクセスできないからって意味。最適化するには こういうメンバにアクセスする必要があるだろうから。 ところで、研究用にC++使うのって実際どのくらい効率いいのかかなり疑ってるんだけどね? クラス使うにはそれなりの分析と設計が必要だけど、海のものとも山のものともわからない 研究用のコードだとそれが障害になってない?Cだとすぐに書きなぐれるところをC++つかうとクラスいじりに あーだこーだ余計な時間ばっかり費やしているような気がしてる。ストラウスとラップのインタビュー読んで、 自分が懐疑的に思ってたことがほとんど書かれててので思いっきり納得してしまったんだけどね。
>厳密に言えばコンパイラ依存なんだろうけど、実際には逆順になることはないだろう。 まぁ実際やってるんだから間違いないだろうね。前にFORTRANライブラリコールの手順を説明した サイトがあったのでそれ読んで嫌になってやめた。 >多次元配列の添え字は逆順だけどな。 これもあきらめた大きな理由。 >対角化とか特異値分解とかでは LAPACK のルーチン呼んでる。 対角化、LU/UDあたりだけなら直截Cで組んでも知れてるよ。 >再利用しなかったら、全部検証しなきゃいけなくなる。 いやそういう意味じゃなくて、新たなクラス追加してアップキャストのお世話に なる場面ってそんなにある?数値計算ならなおさら。
> こうしないとprivateメンバにアクセスできないからって意味。 何となく分かった。 確かに場合によっちゃ必要かな。 > 研究用のコードだとそれが障害になってない? なってない。 複数の手法を試してみたいときにポリモーフィズムが便利だし、 書きなぐりたければ better C として使えばいい。 C より便利な標準ライブラリも多いし。 どれだけ真面目に設計するかは時間とのトレードオフで決める。 どの言語で組んでも設計まずけりゃ つまるのは同じ。 まぁ、その言語に慣れてないとまずい設計しやすいだろうけどね。
> いやそういう意味じゃなくて、新たなクラス追加してアップキャストのお世話に > なる場面ってそんなにある?数値計算ならなおさら。 継承が必要じゃないなら使わなければいい。 まぁ、そのときはダウンキャストも必要ないだろうけど。 継承は、それが必要になるから使うのであって、 OOP 言語を使ってるからって無理矢理使うものではない。 例えば四元数クラスは継承を必要としないだろうけど (三次元ベクトルクラスを内包はするかもしれないけど)、 継承してないから存在意義がないってことはないでしょ? 構造体でもいいとか言おうものなら、 すぐさまアクセス制限とか演算子オーバーロードとかどうするよ、と反論するだろう。 あと、継承を使う場面はある。 数値計算それ自体にもそれなりに使ってるし、 そのプログラムを利用するためのインターフェイス部分ではもっと使う。 > 対角化、LU/UDあたりだけなら直截Cで組んでも知れてるよ。 数値誤差の軽減を考えると意外と面倒い。 それに、車輪の再発明はタルい。
使いこなせる自信がない言語は 本番では使わないのが無難ダ。
>複数の手法を試してみたいときにポリモーフィズムが便利だし、 ホントに便利か?新たなクラスを起こすだけで大変だし。 一つのクラス起こすだけで本質的じゃない関数をいっぱい作らなきゃならん。 コンパイラオプションの#ifdef 使った方がよっぽど便利だろ? 構 >造体でもいいとか言おうものなら、 >すぐさまアクセス制限とか演算子オーバーロードとかどうするよ、と反論するだろう。 いや、書きなぐり、実験にはprivateが滅茶苦茶邪魔だろ?マジで俺のコードからprivate 指定を無くしてしまおうかと思ってる。これが無駄作業の第一要因だとつくづく思うよ。 MSの方は結局、生産と保守効率考えてあまり望ましいと思わなかったからC#用意したんだろ? Sunとのからみももちろんあるだろうけど。 まぁ俺のレスにコメントするより、ストラウストラップのインタビューみてどうよ。 俺はこれはかなり同意できる。
> ホントに便利か?新たなクラスを起こすだけで大変だし。 別に大変じゃない。書きなぐるなら、コピペしてちょっと変えるだけでいいし。 > 一つのクラス起こすだけで本質的じゃない関数をいっぱい作らなきゃならん。 そんなにいっぱいは作る必要はないと思うけど。 1つのクラスに何でも詰め込みすぎてない? でも、C# みたいにプロパティが欲しいときはあるね。 > コンパイラオプションの#ifdef 使った方がよっぽど便利だろ? 手法切り替えるたびに毎回コンパイルするのは苦痛以外の何者でもない。 コマンドラインやインプットファイルで切り替えられるようにするのがスマート。 コマンドラインの解析も、コマンドライン解析クラスを作ってるので楽チン。 > いや、書きなぐり、実験にはprivateが滅茶苦茶邪魔だろ? あんたのコードは全部書きなぐりなのか? 何で書きなぐりのときしか考えないのか理解できん。 あと、場合によっては C++ 以外の言語(例えば Ruby とか)も使うね。 ケースバイケースで言語や組み方を変えれば何も問題ない。 > マジで俺のコードから private 指定を無くしてしまおうかと思ってる。 そんなコードは保守したくないが、 デフォルトで public にしたいのなら class じゃなくて struct を使えばいい。 > MSの方は結局、生産と保守効率考えてあまり望ましいと思わなかったからC#用意したんだろ? よりオブジェクト指向が進んだ、ハードも叩きにくい C# は あんたにとってはむしろ悪なんじゃないのか? 俺は C++ より C# の方が文法的に好きだけど、そりゃ後発言語だから当然やね。 ver 2.0 になって generic とイテレータが入ればかなり満足。 ネイティヴコンパイラでないから、速度が必要なやつには使えないけど。 > まぁ俺のレスにコメントするより、ストラウストラップのインタビューみてどうよ。 ネタにマジレスしても仕方ないでしょが...。まぁ、C++ に対する不満は沢山あるけどね。
251 :
名無しさん@3周年 :04/01/23 14:24
>数値誤差の軽減を考えると意外と面倒い。 それに、車輪の再発明はタルい。 車輪である最も重要な部分を自分じゃ工夫も出来ず。末端のインターフェース実装だけのプログラム遊びやっただけで卒論をでっち上げたと正直に言え。 日本の将来も暗いねぇ。
車輪の再発明って言葉知らないの?
Bless you !
254 :
名無しさん@3周年 :04/01/23 18:31
数値計算を全くやったことがなく、これから初めて取り組むって人に 最適な言語ってやっぱりフォートラン? とっつきやすさとか、将来性とかも含めての話だけど。
CとかC++とかでいいんじゃねーの
>数値計算を全くやったことがなく、これから初めて取り組むって人に fortarnは間違いなく最悪の選択。 こんなものは過去のしがらみにとらわれた老人達の為に残されているだけだからな
たいぽ_| ̄|〇
Fortranは最悪の選択なんすか?! 科学技術計算といえばfortranって思いこんでたんですが。。 Fortran90でもオススメできないですか? Cはともかく、C++は入門書をちょっとみたら凄く難しそうでした。
Cの方が辛いと思うが ああ、複素数が標準になったんだっけ?
科学技術計算ならPrologが最高だ。
時代はまさにVBだろ
Haskell だろ?
C やってたら Fortran は鼻糞ほじりながらでも覚えられるので、 C やりつつ、他の人のソース読むためにでも Fortran を覚えるのがええんでない?
まあ漏れは今まさに鼻糞ほじっている訳だが(苦笑
>数値計算を全くやったことがなく、これから初めて取り組むって人に Javaとかでプログラムの基礎を勉強して なれたらC++に移行 正直、Fortranは化石 万が一数値計算で一生食っていくような身分にでもならない限り 使う機会はやってこない また、Fortran使う機会が来ても他の言語を知っていれば 1週間でマスターできる。
266 :
名無しさん@3周年 :04/01/24 02:21
>>265 しかし、研究室単位で全員フォートランということも珍しくないからなぁ・・
まあ教官がフォートランしか知らないからって理由が大きいんだろうけど。
物理の理論系では大半がフォートランだね。
あぼーん
>266 そういうのは出戻りの若い助手などが積極的に研究室を変えていかないとなぁ 講義・演習だって今時はc++/Javaとか数値計算関係ならmatlabみたいなのに移ってるぽだし ウチも研究室入りしたらfortranをやることになって大量のcommon文と同じく大量かつ適当な行番号を 振られたdoループの山に泣いた。
common 無かったら無かったで、 今度は引数が肥大するんだよなぁ。 とにかく FORTRAN は死滅すべし、と。 Fortran なら許せるが。
fortranってプログラムを構造化したときに、サブルーチン呼び出し時のオーバーヘッドってどうなるの? コンパイラが最適化してくれるの?c++みたいなinlineキーワードが処理系依存か何かであるのかな?
Javaの講義ねぇ?どうせ時代に媚びるのが好きなしょーもない大学だろ? あんなもんを大学の講義に取り入れるなんて。学校のレベルがわかるねぇ。 matlab にしても単なるblasのwrapperだろうが。
うちの大学は文系の学部でrubyの講義をやって 理学部ではFortranかCの選択だぞ。 入門用の講義ならrubyの方がずっといいと思う。
273 :
名無しさん@3周年 :04/01/25 00:22
COMMONが嫌なら,MODULEを使えばいいんだよ. FORTRAN90を勉強してね.
274 :
名無しさん@3周年 :04/01/25 20:59
日本人拉致事件についての川口外相の演説に対し、昨年9月24日の国連総会で北朝鮮代表は、「日本は
朝鮮半島占領時代に840万人を強制連行し、筆舌に尽くしがたい被害を与えた。たった数人の拉致被害者の
死とは比べものにならない」と反論した。拉致という犯罪を、ありもしない「強制連行」で帳消しにしようという
たくらみである。
ところが、最近になって、この北朝鮮の宣伝に呼応するかのような動きが日本国内に現れた。驚くなかれ、
大学入試センター試験の問題としてである。1月17日に行なわれた世界史の試験で、「日本統治下の朝鮮」
に関連して次の中から正しいものを一つだけ選ばせる問題(第一問の問5)が出題された。
〈@朝鮮総督府が置かれ、初代総督として伊藤博文が就任した A朝鮮は、日本が明治維新以降初めて獲得
した海外領土であった B日本による併合と同時に、創始改名が実施されたC第二次世界大戦中、日本への
強制連行が行われた〉
正解はCとされる。しかし、これは極めて不公正で不適切な問題である。まず、@からCまでの文中に登場
する用語のうち、「朝鮮総督府」や「創始改名」は、当時もその言葉が使われており歴史的事実に属するが、
「強制連行」は次元が異なる。「強制連行」は政治的な糾弾の機能を担う造語であり、その語の使用者による
歴史の解釈を示す用語であって、歴史の事実を指し示す言葉ではない。
日本政府は徴兵による戦時中の労働力不足を補うため、「国民徴用令」によって工場などに労働力を動員
したが、朝鮮半島についても、1944年9月から徴用が実施された。当時は朝鮮半島の人々も日本人であり、
徴用は日本人に平等に課せられた、国家による合法的な行為であった。だから、Cを「第二次世界大戦中、
日本本土へ徴用された」とすれば、それは歴史的事実を述べたものであり、設問として何の問題もない。
では、「強制連行」という言葉はいつから使われたのか。鄭大均氏によれば、1965年に出版された朴慶植著
『朝鮮人強制連行の記録』の影響である(『中央公論』2002年12月号)。しかし、「徴用」を「強制連行」
とするのは不当な言い換えであり、虚構である。
http://nitiroku.hp.infoseek.co.jp/cgi-bin/i-nikki.cgi
初めてこのスレ覗いたけど面白い議論してるね。 OOと数値計算の最適化の融合ってあたりは漏れもすごい興味ある。 現在のところはC++がこれを高いレベルで達成できる言語だと思ってるけど。 まぁ、PCでちまちまやってる人間だからベクトライズのベの字も知らないんだけどねw OOに従ってやってると、最初は「こんなんで開発効率上がってるのか?」って 疑問に思ってたけど、まぁ慣れてくるとそれなりにOOの意義ってモノが見えてくる。 そこまでに時間がかかりすぎるのが難点だけど。 OOが本質的に効いてくるのはバグフィックス・保守・改良・試験・再利用といった どちらかといえば開発の影の部分だからなおさら意義が見えにくい。 しかし、こういうのこそ長期的に利用・改良・試験され、信頼性が要求される 数値計算に必要なものだと漏れは思っているんだけどね。
それからOOによるカプセル化と(データを直接取り扱うという意味で) 低レベルな最適化がバッティングするのは漏れもよく経験するけど、 そういうときは漏れはデータを直接取り扱うfriendな関数オブジェクトなりを作って 回避することが多いな。もう少しスマートなやり方があったら教えて( ゚д゚)ホスィ… STLに関しては、確かに詰まった最適化を求めようとするには不満だけど、 それならより最適な解を自分で作ってしまえば良い訳で、そういうときにこそ STL自体ではなくその枠組みであるgeneric programmingが生きてくると思うよ。 STLの要求定義に合わせた形で自分のを作っておけば、部品の取替えが簡単にできてしまうからね。 再利用について、より効率的にやろうとするにはやはりある程度まとまった人数、 例えば研究室なら研究室単位で意識改革をやる必要があるだろうね。 自分があるソースを再利用したいと思う条件として、 「他の誰かがそのコードを再利用した経験がある」というのを、 どこぞのハゲオヤジが挙げてたよ。まずは一人でも良いから 自分のコードを使ってもらうってところからはじめないとな。 漏れも今度研究室で呼びかけてみるかなぁ・・・
とまぁ、つらつら書いたわけだけど・・・ 本体のコーディングが労力1だとしたときに、 要求定義、クラス機能・関係の洗い出し、テストケース書き出し、クラス書き起こしと 予備段階で労力10は費やしてたりして、 これって本当に効率的なのかやっぱり疑問は残るわなw
クラスを使わないときと比較しなきゃ。
279 :
名無しさん@3周年 :04/01/26 21:09
ぬぁんだ拉致事件に興味持ってるんじゃないのくぁ。
280 :
名無しさん@3周年 :04/01/26 21:29
数値計算でなくてもOOがホントに生産効率が高いかどうか疑問が残るよ。
設計が下手な人に,無難な解を与えてくれるのが STL. これからは Lisp が数値計算界のメジャーになります.( ̄ー ̄)ニヤリッ 型指定もできるよ.
>280 エンドユーザーとしては便利だけど。
> 数値計算でなくてもOOがホントに生産効率が高いかどうか疑問が残るよ。 こういう人っていまだにいるんだよねぇ 素人じゃないんだからさぁ
普通だったら、cにしがみつく香具師を 「fortranがあれば何でも出来ますが何か?」 とか二言目には言う化石になぞらえて揶揄するところなのだが、 この板では生きてる化石がホントに存在するからのう……
>>284 このスレ的には、数値計算に関してはFortranがCに劣っているとは言えないという
見解で一致してるのかと思ってましたが。
で、FORTRAN77 は糞、と。
287 :
名無しさん@3周年 :04/01/27 07:29
ひょいと思い出してしまいました。 c2f ってのがありましたね. C -> F90 へのソーストランスレータ。 vector processorへの移植したいという学生に紹介した覚えが…
本物のプログラマは Fortran を使う。
289 :
名無しさん@3周年 :04/01/27 08:29
そもそも、CでもFortranでも、自分自身で1から書くのであれば、 自分の使い勝手のいい方を使えばいい。(数値計算は少しのミスが 命取りになる、デバッグできないなら意味がない) しかし、Fortranは古臭いからCを使いますと、宣言して一人いきまいている 学生ほど、卒論・修論の提出間際になってプログラミングは済みましたが、 うまく動きません?どうしてでしょう?なんで馬鹿なことを言ってくる。 人のもの当てにするのなら、文句を言わずにはじめから両方覚えろ。
本当にそういう人が多いのか ちゃんと統計とったことがあるのだろうか。 また、そういう人が Fortran を使った場合にも 本当にちゃんと動くプログラムを提出できるのだろうか。
>>290 フランス人の中で、私は日本人だし、日本語の方が上手いので、日本語で
論文を書きますといって、すべて日本語で書いて、なにか上手くいきませんから
内容をチェックしてくださいといっても、しらんといわれるだけ。
多少下手でもフランス語で書いとけば周りがサポートしてくれるから、救われる
可能性が高いでしょう。
Fortranの遺物は依然大きいということ。ただし、すべて自分でやるなら、
問題なし。
292 :
名無しさん@3周年 :04/01/27 10:28
F2CでフォートランからCにかえちぇえばいいわけで、フォートランだけでも十分な気はしなくもない。
何万回も呼び出す関数はstaticにしないと呼び出すたびにメモリ確保しようとしてオーバヘッドできるじゃない? シングルスレッドだとstaticで解決なんだけどマルチスレッド(2CPUで並列)したいときにstaticだとメモリが関数1つ分 確保されてるだけなのでメモリアクセスの排他制御とかがややこしくなるよね。 だから関数と確保するメモリとかをclassでまとめてしまってそのクラスを2つ確保してスレッド1つにオブジェクト1つ というようにしようとしてるんだけどもっとマシな解決方法ないかな(^^; (MPIで1ノードに2プロセス走らせてもいいけど通信のオーバヘッドを減らしたいのでスレッドを使いたい)
>>293 私なら,スレッドもオブジェクトにしてしまいますね.
スタック上でのメモリ確保自体は非常にオーバーヘッドが小さいので 数万回程度では問題にならないと思われ。
ちゃんと時間計ってみてる? そんな最終手段なところよりも、 先に最適化するところが別にあるんでないケ?
297 :
名無しさん@3周年 :04/01/28 18:30
>データを直接取り扱うfriendな関数オブジェクトなりを作って >回避することが多いな。もう少しスマートなやり方があったら教えて( ゚д゚)ホスィ… 例えばMatrixクラスを作って、数値演算しようとして、 どうしても元のMatrixクラスのプライベートメンバである配列データそのものをいじりたい時、 どうしてもっていうのはやっぱり速度。 せっかく完成したと思ってるMatrixクラスに エディタで friend XXX と追記するのが滅茶苦茶抵抗があるよな。なんとかもっとスマートなやり方ないのか俺も知りたいよ。
>>297 別にデータの先頭のアドレスさえ分かれば
いくらでも配列そのものをいじれるけどな。
どうせ &m[0][0] みたいにすれば取得できるんだし、
データの先頭アドレスを返すメソッド作りゃぁええやろ。
299 :
名無しさん@3周年 :04/01/28 22:16
>>&m[0][0] こんなアドレンシッグだと乗算実行する羽目になるだろうが?そんなこともわからんかね? 勉強しなおして来い。
300 :
名無しさん@3周年 :04/01/28 22:40
本人は科学技術計算してるつもりでも、単なるC++で遊んでることに気がつかない奴が居るんだよ。 どういうアセンブリコードに展開されるか全く理解してない典型だな。
そんなもんインライン+最適化でどうにでもなる。
一度取得すればいいだけなので大抵の場合は無視できるオーバーヘッドだし、 何よりデータの先頭アドレスを返すメソッド作ればどうにでもなることだ。 そもそもここで言いたかったのは 元々隠蔽されてないデータだから、 取得できる関数を作ったところで問題ないよということだ。 相手の言いたいことの真意も汲めないのかよ、全く...。
>>299 コンパイラによって最適化された実行コードでも、この演算は乗算を使うんですか?
コンパイラのソースも読んだことがない厨ですみません. 科学技術計算をやるには,アセンブリコードまで意識しないと困る場面が 多々あるということなのでしょうか. 自分が使用するコンパイラが出すアセンブリコードの性質くらいは 熟知していないと,本物にはなれないのですね. うーーん.やることがいっぱい _| ̄|○
301が正解 get(i,j) 経由でも速度は落ちない。 ちゃんと両バージョンの速度を測ってから出直しなさい 302がもっと正解 密Matrixの実データを隠蔽することにはまったく意味が無い オブジェクト指向本の説明を鵜呑みにしないこと こんなマヌケがいるからオブジェクト導入すると速度が落ちるとか 勘違いする奴が増えるんだよ
漏れが勘違いしてるのかもしれないけど、299が言いたいのは double& get(size_t i, size_t j){ return val[N * i + j];} で、乗算が必要になってしまうということじゃないの?(こういうインタフェイスを提供する以上は) それよりは、例えば列(行?)方向のiterationでは for(i = j; i < N*N; i += N){ m.val[i] = ...; } というように、データを(1次元の配列で)直接見せた方が 圧倒的に速いコードが組めるということではないの?
307 :
名無しさん@3周年 :04/01/29 12:41
>>一度取得すればいいだけなので大抵の場合は無視できるオーバーヘッドだし、
いなぁ学生は、"大抵の場合"はだるいコード書いてもそれで許されて。
>>305 お前ホントに痛いな!頭の中にしかない2次元配列を物理メモリ上にマッピングして
いきなりdata[i][j]というアドレッシングで乗算を必要としないコンパイラがあるなら紹介してみろ。
行列一つずつの要素にアクセスするたびに乗算を必要とするか否かでどれだけ速度が違って
くるか考えたことあるのか?
糞ガキは出直して来い。
>>306 正解
308 :
名無しさん@3周年 :04/01/29 12:51
>>306 強いていうなら行方向の連続アクセスは極力避けて列方向アクセスに出来るように並べ替えておくことだな。
可能であればの話。
pval = val+j;
for(i=j; i < N*N; i++){
*pval++ =... ;
}
ループカウンタをインデックスとせず、ポインタインクリメントとするのが最も速いな。データ移動と同時に
インクリメント計算できるCPUも多いからな。
309 :
名無しさん@3周年 :04/01/29 13:04
for()
の部分は
for( i = N*N-j; i>0; i--)
としておけば完璧。CPUは0と比較する命令は持ってる。
ただこれはオプティマイザが最適化してくれる。
>>305 >オブジェクト導入すると速度が落ちるとか
>勘違いする奴が増えるんだよ
必ず速度は落ちる。
>307-309 まぁ,私も学部のときに行列積の最適化の課題で298と同じことをして 最適化云々以前の問題だったという苦い経験しましたからねぇw 列だけを複数回舐めるような演算では,あらかじめ空間を転置したほうが 恐らく良いでしょうね.そのほうが他の最適化も効くでしょうし. >必ず速度は落ちる さすがに「必ず」ってのには賛同しかねますけどね.まぁ,ほとんどの場合落ちますけど. 速度低下もそうですが,上のように真の操作とそのコストが隠蔽されるために, まったく意図しないオーバーヘッドが発生するってことが 数値計算におけるオブジェクト指向の大きな弊害だと感じますね.
> 307 get(i,j)を書いても不要な乗算は最適化される。 もちろん、コンパイラがタコな場合は話が別。 307のコードが行列にアクセスするパターンに特徴があって うまく最適化してくれないんなら話は別だが それでもたいがいget_row_slice(i)さえ書いておけばどうにかなる。 iccの出力結果、ちゃんとmul命令無しでコンパイルされる。 ;;; for (i=0; i<SIZE; ++i) ;;; for (j=0; j<SIZE; ++j) ;;; {
;;; dat[i][j] = dat[i][j]+1.0; fld QWORD PTR _2il0floatpacket.1 ;26.16 xor ecx, ecx ;26.16 ; LOE ecx ebp esi edi f5 .B1.6: ; Preds .B1.8 .B1.5 mov eax, ecx ;24.8 lea edx, DWORD PTR [ecxM ;24.8 ; LOE eax edx ecx ebp esi edi f5 .B1.7: ; Preds .B1.7 .B1.6 jmp .L1 ; Prob 0% ; ALIGN 4 .L2: ; fstp QWORD PTR [esp+eax-8] ; .L1: ; fld QWORD PTR [esp+eax] ;26.16 fadd st, st(1) ;26.16 fstp QWORD PTR [esp+eax] ;26.4 fld QWORD PTR [esp+eax+8] ;26.16 fadd st, st(1) ;26.16 fstp QWORD PTR [esp+eax+8] ;26.4 fld QWORD PTR [esp+eax+16] ;26.16
fadd st, st(1) ;26.16 fstp QWORD PTR [esp+eax+16] ;26.4 fld QWORD PTR [esp+eax+24] ;26.16 fadd st, st(1) ;26.16 add eax, 32 ;24.23 cmp edx, eax ;24.3 jg .L2 ; Prob 99% ;24.3 fstp QWORD PTR [espャy8] ;26.4 ; LOE eax edx ecx ebp esi edi f5 .B1.8: ; Preds .B1.7 add ecx, 800 ;23.22 cmp ecx, 80000 ;23.2 jl .B1.6 ; Prob 99% ;23.2 ; LOE ecx ebp esi edi f5 .B1.9: ; Preds .B1.8 fstp st(0) ; ;;; }
314 :
名無しさん@3周年 :04/01/29 16:27
double *p, data[SIZE*SIZE]; p = data; for(i = SIZE-1; i >=0; i--){ for(j =SIZE-1; j >=0 j--){ *p = *p + 1.0; p++; } } と比較すれば?
315 :
名無しさん@3周年 :04/01/29 16:31
gcc結果 ループの部分は5命令 __Z4funcv: pushl%ebp fldz fld1 fxch%st(1) movl%esp, %ebp subl$808, %esp leal-808(%ebp), %eax fstpl-808(%ebp) L10: fldl(%eax) fadd%st(1), %st fstpl(%eax) addl$8, %eax jmpL10
316 :
名無しさん@3周年 :04/01/29 16:33
void func() { double data[10][10];q data[0][0] = 0.; for(unsigned i = 0; i < 10; i++){ for(unsigned j = 0; j < 10; j++){ data[j][i] += 1.0; } } }
317 :
名無しさん@3周年 :04/01/29 16:39
>>316 のgcc結果 -O2 -march=pentium4
__Z4funcv:
pushl %ebp
fldz
xorl %ecx, %ecx
movl %esp, %ebp
fld1
fxch %st(1)
subl $808, %esp
fstpl -808(%ebp)
L11:
xorl%edx, %edx
movl%ecx, %eax
L10:
fldl-808(%ebp,%eax,8)
addl$1, %edx
fadd%st(1), %st
fstpl-808(%ebp,%eax,8)
addl$10, %eax
cmpl$9, %edx
jbeL10
addl$1, %ecx
cmpl$9, %ecx
jbeL11
fstp%st(0)
leave
ret
内ループ7命令、 外ループ5命令
>>311 ご感想は?
318 :
名無しさん@3周年 :04/01/29 16:48
どーでもいいけど data[i][j] = data[i][j] + 1.0; って意味あるか? *p++ = p[-1] + 1.0; を計算したかったのかな?
iccはループアンロールしているからわかりにくくてスマン cmpはさすがにiccでも最適化されないんだな 確かに逆回しの方が有利だな 316は data[j][i] += 1.0; -> data[i][j] += 1.0; に書き換えた方がいいと思う、2重ループが展開できない 書き換えても似たようなコードを吐くようだったらそれがgccの限界だろう
>318 混乱させてスマン 意味は無い data[j][i] += 1.0; をしたかっただけだ
321 :
名無しさん@3周年 :04/01/29 17:40
>>319 というかな。2次元配列にアクセスする時点でiccもはるかに実行命令数が多くなるでしょうが。
楽して速いコード書こうなんて発想そのものが間違いなんだよ。
322 :
名無しさん@3周年 :04/01/29 18:03
gcc っていつから fstpl -808(%ebp) 8なんてつけるようになったんだろ?どー言う意味? fstpl -8(%ebp) の意味だよね?
323 :
名無しさん@3周年 :04/01/29 18:28
データに100個のdouble確保してるから。
ごめん、ボケた 314でいい
自然言語でもプログラム言語でも20年前からほとんど進歩してないな。 少なくともハードの進歩に比べたらゴミだね。こりゃSystemCも先行きは暗い罠。
専門分野に限定してもいいからまともな英2日、日2英翻訳できるようになったらオプティマイザに頼ってもいいんじゃないかな? いつになるんだろうね?^1000 もっとも最適化に頼れるようになったらエンジニアは飯の食い上げ。
なんつーかだな まぁ、楽はしたいな、その分だけ他にリソースをまわせるからな ラスト3%の高速化には興味は無い、それは他に優先するべきことがあるから その時点で話がかみ合わないのは勘弁してくれ んで、317のループは10添え字飛びアクセスしているから 余分な命令が入っているのは当たり前 それは置いて置いて 行列に対するスカラ演算や行列加算はそれ用のメソッドを用意するべ それくらいはものぐさなオレでもやる。 つーか、そうしないと疎Matrixとかのもうちょい複雑なデータ型でペナルティーが出まくる でさぁ、オレの手抜き実装でも行列の乗算くらいじゃ インナーループまでは添え字用の乗算は入ってこない、 それは納得してくれるよな それより複雑な演算をする場合は逐次の添え字用の乗算は 発生するしその場合は最適化の難易度は一気に上がる。 その場合は乗算の排除よりもデータ構造と計算順序の見直しをする これくらいで、勘弁してくれ
>んで、317のループは10添え字飛びアクセスしているから余分な命令が入っているのは当たり前 それでは順次アクセスするコード。結局、インナー 7、アウター 5で命令数は一緒。実クロックは知らないけどね。 __Z4funcv: pushl%ebp fldz fld1 fxch%st(1) movl%esp, %ebp xorl%ecx, %ecx pushl%ebx subl$804, %esp xorl%ebx, %ebx fstpl-808(%ebp) L11: xorl%edx, %edx L10: leal(%edx,%ecx), %eax addl$1, %edx fldl-808(%ebp,%eax,8) cmpl$9, %edx fadd%st(1), %st fstpl-808(%ebp,%eax,8) jbeL10 addl$1, %ebx addl$10, %ecx cmpl$9, %ebx jbeL11 fstp%st(0) addl$804, %esp popl%ebx popl%ebp ret
329 :
名無しさん@3周年 :04/01/29 19:37
>> 328のソース double data[10][10]; data[0][0] = 0.; for(unsigned i = 0; i < 10; i++){ for(unsigned j = 0; j < 10; j++){ data[i][j] = data[i][j] + 1.0; } }
そんなもんか、 icc -O3,-G7,-Qunroll0でインナー6命令 ;;; for (i=0; i<SIZE; ++i) ;;; for (j=0; j<SIZE; ++j) ;;; { ;;; dat[i][j] +=1.0; fld QWORD PTR _2il0floatpacket.3 ;26.4 xor ecx, ecx ;26.4 .B1.6: ; Preds .B1.8 .B1.5 mov eax, ecx ;24.8 lea edx, DWORD PTR [ecx+800] ;24.8 .B1.7: ; Preds .B1.7 .B1.6 jmp .L1 ; Prob 0% ; ALIGN 4 .L2: ; fstp QWORD PTR [esp+eax-8] ; .L1: ; fld QWORD PTR [esp+eax] ;26.4 fadd st, st(1) ;26.4 add eax, 8 ;24.23 cmp edx, eax ;24.3 jg .L2 ; Prob 99% ;24.3 fstp QWORD PTR [esp+eax-8] ;26.4 .B1.8: ; Preds .B1.7 add ecx, 800 ;23.22 cmp ecx, 80000 ;23.2 jl .B1.6 ; Prob 99% ;23.2 .B1.9: ; Preds .B1.8 fstp st(0) ; ;;; }
インナー6命令、 もちろんアウターのペナルティーに関しては甘んじて受ける ;;; double *p = (double*)dat; ;;; for (i=SIZE*SIZE; i>=0; --i) mov eax, 10000 ;30.7 jmp .B1.10 ; Prob 100% ;30.7 ALIGN 4 .B1.11: ; Preds .B1.10 ;;; { ;;; p[i] += 1.0; fld QWORD PTR _2il0floatpacket.3 ;32.3 .B1.10: ; Preds .B1.11 .B1.9 fadd QWORD PTR [esp+eax*8] ;32.3 fstp QWORD PTR [esp+eax*8] ;32.3 add eax, -1 ;30.28 test eax, eax ;30.2 jge .B1.11 ; Prob 99% ;30.2 .B1.12: ; Preds .B1.10 ; Infreq ;;; }
何か色々発展してるが、 もともと俺の言いたかったのは 先ずインライン展開され、 そして添え字が 0 だから 0 乗算が最適化で消えるのではないかということだ。 添え字が他の場合のことは知ったこっちゃない。
>>307 「いなぁ」って何さ? って突っ込まれてどう感じるよ?
あんたの突っ込みはそんなのと同レベル。
重要なところを無視して、どうでもいいところに突っ込んでるだけ。
334 :
名無しさん@3周年 :04/01/29 21:27
>ラスト3%の高速化には興味は無い、それは他に優先するべきことがあるから 片や7、片や5、 3%どころかN->∞で 初めて最小効率差 40%だな。
>332 そこは話題にしているとことちゃう [0][0]にだけアクセスしておしまいと言うわけでもないだろう 一次配列の場合はそれでいいが、二次配列の場合は[0][0]だけ取得しても意味がない という話題のつもり すまんな話しが鳥取に行っていて それわかっての突込みだったらさらにごめん >334 ごめん、君、シリアスなコード1から書いたことないね 素人に話しするのも嫌いじゃないんで、それはそれでいいんだけどさ
>>335 > 一次配列の場合はそれでいいが、二次配列の場合は[0][0]だけ取得しても意味がない
ポインタ配列で二次元配列扱うのならともかく、
二次元配列を一次元配列として確保するタイプ(乗算が必要なほう)なら
先頭アドレスと一行の要素数さえ分かっていれば、
どの要素にもアクセスできる。
必要なら行列をリニアに扱うこともできる。
というか、そういうことがやりたいから
生の配列が扱いたいんじゃないの?
>>297 は。
m[0][i] でも同じことができるかもしれんが
(どうせ 0 除算は最適化で消えるんなら)、
m[0] を別変数に入れといた方が書きやすい/分かりやすいし、
m[0][i] を最適化できるコンパイラなら両方で同じコードを吐くだろうし、
最適化の精度に影響されにくいコードになる。
もしくは、リニアにアクセスできるメソッドを追加したのでもいいかもね。
デバッグ時に添え字のチェックを入れれるし。
一次元配列、二次元配列で心血注いで 自己満足してる暇があったら Matlab 使った方が よっぽど時間を有効に使える。
336に同意 337そりゃそうだ。 実際にはより重要な課題が他にいくらでもあるわ
>>338 お前ごときがほかにすることは何もないよ。ままごとプログラム組むのが関の山。
せいぜいGUIプログラム作って喜んでな。
実際問題としてまともなUI作るのに時間かけた方がよほど研究もはかどるぽ。
Fortoranになれているのならそれでもよいだろうが、 これから言語を学ぶならCだろうな(次の言語につながるからー>C++, Java) どれぐらい複雑な計算をするかによるな。走らせてたかだか2−3日ぐらいで 答えがでるような問題だったら言語にこだわる必要もないと思うが。 それよりアルゴリズムに気をつければいいでしょ。 あとどれぐらいの環境がつかえるのか?例えばMPIのライブラリー等 が使えるのか、スパコンが死語といっているがそれに使いこなせる プログラムを書くまでが大変だから使えていないというのが現状だろう。 研究者も技術者もしっかりかけるまでの時間がかかるからね。 普通のプログラムでさえ大変たいへんなのに並列のプログラムはもっと いろいろなこと考えなければいけないからな。 Matlab, Simlink, Mathematica等のソフトが買えて、またそのようなソフトで 済むような問題ならいいんだけどね。
342 :
名無しさん@3周年 :04/02/01 19:18
turbo pascal++ これ、最強。
Mathematica を Matlab と何で同列に扱ってるのよあんた。
344 :
名無しさん@3周年 :04/02/02 08:01
>>343 Matlabは主に数値計算、Mathematicaは主に数式処理なので
toolの分類は少し間違えている気がするが、
でもやることによってはほぼ同じことができるっていうこと
じゃないのかな?
345 :
名無しさん@3周年 :04/02/02 12:16
Matlabって遅いってきいたけど、どうなの?
>>345 大きいもの作ったことないけど,場合によるでしょうね.
制御の分野では大人気ですから.書きやすいのが一番かも.
matlab 系のソフトウェアの中での話なら,
どこかでベンチマークが載せてあります.
matlab6 になって大幅に速くなったらしいです.
でも商用だし.
このスレの人がやる計算には向いてないんですか?
・プログラム作成に要する時間 ・計算時間 ・計算データの解析時間 3つの時間の合計が少なくなるなら、MatlabだろうがMathematicaだろうがなんでもいい。 さほど計算時間を多く要するものでない場合、よく利用されてる。 >このスレの人がやる計算には向いてないんですか? です。
今までFortranを77だけみて差別してました。 C,C++を勉強してきたけどFortran90はええなぁ・・・ コンパイラが高いことだけを除けば⊂⌒~⊃。Д。)⊃ 予算下さい(Tд⊂ (´.`)y─┛~~~~まぁうちは独自プログラムの前に計算WSのいいのが必要なんだが
>> 対角化、LU/UDあたりだけなら直截Cで組んでも知れてるよ。 >数値誤差の軽減を考えると意外と面倒い。 >それに、車輪の再発明はタルい。 チッ。やったこともないくせに偉そうに。ま、おまえにゃ無理。
>>349 もしや熟練者の降臨?よろしければ具体的なことを教えてください.
Matlab はフリー & コマンド互換の Octave, Scilabがあるけど MathematicaやMaple のような数式処理のできるフリーのソフトってない? コマンド互換とか描画とかは特に問わないです。
352 :
名無しさん@3周年 :04/02/05 02:13
Linux用のインテルFORTRAN90コンパイラは無料でダウンロ-ドして 使えるよ。
353 :
名無しさん@3周年 :04/02/05 03:26
>>352 Cygwin用のF90コンパイラはないの?
>>351 maxima.lisp で書かれているという.
手で動かせる 3D グラフも出せましたよ.
>>354 ありがと。試してみます。
これで商用ソフトに頼らなくても済むようになるかも。。。
早速Maxima使ってみました。 なるほど、商用っていうのはそういうことなのね・・・・ インテグラルがアスキー文字で出力されてるのを見てわかりました。 それはともかく、リターンキーを押す度に新たな行が出来て、不要な行が どんどん出来ていくんですね〜。文句言っちゃいけないけど。
Intel Cコンパイラってテンプレートを使ったクラスでfriend関数を宣言するときどうやったらいいの? 例えば template<typename X> class A{ friend double func<X>(); }; っていうのが通らない。func<X>が気に入らないみたいで、、、 gccなら問題なく通るし、文法的には間違ってないと思うんだけど? バージョン8.0 for windows使ってます。
>>356 texmacs (だったかな) から呼んで使うと,キレイな数式が拝めますよ.
screenshot しか見ていないのに感動しました.
「不要な行」とは何か分かりませんが,インタラクティブ (対話モード) なら
当たり前のような気がします.
まとまったらソースをファイルに書けば良いのですし,
curses ライブラリのお陰で上キーとか押すと履歴が出るんじゃないでしょうか?
最近動かしていないのでアレですが...
ひそかに texmacs 体験談を期待していたのだが...(´∀`)
>>345 MATLAB Compiler使えばいいじゃん。
maxima ってスレ違いじゃ,,,と思っていましたが, これの数式の出力を Fortran 形式にすることもできるんですね. ちゃんと 72 カラムで折り返して, 5 カラム目に文字を入れて継続してくれるんですよ.しかも文字は連番. 今度使ってみようと思います. 「どっちがいい?」か.やはりスレ違いでしたね.
珍しく人が集まるスレだし、シム板はこのとおりの状態だからあまり堅苦しく考えないほうが良いかと……
MATX 使ってる椰子レポート希望
QZ法の解説してる本 or URL 教えてください
なんというか幾らなんでもスレ違いすぎぽ。 vbaがデフォで複素数サポートしたら とりあえずエクセルで何でも計算>>>>>>>>>>>fortranと逝って見るテスト
367 :
名無しさん@3周年 :04/02/25 07:14
初めて書き込みます。とても興味深いスレッドですね。 既に議論されている内容かもしれませんが、 私の経験から、ひとつコメントさせてください。 ベクトル演算機の場合、Fortran用のコンパイラの開発がC,C++よりも歴史が長く、 現状では大きな差があるようです。 以前、BiCGStab(連立方程式の反復解法)で50000正方7重対角行列を解くプログラムを CとFortran77 の両者で作成し、計算時間を測定してみましたが、 Fujitsu VPP5000 ではFortranの方が1/15の時間で終了しました。 ベクトル化率の違いがありますので、なんとも言えませんが、 (ちなみに、理論上、平均ベクトル化率90%を超えたあたりからベクトル化による速度向上率が指数関数的に上昇するようです。) まだまだC,C++のベクトル化コンパイラは発展途上なのかもしれません。 PCで比較した場合(VC6,VF6)、Cの方が10%程度早い結果となりました。 ケースバイケースでしょうが、上記の経験から私は PCの場合は全てC or C++、 ベクトル機の場合は、計算部分をFortran,ファイル処理部分をCで書いて、リンク時に結合 というスタイルを取っています。(文字列処理やファイル処理はCの方が慣れているし、優れていると思うので) >365 QZ法、一般化固有値問題の解法ですよね? Matrix Computation という本(洋書ですが)がよさそうです。 ブラックボックスで使うならLAPACKにルーチンがあった気がします。 安定性解析などで固有値問題を解く場合、最大固有値のみを得たいことが多いのですが、 この場合QZ法は非効率的(n^3の計算量らしいです)で、逆反復法などが有効かと思います。
もれ、Fortran使うことないけど、そのうちFortranもつかってみようと思う。 どっち良いか議論できるのは両方使えるか、両方使ったことがない場合だろうな。 gslとか使ってんだけど、ライブラリー関係、どうよFortran.
>367 cはポインタなど、「自由度の高さ」が最適化の妨げになっていると聴いた事があるけどどうなんです? c++だったら改善が期待できる?
C++ は余計に...
ポインタの存在が最適化の妨げになるって言うのはちょっとピンと来ないけど どういうことなんだろうか・・・
ハウスホルダー法を一般のエルミート行列にまで拡張したいのですがどうやったらいいでしょう?
すれば?
(^^)
>>375 にゃるほど.さんくす.
確かに,エイリアスがあるときの最適化ってどうなってるのか気になってたんだよな.
言語仕様でoverheadが漏れなくついてきますとか言われるとちょっと頭痛い.
C++の例外処理とか.(はずせるけど)
377 :
名無しさん@3周年 :04/02/29 17:05
質問なんだが、インテルのFortranコンパイラ(efc)で、 実行時に行列の定義した領域外への参照をチェックしてくれる オプションってありますか? (DECコンパイラでの-Cオプション相当のやつのことなんですが) いまいちefcはコンパイルオプションがわからないので苦労しています。 富士通のはいいね-Haesuxでほとんどバグをつぶせるから。
378 :
名無しさん@3周年 :04/03/01 04:16
Blitz++でMatrixの初期化するとき A= 10, 20, 30; みたいに書いてるけど、どうやったらこんな書式が実現できるんでしょ? ソース見たけどよくわからん。 むりやりva_arg使ってみたけど A.operator=(10,20,30); ではうまくいくけど、A = 10, 20, 30;と書いてもうまくいかないや! さらに要素がdoubleやらintならまだしもcomplexだとnon-POD typeで コンパイルもできない・・・
C++? それならoperator,をオーバーロードしてるんじゃない? commaが出てくるたびに数字を一時変数のvectorにpushしていけば良いかと. (template expressionにしてるかも知れないけど,というか漏れならそうするが) もしそうなら,complexだと A=complex(1,0),complex(0,1),complex(0,0); つー書き方になるのかねぇ
しまった.expression templateだった・・・_| ̄|○
>376 でも逆にtemplateやinlineでオーバーヘッドをなくせるし…… クリティカルでない部分は便利かつ高水準な機能で楽をして、 大事な所は今までどおり+追加機能で(゚Д゚)ウマーというのがc++のいい所だと思われ
そうか、みんなそんな風にカいてたのか。 マトリクスはでっかいのが普通だから、ファイルにまとめといて、 gsl_matrix_fread(file,m); してた。C++もつかえな…。 _| ̄|○
>> 379 operator,だけでなくてopetrator= も定義しておかないと A=complex(1,0) でエラーになるよ。
>381 クリティカルな部分と楽ができる部分を見極められるかが大きなポイントでしょうな. >382 でかいマトリックスなら普通そうするでしょ? >383 あー忘れてたw ところでC++で数値計算ってスレを立ててみたいのだが,ダメかねぇ このスレはそもそもCかFortranかってスレだし それに今あるC++スレってろくなスレがないもんで・・・
blitsと同じことやろうとすると相当大変じゃない?初期化のためにリスト とアイテレータを用意してるみたいだね。 それなら operator=( complex * ) を定義しといて、 complex<double> dummy={complex<double>(1,0),.....}; Matrix A(2,2); A=dummy; でどうよ?いったんcomplexの配列を作る手間はいるけど、Matrixクラスに 初期化のためだけに必要なカウンタやポインタを用意するよりずっとすっきり してると思うけどな?
ごめんdummy[]={....}; だった。
うげげ.commaより=の方が優先順位高いのか. だから A=10, 20, 30; は,A=10のところで初期化のためのプロキシオブジェクト返さないといかんのか. アホだ俺.欝だ・・・ >385 syntax sugarのためだけにそこまでする必要があるのかってことですね. まぁ,でもC++ではそれがやりたければ可能な範囲で最大限のことができますよ, ってことは少なくとも(実装者が注意する限り)欠点にはならないかと.
実際ちょっと書いてみた。元のmatrixクラスにカウンタ持たせるのがもっとも楽だと思うが、 ここはblitzのように初期化のためにinitialクラスつくってメンバにもとのmatrixクラスへのポインタと カウンタを用意した。 A=10のところでinitialオブジェクトを返すようにすればなんとか書けるんだけど、 B=A=10,20,30; とかやろうとするとmatrix & operator=(initial &)なんてのがいるんだね。 それでも演算子の優先順位から B=(A=10,20,39); と括弧でくくらないと望みどおりにはならない。 括弧がないとBもAも10が設定されるだけなんだなこれが。 このスレ見たおかげで徹夜してしまった鬱
FreeBSDでMaple9のLinux版インストールできた人居る? インストール段階でアポーンしちゃう。ctrl-zもcrl-cも死んでしまう。 別ターミナルから入ってkillしないと駄目
390 :
名無しさん@3周年 :04/04/23 01:18
すみませんFortranよく知らないんですがFortranのsubrutineをC/C++から呼ぶ時 Fortranのsubrutineが F(f,a,b) となっててa,bが倍精度、fが倍精度の引数を受け取って倍精度を返す関数の場合 Cからf2cで呼ぶとき extern "C" { f_( double(*f)(double),double& a,double& b}; としてもコンパイルはできるけどセグメンテーションエラーとか出てきます サブルーティンが関数を引数とする場合は呼べないんでしょうか?
391 :
名無しさん@3周年 :04/04/26 07:58
Haskellが一番いいよ。
392 :
名無しさん@3周年 :04/05/09 02:41
C++で組んで流体解析してた←10年前の俺 あのころは風洞実験のシミュレートだけでもdx66ってへぼいcpuで何時間かかったことか。 fortranってそんなにいいのか・・・ 今時のPCなら29800円でもすんげーはやくできるよな。 いいな、今の研究者は・・・
393 :
名無しさん@3周年 :04/05/09 08:34
Ruby!
■当スレご利用中の皆様へ
ジャンル別にいくつかの掲示板を設置しているゴロックを利用してみてください。
各種規制等も緩く、書き込み検索、ヘッドライン等も無料にて提供。
dat落ちしてもすぐにHTML化するので●いらず!
真面目な討論、議論等に使っていただきたいと思ってます。
もちろん雑談するとこや遊べるとこもあります。
真面目なスレ、真剣議論をしたいスレ、現住人だけでマターリしたいスレなどは
当サイトが最適だと思いますのでぜひ次スレは当サイトに立ててみてください。
今なら2getもし放題(藁
http://www.569.jp/
expression template を自分で使いこなしてる人居る?
Cにきまってんじゃん!!
397 :
名無しさん@3周年 :04/05/19 19:25
(・∀・)イイ!!
398 :
名無しさん@3周年 :04/06/14 00:42
忍者スレはここでつか
399 :
名無しさん@3周年 :04/06/21 23:12
VC用のGSL1.4が落とせるとこってない?
Dにきまってんじゃん!!
401 :
名無しさん@3周年 :04/06/26 03:43
GNUのG95がはやくしっかりしたものになると良いですね。
402 :
名無しさん@3周年 :04/06/27 06:56
数値演算ライブラリーの豊富さとその演算結果の精度(信頼度)の高さではFORTRANが優位?
403 :
名無しさん@3周年 :04/06/29 02:09
多次元の配列が、きちんと塊として言語でネーティブに扱える FORTRANはCに比べて安心出来る。ポインタを使わないとまともな プログラムがまったく書けないC言語は、プログラミングの エキスパートではなくて対象とする問題の専門家の科学者に とっては、不必要な複雑さと危険性を提供している。 元来C言語は資源の貧弱な計算機システムのOSを記述する為に、 極力効率化とコンパイラの軽さを信条として開発された。 OSの資源としてのメモリーは、一次元的な資源管理をされており、 とかくポインターを多用し、リスト構造が重要。メモリのアクセス 効率よりも容量節約を重視するものだった。 アセンブラに比べれば、はるかに読み易く、書き易いといいつつも、 生成されるアセンブラを見通してソースを書く為の言語であった。 そうしてデーターの基本は整数や文字。 科学技術計算の為のFLOATやDBLEは付け足し的なものだった。 (PDPー11では、浮動小数をハードで実現していたモデルは 上位の機種である。)
助けて! XPにCygwinをインストールして、Cygwinの下で、Fortran90で書いたプログラムを コンパイルしたいけども、どうすれば良いでしょか?教えてください。
>>404 g95 は動かないんですか?
一瞬で終わる計算ばかりなら cygwin でもいいのですが,
数十秒でも待たされるなら Linux を入れた方が快適ですよ.ifc があるし.
406 :
名無しさん@3周年 :04/11/06 10:49:36
あげ
コンパイラだけでいいならcygwinよりもmingwのほうがいいと思うんだが・・・ まぁ--mno-cygwinでもいいんだけど
408 :
名無しさん@3周年 :04/11/11 13:18:34
age
>407 mingw ってFortran あったっけ?
>>410 普通に使えますよ.
Ada, fortran, C, C++, java のコンパイラがあります.
configure スクリプトを動かしたりするときは MSYS も入れます.
とりあえず使えるといった方がいいよ。
確かに動くけど遅すぎる。
>>405 が言ってるようにまともに使うならネイティブ
Unixの環境使った方がずっといい。
最近数値計算やシミュレーションをWin環境でやってる人いるけど、計算させるならUnix。
俺は計算用のためのFreeBSDを1台、事務処理その他もろもろ用XPを1台常時起動してる。
413 :
名無しさん@3周年 :04/11/29 01:26:11
cygwinならともかくmingwでも遅いの?
g77(GCC) の出力するコード自体もそんなに速くないから・・・
UNIX を入れたついでに ifort を入れてしまうのであった. g77 -> ifort に変えるだけで 2, 3 割も速くなっちゃうんだもんねぇ...
最適化オプション次第でで2、3割どころか
417 :
名無しさん@3周年 :04/12/24 03:11:37
東北大学のスーパーコンピュータSX-7が、HPCチャレンジベンチマークにおいて世界最高速記録を達成!!
NECはこのたび、東北大学情報シナジーセンター(根元義章センター長
http://www.isc.tohoku.ac.jp/ )に納入し、2003年の1月から稼動しておりますスーパーコンピュータSX-7
http://www.cc.tohoku.ac.jp/service/super/super-2.htmlにおいて 、HPC(高性能計算)分野での
新しいベンチマークテストであるHPCチャレンジベンチマーク(
http://icl.cs.utk.edu/hpcc/ )で、28項目中16項目で世界最高速を達成いたしました。
HPCチャレンジベンチマークは、米国政府の援助のもと、テネシー大学のJ.ドンガラ(J.Dongarra)博士を中心に米国や日本のHPC関係者が参画して、作成されたものであります。
従来、高性能計算機の性能番付として主流であったTOP500ベンチマークで使用されてきたLinpack(連立方程式の計算)を補完し、高性能計算機の性能を多面的な観点から評価する目
的で開発されたベンチマークであります。同ベンチマークはHPCシステムで重要となる複数の性能テストから構成されており、コンピュータの演算性能だけではなく、メモリアクセ
ス性能、並列処理のためのライブラリであるMPI(Message Passing Interface)の通信性能など、HPCシステムにおける様々な機能の性能を総合的に評価することが出来ます。
今回のベンチマークテストでは、NECのSXシリーズのようなベクトル型スーパーコンピュータだけではなく、汎用プロセッサを使用したスカラー型スーパーコンピュータの性
能も数多く登録されており、今後のHPCベンチマークテストの主流になるものと見込まれております。
このたび、SX-7が世界最高速を達成した、HPCチャレンジベンチマークは、Linpackベンチマークも含んだ7カテゴリー28項目のベンチマークから構成されております。
プレスリリース全文はこちらです。
日本電気株式会社プレスリリース 2004年12月21日
http://www.nec.co.jp/press/ja/0412/2102.html
418 :
名無しさん@3周年 :04/12/24 18:47:18
電磁界シュミュレータを作るのに、最適と思われる言語はなんですか?
419 :
名無しさん@3周年 :04/12/24 23:00:38
421 :
418 :04/12/25 15:05:47
ジャワでいいじゃん
いっそ言語厨房を召喚してしまおうか
呼んだ〜? オレだよ、オレ
>>418 ボスは中年以上で頭が固い → FORTRAN77
それ以外 → FORTRAN9x, C++
>>418 浮動小数点演算が内蔵していないIntel486SXは、とんでもなく遅いから気をつけろ。
わからんね
...これからも僕を応援して下さいね(^^)。 ━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━― ∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉 __∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄ ∧_∧ ( ^^ )< ぬるぽ(^^) (⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン ∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ
429 :
名無しさん@3周年 :05/02/23 22:53:02
実質C/C++のスレになっていると思う
430 :
名無しさん@3周年 :05/02/24 15:07:27
じゃあ、ここからFORTRANスレ。
431 :
名無しさん@3周年 :05/03/04 21:59:04
GNUのf95がもうすぐ出るみたいだね
http://gcc.gnu.org/fortran/ 最近ひさしぶりにFortran使ってみたが、とてもじゃないけどまともな
アプリケーション作れる言語じゃないと再確認した。
宣言しない変数が使えるのはつづり間違いの致命的で見つけにくいバグを起こしやすい。
宣言して使っていないのはバグの卵。
まとめてコメントができない。
static関数が書けない。
大文字小文字むちゃくちゃ。
f90では少しはまともになったのかな。
432 :
名無しさん@3周年 :05/03/09 22:37:23
暗黙の変数宣言の問題は、コンパイルオプションで対応しれ。 まとめコメントは、エディタで対応しれ。 staticは、f90のモジュールで対応しれ。 大文字小文字の区別は、コンパイルオプションで対応しれ。 もっとも、大文字小文字だけで区別される変数の使い方は、Cでも推奨されてないだよ。
ソースにどれだけコメント入れてますか?
>>432 漏れはマイルールで、グローバル変数とローカル変数は頭文字を大文字にしてる。
大文字と小文字の違いだけで同じ綴りの変数は使わないな。
436 :
名無しさん@3周年 :05/03/13 11:08:58
暗黙の型宣言
437 :
sumiratar7 :2005/03/21(月) 04:57:03
今週も絶好調です! ★キャラクタ競馬予想ソフト★見て下さい! 毎週勝ってます!
★先々週も★
土曜日 中京11R ロックカーニバル◎8→注7 馬連 7-8 3500円 馬単 8-7 7090円的中!
日曜日 阪神9R 人気馬5→◎7 馬連 5-7 3120円 馬単 5-7 5140円的中!
★先週も★
土曜日 阪神11R ビッグゴールド◎6→注9 馬連 6-9 140720円 馬単 6-9 258360円的中!
日曜日 阪神11R ラインクラフト◎8 結果1着
★今週も★
日曜日 阪神11R アイポッパー◎1 馬連 01-08 3,770円
このソフトは、デビュー以来、毎週一回も裏切っていません!
あなたも次回から、当てる喜びを毎週味わってみてはいかがでしょうか?
http://page6.auctions.yahoo.co.jp/jp/auction/f32060088
438 :
鬼検索 ◆ONIoniKkao :2005/03/30(水) 20:19:15
439 :
:2005/04/16(土) 03:30:54
440 :
名無しさん@3周年 :2005/04/16(土) 07:03:26
441 :
名無しさん@3周年 :2005/04/20(水) 06:10:34
歴史が古いせいか,Fortranは,最適化コンパイラで,高速化しやすい. Cは,それほどでもない. でも,CPUのスピードが上がってきたから,どっちもどっちでは? プログラマがきちんとプログラムすれば,どちらも性能差は無いと 思うけど. 吐き出したバイナリを比較したことが無いので,断定的なことはわかりません. いまからやるならCではないかと.そんなにちがいませんよね?
両方使えるようにしておくのが吉。 数値計算に使うだけならたいした手間にはなるまい。
443 :
名無しさん@3周年 :2005/04/21(木) 04:52:21
444 :
名無しさん@3周年 :2005/04/21(木) 07:03:08
>>442 どちらもやれというなら こたえにはなってないぞ
たしかに数値計算だけなら たいした差はないがな
BASICコンパイラ使ってもそんなもんだろ
445 :
名無しさん@3周年 :2005/04/28(木) 04:40:36
c++って結構難しいと感じた。 fortran90は俺みたいなあほでも一応書けるのがいいとこか・・・ 現代のプログラミング言語の概念を取り入れつつ、煩雑でない 次のバージョンのfortranが早く出て欲しい。 でもやっぱりc++を学ばざる負えないのかなあ?
C++はプログラム言語のなかでも最も難しいと思うよ。 Cをベースに継ぎ足したところがより煩雑
447 :
名無しさん@3周年 :2005/05/05(木) 22:03:16
結局スピード、読みやすさ、でFORTRANの勝ち。 数値計算に限ってはね。他は知らん。 FORTRAN馬鹿にする人って77しか知らないし。
better cとして利用し、STLに頼るプログラミングする限りはめちゃくちゃ楽だけどね>c++ スピードも、windows上だと……
better C ってことをム板で言ったらめちゃめちゃ叩かれたことある。 アホちゃうかこいつらと思ったけど。 ツーかC++ はbetter C以外ではないわけなんだが。
>>448 C++のプログラミングの楽さってのはCと比べてでしょ。
FORTRANの楽さには勝てん。DEBAGの楽さも含めて。
スピードもWINDOUS上だろうがUNIXだろうがFORTRANが上ですが何か?
数値計算=単純計算
ROOPがでかいだけ。
451 :
名無しさん@3周年 :2005/05/08(日) 06:10:55
Yahoo!辞書 roop ですべての辞書検索した結果 : 0件
452 :
名無しさん@3周年 :2005/05/08(日) 06:42:59
debag de・bag[dib] 〔動〕〔他〕《英俗》(いたずら・罰として)〈人の〉ズボンを脱がす
453 :
名無しさん@3周年 :2005/05/08(日) 08:15:54
Fortranって読みづらいから嫌いだ 世の中全部Perlで書けたらいいのにな〜
454 :
名無しさん@3周年 :2005/05/08(日) 08:27:11
Fortranのいいところは最適化コンパイラがよくできているところだ CやC++だとポインタ操作がエイリアスといって最適化の際に障害となるんだ. でもそれは,結局Fortranの言語仕様が古いだけなんだよな 単純という意味だ 予約語も無い これってすごいよね DO=50 と書いてもOKだ FORMAT=30もいいし END=50 も可 あまりやらないほうがいいとは思うけど 詳しくは知らないが なにしろFortran77の世代だからな! 最新のFortranは構造化言語みたいになってるんだろうな. なにしろFortranはIBMのSystem360にも搭載されていた由緒正しき言語だ たとえて言えば 古代フェニキア文字みたいな どちらの言語も使い分ければいいんだ でもCでFEMを書いたことはあるけど Fortranでお絵かきソフトをかいたことはないね Fortranにこだわって山のようなCライブラリを呼び出すか Cで作ってすべてスクラッチから書き直すかということでしょう 全部Cで作ることはできる でも断言するがFortranですべて作ることはできない 作る価値も無いがな 向き不向きがある 数値計算に限定したとして 核となるソルバーの部分だけなら Fortranの出る幕は十分ある 問題は一人の人間がいろいろな言語を使い分けて デバッグできるのか? 変な勘違いをしないのか? ということだそっちのほうが問題だよ Fortranの使い手とチームを組むのならそれがベストだろうね 長々書いたが 一度使ってみれば?としかいえないよ
>>450 >WINDOUS上
Windows or MS-DOSの略?
昔、MicrosoftのC++とFortranとSunのJavaで、同等の数値計算プログラムを
つくってWindowsNT4.0上でベンチマークしたが、C++とFortranはほぼ同じだった。
数値計算にもよるけど、同じアルゴリズムをFORTRANとCで書いたわけだろ。 C++固有の技を使わない。配列を添え字だけで参照するとかしてればおな〜じようなアセンブルコードになると思うけど? 普通に書いたコードで比較しないと、技を使い出すと比較にならんよな。asmとかさ。
457 :
名無しさん@3周年 :2005/05/09(月) 21:07:38
>>456 同意見だね
数値計算の核の部分はそれほど複雑ではないから
どんな言語で書いてもあまり差はない
質問がコードのどの部分のことを言ってるかで違ってくるね
ソルバーの核の部分に限れば
BASICもCもFortranも大して変わらないと思う
そこでは単純な四則演算しかやってないからな
>ソルバーの核の部分に限れば 計算時間の大部分ですなぁ。 結局開発しやすい言語がいいってことで。
CコンパイラをもたないシステムはまずないからCで書いときゃ安心だけど、 Fortranと同等の最適化を受けるには変数に修飾子付けたり、プラグマつけないといかんから まんどくさいよ
Cはエイリアスの問題が付きまとうので、明示的に依存関係のないことをpragmaなどで示さないと最適化してくれない。 C++は、クラスの中に配列を持っているときに、配列の一要素を変更しただけで、オブジェクト全体が変更したと認識されるので、ループ最適化してくれない(某H社のスパコン)。依存関係を無視するコマンドをつけてもダメだった。 fortranならこの辺の苦労はないのだろう。
461 :
名無しさん@3周年 :2005/05/14(土) 04:39:53
アセンブラをもたないシステムはまずないからアセンブラで書いときゃ安心だけど、 Fortranと同等の最適化を受ける必要なんてさらさらなくて、変数に修飾子付けたり、プラグマつける必要も全くないから 楽ちんこだよ。
>460 よくわからんが、クラスのメンバ変数で配列を持っていて、 メンバ関数内でループを回そうとすると最適化かけてくれないの? それコンパイラがよほどタコなんと違う?
liboctaveのFortran版ってないのかな?調べた限りではC++向きのようです。 libScilabとかでもよいのですが。
464 :
名無しさん@3周年 :2005/05/29(日) 02:56:55
,/|ミ=、 / .|ミミミ| .| |ミミミ| ,/|ミ| |ミミミ| ,/ |ミ| |ミミミ| | |ミ| |ミミミ| | |ミ| |ミミミ| | |ミ| |ミミミ| | |ミ| |ミミミ| | |ミ| |ミミミ| _,-'"|. |ミ| |ミミミ| _,. -'' " ̄~゙三=-_、_ _,.-'" |. |ミ| !ミミミ| ,,.-''" r _、 三三タ_,.-''" | |ミ| ,.彡ヾミ| / i {ぃ}} _ニ/ -=三| 」ミヒ彡彡イミヾ /,.、 `--" ニl -=ニ三=-''レ彡ミミr'" |ミミミ| l {ゞ} i .ニl==三三ニ=''" ,>'"|ミ| |ミミミ| .l `" i_,,...-''| ニ`=-=i'" | |ミl,..-=彡ヾミ| _,.-! ! i -ニ三三/ L.. -ニヾ|ヾ彡'='''" l´,.- l \/ -ニ三三/ ヾ-‐''" _. ! ri l\ __--三三三='" j'‘´l `´ | ! ` ミ三三三三三=''" i',.. '´} | | l,.. r´ '´
465 :
名無しさん@3周年 :2005/06/03(金) 21:09:08
CとFortranのどちらが優秀かで研究室の助教授と論争になってます 相手はCよりもFortranの優れてる点として、「今までのオブジェクトが流用できるから」「fotranは77,90と進化してきたのでCに勝っている」ってのをあげてますが これに対する「Cで作成したプログラムのほうが演算処理が速い」って主張は「今のパソコンでは、どちらも処理速度が変わらない」と一蹴されました これを論破するにはどうすればいいんでしょうか
466 :
名無しさん@3周年 :2005/06/03(金) 21:15:37
ケースバイケースでしょうから 結果に興味があるなら,実際の問題で ベンチマークを競ってみたらどうでしょうか.
>>465 が実は教授であると想像すると(・∀・)ニヤニヤできる
468 :
名無しさん@3周年 :2005/06/03(金) 22:53:11
469 :
名無しさん@3周年 :2005/06/03(金) 23:36:58
>>465 両方でき、用途によって使い分けるのが今の主流。
470 :
名無しさん@3周年 :2005/06/03(金) 23:58:26
ヘッダファイルってなんのメリットがあるの?
>465 c++ならOOPできるし、STL使えるから圧倒的に勝っている。
>>470 短いプログラムでもコンパイルに時間がかかってなんか凄いことやってる気分になれる。
プリコンパイルヘッダを使うとディスクを余計に消費してリッチな気分になれる。
473 :
名無しさん@3周年 :2005/06/04(土) 02:27:29
助教授財前の言うとおりだと思うよ。東教授
474 :
名無しさん@3周年 :2005/06/06(月) 22:23:00
>>465 計算機のCPUは何?
そのCPUに最適化されたコンパイラが用意されているほうが速いと思う。
4004
476 :
名無しさん@3周年 :2005/06/22(水) 17:26:14
fortran使って作ったプログラムがコンパイルできるんだが 実行するとaddress errorって出るあるよ どうしてあるか?
477 :
名無しさん@3周年 :2005/06/22(水) 17:58:24
郵便番号間違ってないか?
両方使いますが,Fortranの場合, ・多次元配列: x(i,j,k) ・べき乗: a**b ・整数から実数へのキャスト: dble(i) ・行末:何も必要なし それに対して,Cの場合, ・x[i][j][k] (2文字も多い) とか x[JMAX*KMAX*i+KMAX*j+k] (!!) ・pow(a,b) (4文字も多いし,括弧の中に変数を打つのが面倒) ・(double)i (2文字も多いし,括弧の位置がわけわからん) ・";" (激しくうざい.コンパイラはいちいちエラーメッセージを表示するな) また,Fortranだと dimension y(-128:128,-64:64) のように,負のインデックスが普通に宣言できて,非常に便利. 変数が多かったり,高精度の差分が必要だったりする大規模科学技術計算の場合, コーディングはFortranの方が楽だと思う. (もちろん,Cの方が楽な場合もあるけど.)
>>478 >・x[i][j][k] (2文字も多い) とか x[JMAX*KMAX*i+KMAX*j+k] (!!)
#define X((i),(j)) x[JMAX*KMAX*i+KMAX*j+k]
を使え。
>・(double)i (2文字も多いし,括弧の位置がわけわからん)
文字数が多くて気に入らなければ上と同様#define使え。
あと、double(i) としてもキャストがかけられるようになってる。
>Fortranだと dimension y(-128:128,-64:64)
>のように,負のインデックスが普通に宣言できて,非常に便利.
Cでも負のインデックスが使える。
double x[100], *p;
p= x + 100;
p[-1] = 50.0;
とかな。
コーディングそのものはCの方が楽だろ。例えば任意の被積分関数を関数引数に与えて、
任意区間を積分するような関数をfortranで書けるか?
こんな奴
double Sekibun( (* double)f(), double start, start end )
f()には任意のdouble型の関数が来る。
可読性に問題はあってもポインタがあるのでコーディングはCの方が楽だろ。
しまった。訂正ね #define X(i,j) x[JMAX*KMAX*(i)+KMAX*(j)+k]
>>478 たぶん478さんは基本的にFortran使いなんですね。
C使いだった自分がFortranをはじめたときは、
・implicit noneを全部の関数に書くのがウザイ
・一行でif 〜 then 〜 else が書けない(…書けるけど ; つけたり endif つけたりと鬱陶しい)
・文末に ; を打たないことに慣れない ( Cに慣れてると無意識につけてしまうもので… )
・2行以上に渡ったときに & を入れると次の行のオートインデントがうまくできなくてウザイ
・グローバル変数が定義できない
など、不満はいっぱいありましたよ。
でも、今では手軽に読みやすいプログラムの書けるFortran(90以降限定)の方が
Cよりも好きになりました。配列演算も強力ですしね。
>>479 Fortranでも関数を引数に取れますよ。なのでSekibun()は実現可能です。
しかも引数チェックができたり多次元配列でもサイズを記憶して渡せたり、
厳しいチェックが可能なんでトラブルが起こりにくいです。
482 :
478 :2005/07/12(火) 01:37:41
>>479 479 → 480のとかは,Fortranではまず有り得ないけど,
Cでやりがちな,よい例ですね.
Cで負のインデックスが使えるのは,確かにだと思いますが,
多次元になると面倒くさいし,バグが付き纏いそうで,お断りです.
任意関数の積分みたいなことに対して,Cに分があるのは納得.
実際,Fortranが苦手なことは,Cを使えばいいんですよ.
ただ,1次元区間での積分なんかに対して,わざわざ,
サブルーチンを作って,呼ぶというのが,C使いらしいというか:
被積分関数に特異性がなければ,do 足し算 enddo で十分で,
こんな計算時間の無駄は冗談じゃないし.
特異性があれば,精度を出すために,
特異性に配慮した格子生成などの工夫が必要になり,
汎用化したサブルーチンが使えないし.あまりメリットを感じない.
Cの方に「汎用性」があるのは,もちろん理解していますよ.
科学技術計算に特化していないし,Fortranでやれることはできる.
ただし,Fortranだとコンパイラが勝手にやってくれることを,
479氏が例示したように#defineやポインタを駆使してCでやろうとすると,
余計なことを意識する必要が生じる,タイプ量が増える,
バグが発生しやすくなる,という面倒な問題は避けられない.
483 :
478 :2005/07/12(火) 01:39:43
>>481 大域変数は,common文をずらずら書いたファイルを作っておいて,
サブルーチン毎にincludeすればOKだと思います.これじゃ,だめ?
元々,私はC使いです.Fortranを使い始めたとき,同じような不満があり,
「2種類の座標系を扱うのにCだと(まともな)構造体が使えて楽なのに」
とか,「sscanfの代わりにどうしよう」とか思ってました.
今でも装置の制御とか,可視化とか,
ちょっと複雑な文字列やファイルの処理とかだと,Cです.
ただし,私にとっての科学技術計算とは,単純な物理法則に基づく
多次元・非定常シミュレーションのことでして,
この主要部のコーディングはFortranの方が楽だと思っています.
478, 482で挙げた以外にも,配列を表すのに必要な「(),ijklmn」が
キーボード上の近い位置に並んでいて,タイプしやすいのはメリットかと.
(i,j,k) あー,打ちやすいー.
484 :
481 :2005/07/12(火) 02:29:46
>>483 > 大域変数
大域変数はModuleで定義してuse文で取り込んでます。
> 元々,私はC使いです.
そうですか・・・。それはすみませんでした。
セミコロン打つのになれてなかったり、Cに向かって打つキーが2文字とか4文字とか
少ないなんて細かいことおっしゃってるもんですから。
それ言ったらendifなんて書いてる時点でFortranの負けですよ。
+=とか使えない時点でさらに負け。
485 :
483 :2005/07/12(火) 04:20:13
>>484 endifは,初めは何それ(ぷ)だったけど,今じゃ
「エンドイフ」とか「カッコトジ」とか
口でしゃべるより,速く打てるようになったよ.(おい)
+=はごもっともですね.
でも,yank-rectangle で一発処理ということでどーすか?
バグが発生するような手間じゃないし.
で,話は変わるけど,今の学生さんは,学部時代に授業でC/C++を習うそうな.
教えているのが,情報系の若い教官で,
「Fortranは時代遅れ」とか喧伝しているらしい.使ったことないくせに!
そのオブジェクト指向野郎の好しとするプログラムが,これがまた,
しょっぼいサブルーチンの中に他のしょっぼいサブルーチンがあって,さらに...とか,
ループの中がif文,switch文だらけだったりとか.
流体屋,材料屋にとって典型的な「とても悪い例」なわけですよ,したり顔で.
で,それに感化された学生が,これまた,Fortranを馬鹿にして,
Cで,3重ループの中にoverhead発生しまくりのプログラムを書くわけだ.
小一時間(ry
とにかく,[i][j][k],あー打ちにくい...
見た目で関数と配列の区別がつかないのがそんなにうれしいか?
>>486 C使いのように,配列を
very_long_variable_name(looong_index_name, incredible_index_name)
とか書くと,関数と混同するかも.
そりゃ,配列と関数が識別できなかったら,うれしくないさ!
まず,「ループインデックスを引数にして関数を呼ぶ?」
という疑問が湧いたけど,dble(loop) とか頻繁に書くね.
ただ,配列と混同しないよ.する?慣れか?
また,他人のコードを読み解くときに,汚いと思うことはあっても,
ループ内で関数と配列を混同して困ったという経験は皆無だね.
当然,この未経験は一般化できないが,
自分の研究分野の場合,ループ内は似た形式の配列ばかりで,
紛らわしい関数が稀で,要するに,高い規則性に起因するのだろう.
他分野のシミュレーションの多くも同様だと思う.
配列と関数を混同する可能性のあることがFortranの欠点の1つ,
という事実は否定しない.しかしながら,この識別性の問題は,
変数の命名則や計算内容に由来するものであって,
十分に判別できる状況であれば,全く気にする必要はないかと.
万が一の混同の可能性があるからといって,
FortranからCに乗り換えなくては,とならないな.
>487 長文の割によくわからん 命名則で関数と配列は区別できる と言いたいらしいのだが 他人が書いたコードと格闘しないのならそれでもいいか >485 [i][j][k]程度が打ちにくいなんてアホか? どの言語がいいかなんて動かす環境(とその環境でのコンパイラ)で変わってくるから 単一解はないと思うが 情報系の人間が速度的な面を無視するコードを書くのはよくあることだけどね そういう人間は1回の計算で数日かかるようなものを書いたことがないから
結局、言語よりも書く人間のレベルの問題
490 :
487 :2005/07/15(金) 19:23:23
>>488 Fortranを推しているのだが,正直,アホなことしか長所は思い浮かばない.
でも,プログラムの多くが[i][j][k]で占められていると,
打ちにくいのは本当に嫌になってくるんだよ.
>>490 プログラマーではなく、キーパンチャーの発想w
>>488 昔のベクトル計算機だと,同じようなプログラムでも,
スピードはFortranの方が圧倒的に高かった.
Cの方が自由度が高いので,誤る可能性のある構文は
ベクトル化しないという,コンパイラの仕様に問題があった.
それで,やむを得ず,Fortranに乗り換えさせられたのだが.
もちろん,現在の状況は知らん.が,コンパイラにとって
Fortranの方が,高速化可能かどうかの判断は簡単だと思う.
今の若い学生の多くは,初めからCを使えて,器用なのだが,
些細なことでもサブルーチンを呼びたがるし,
コンパイラが最適化してくれないものを書いてくる.
情報系屋の書いたものを参考にしてきたからだろう.
Fortranの文献は少ないが,数値計算ばかりなので,
コンパイラが最適化してくれそうなプログラミングを
学ぶにはよいと思ってるんだが.
Cでは,[i][j][k]が打ちにくい,というのもあるが, アドレス割当が飛び飛びで,メモリが無駄になるので, まず,これは使わない.一次元配列にして,さらに, 以下の定義を使って簡単化しています. #define ijk(i,j,k) JMAX*KMAX*(i)+KMAX*(j)+(k) こうすると,多重ループを使わなくても書けるときに, Fortran(77) よりも最適化してもらえるなー. ただ,例えば,負のインデックスを使うため, 定義を書き換えようとすると, 自分は480のようなミスをやらかさないわけがないんですよ. ポインタと格闘してうまくいくと,一仕事した満足感が得られるのだが, やはり,頭を使わず負のインデックスを使いたいな.
494 :
488 :2005/07/15(金) 23:08:42
>492 ベクトル計算機でFortranが優位だったのは同意 現在のPCレベルの演算能力で何とかなる(含むクラスタ化)計算の場合 Fortranが優位かどうかは不明 #Cの方が優位なコードがかける気もするが >些細なことでもサブルーチンを呼びたがるし サブルーチン化することが悪とは必ずしもいえないので もちろん、その速度面に対するコストを把握しての上でなら
>493 >#define ijk(i,j,k) JMAX*KMAX*(i)+KMAX*(j)+(k) これだと毎回演算発生しないか? メモリはリニアに確保して、ポインタ配列(3次元ならポインタ配列の配列)作らない? doubleの配列 A[0..n][0..m]なら double** A = (double**)malloc(sizeof(double*)*(n+1)); A[0] = (double*)malloc(sizeof(double)*(n+1)*(m+1)); for(int i=1; i<=n; i++) A[i] = A[0] + m + 1; もちろん参照用のポインタ配列分のメモリは消費するけど
>492 >コンパイラが最適化してくれそうなプログラミングを これを言っているとCに勝てない ハード系のプログラムでは必須だから 場合によっては、コンパイラがはき出したコードを確認しながら非力なCPUで最適化 必要クロック数数えながらコード書く場合もあるから 数値計算でも簡単になるだけで(割込みとか考えなくて良い分)いっしょ
497 :
495 :2005/07/15(金) 23:29:53
>493 >負のインデックスを使うため, doubleの配列 A[1..n][1..m]なら double** A = (double**)malloc(sizeof(double*)*n); A[0] = (double*)malloc(sizeof(double)*n*m); A[0] -= 1; for(int i=1; i<n; i++) A[i] = A[0] + m; A--; これの逆のポインタオフセットかければ負のインデックスもできる このままだと確保、解放がめんどくさいので配列のメモリ管理だけC++でクラス化するとか
>>495 KMAXとかが変数だとA[ijk(i,j,k+1)]とA[ijk(i,j+1,k)]の間にエイリアスが無いということを
コンパイラは仮定できないのでその点はマイナスだが、
定数なら最近のコンパイラはうまく処理してくれるようだ。
あと、掛け算で書いていても、固定ストライドアクセスならアドレスの計算で実際に掛け算を
するなんてことはない。
mallocは、エイリアスの問題もあるけど、要素へのアクセスが間接参照になるので
各行の長さが全然違うという場合を除いては積極的にやるべきものではないと思う。
性能に、大差ないことも多いけど。
499 :
492 :2005/07/16(土) 00:01:28
>>494 クラスタ計算だと,メジャーなCの方が,
何かと新しい技術の恩恵を受けられやすいと思う.
サブルーチン化の善し悪しは了解なんだけど,とにかく,
若い人の多くは,頭ごなしにFortranを古いマイナー言語だと馬鹿にして,
Fortranを学んだら当然の,コンパイラが高速化してくれそうなプログラム
を書いてくれないんだよ.情報系の人が教える悪い例だとか言ってるし.
500 :
名無しさん@3周年 :2005/07/16(土) 00:07:38
「フランス語は数を勘定できない」と驚愕の発言した 石原都知事なら、 「FORTRANは、ファイルの読み書きができない」、 「プログラミング言語としては失格」などと言うかな?
501 :
492 :2005/07/16(土) 00:42:20
>>495 メモリ確保の融通が必要になる場合は便利だろうけど,
なんかとても頭を使うなー.
Fortran学んだら最適化しやすいプログラムを書くようになるってのも行き過ぎでは? 命令セットレベルでどうなるかわかっているかどうかが重要なので。 あと、Cの関数呼び出しの引数は、基本的に参照渡しじゃないので、Fortranと違って、 load/store命令を一切使わないでも行える場合が多いんで結構軽い。 しかも命令キャッシュの節約に貢献するので、早い場合だってありうる。 ここらはIPOとかコンパイラがまだまだ改善してくれる余地があるんじゃなかろうか。 if文についても最近のCPUは分岐予測が結構当たったり、条件付実行/代入とかの命令が 使えるCPUもあるので一昔前と違い、以外と軽い。 Fortranが進化したのと同様にCPUやコンパイラも進化しているってことも Fortran信仰が薄れてCでいいじゃんていう流れを後押ししていると感じる。
503 :
492 :2005/07/16(土) 02:52:37
>>502 別にFortranでなくてよくて,確かに言いすぎですね.
ただ,Cをちょっとかじって,シミュレーションをやりたいと言って,
「命令セットレベルでどうなるかわかって」
くれるようなそこまで素晴らしい子は周りにいないのよ.
自分は,意識が昔のベクトル計算機ユーザーのままだからか,
一見して高速化可能とコンパイラに判断してもらえるような
論理を理解してほしいわけなんだが.
まあ,今は,すでに,コンパイラが総合的に判断して
勝手にインライン展開したりとか,
PCのCPUが演算の先読みをしたりする夢のような世界なので,
手作業による最適化は,今後,どんどん不要になっていくのだろうな.
そして,マイナーなFortranは淘汰されて,我々の職人技は無駄になり...
だからお前がジジイすぎんだよ。 いい年こいて、進歩が止まったままの脳でプログラムなんか書いてるな!ったくよ。
505 :
495 :2005/07/16(土) 09:32:35
>メモリ確保の融通が必要になる場合は便利だろうけど, >なんかとても頭を使うなー. こういう部分だけC++を使うと、完全な隠蔽化を犠牲にすればオーバーヘッドなく管理しやすくなる テンプレート化すればなお楽 >498 >要素へのアクセスが間接参照になる ごめん意味がわからん
>手作業による最適化は,今後,どんどん不要になっていくのだろうな. >そして,マイナーなFortranは淘汰されて,我々の職人技は無駄になり... あくまで言語は道具 目的にあった、最適で、もっとも楽なものを使えばよい どのような言語であっても、「状況に応じた」最適なコーディングは変化するし
>>505 A[i]をmallocで確保した場合、a[i][j]にアクセスするにはまず、
a[i]をメモリorキャッシュから読み込まないとa[i][j]のアドレス(a[i]+j)が計算できない。
ので、a[i][j]のloadは、a[i]のloadを待たないとだめな場合がある。
そこでメモリアクセス遅延が生じる可能性があるんよ。
さらにこれがjに関するループでもa[i]が一定という仮定をコンパイラがやらない場合さえある。
a[i][j]に書き込む場合、&a[i][j]と&a[i]がエイリアスになってる可能性だって無いわけではないから。
さすがに、a[i]とa[i][j]は型が違うからコンパイラオプション等で救済はあるようだけど。
508 :
503 :2005/07/16(土) 19:26:20
昔,何日もかけて手動最適したプログラム (姫野ベンチのような3D Poisson方程式. 2方向をFFT,1方向を差分で離散化.Fortran77. 約400万自由度) をifc8 で以下のようにコンパイルして, @手動最適あり+IP最適なし A手動最適なし+IP最適あり 比較してみた.Aの方が20%も速いんですけど... すごい. 当時,業者から借りた診断ツールでチェックしながら, ソースレベルのオーバーヘッドを極限までなくしたつもりだったんだが.
手動最適あり+IP最適あり はどうなの? 姫野ベンチは最適化かけるともっと効いたような記憶が。
510 :
名無しさん@3周年 :2005/07/16(土) 22:07:48
>ソースレベルのオーバーヘッド ってなんだ? サブルーチンをコールしない、メインにすべて書いたということか?
手動最適化って、なんなのか気になる。 コンパイラができなそうなのがブロック化とパディングで、 コンパイラと競合しそうなのはアンローリング、SIMD命令、プリフェッチかな?
512 :
名無しさん@3周年 :2005/07/18(月) 15:25:54
>>507 あのなぁ。
速度がはじめから必要というならmallocなんか使わず、固定領域をはじめから作っとけ。数値計算であれば固定域で問題ないだろ?
513 :
名無しさん@3周年 :2005/07/18(月) 15:58:12
>>507 IPってなんだよ。
おれの分野だと全く違った意味なんだよ。
人に通じるように書けや。ボケが。
俺ならMLでスマートに書くけどね。
515 :
名無しさん@3周年 :2005/07/28(木) 14:20:55
.┌━┐ ┌━┐ ┃┌╋──╋┐┃ └╋┘ └╋┘ ┃ ・ ・ ┃ ┌━━┐ ●━╋┐ ┌╂━━━━╂┐ ┃ └━┷┴━━╂┘ └╋━┘ 同じスレにはコピペ ┌╋┐ ┌╋┐ できるけど、違う ┃└╋╋━━╋╋┘┃ スレにはコピペでき ┃ ┃┃ ┃┃ ┃ ない不思議コピペ ┃ ┃┃ ┃┃ ┃ └━┘┘ └└━┘
516 :
名無しさん@3周年 :2005/08/08(月) 00:27:31
やっぱふぉーとらんだねー。 簡単だからさっ。ぐちぐち悩んでるより、ぱしぱし書いた方が良いよ っていうか、matlab好き(^^♪簡単だし、いっぱい関数あるから。 matlabが早かったらmatlabで書きたいくらい。
cとfortranという比較が既にアレだな。 c++とfortranでc++に軍配があがって終了だろ
言語としての機能云々より、 科学技術計算に関してだけでいえる事だがC/C++はFortranユーザを取り込めてないってのが現実
というよりfortranユーザーが取り残されてるだけ
んなぁこたあない、 FORTRANで書かれた膨大なプログラムが山ほどあってかつ他言語に乗り換えるメリットがほとんどないものもいっぱいある。 あと、もっとも数値計算ライブラリが充実してるのはいまだにFortranだ。 C++にしてもExpressionテンプレートなんか一見よさげでも結局適用範囲が限定されてるのもあるしな。
521 :
名無しさん@5周年 :2005/09/03(土) 19:58:08
fortranってまだあるの?
522 :
名無しさん@5周年 :2005/09/04(日) 01:49:59
松本「いま選挙にケバいオバハン連中でてるでしょう?」 聞き手芸人「はい」 松本「で、どこのテレビも、美人候補や!美人候補や!いうてるでしょう?」 聞き手芸人「マドンナや!とかゆうてますねぇ」 松本「でも、あんなかにSEXしたいヤツおるか?」 聞き手芸人「おらへん(笑)おらへん(笑)」 松本「なんか地方のピンサロの"ハズレ"みたいなオバハンばっかりやん!」 聞き手芸人「たしかに、水商売風のファッションですよねぇ」 松本「あぁいうあからさまなブサイクをですよ、美人とかマドンナとか呼ぶの無理ありまくりちゃうん?」 聞き手芸人「そのブサイクのなかでも、誰が一番キツいですか?」 松本「ナンバーワンのブスを選べっていうことかぁ?」 松本「そやねぇ〜 枡添の元オクサンは、80年代の服まだきててナフタリン臭そうやね」 聞き手芸人「カビ生えているかもしらん(笑)」 松本「不倫しまくって地位築いたっていう岐阜の刺客女は、日本版アニータそのものやろ(笑)」 聞き手芸人「あ〜横領事件の」 松本「まだチッチョリーナのほうがいさぎエエわ(笑)」 聞き手芸人「イタリアの国会議員ね」 松本「いっそのこと亀井も女刺客つかったらええねん。AV女優とかどんどん出したれよ」 聞き手芸人「AV女優に落とされたら、そりゃ相当ヘコみますね(笑)」 松本「お前でもヘコむんか(笑)」
523 :
名無しさん@5周年 :2005/09/23(金) 20:29:08
コンパイラ次第だね。長年 VC 使ってて、ある時 IntelC で コンパイルしたら、速度の向上ぶりに驚いた。 IntelのCPU使うならIntelCがオススメ。 ちなみにマイクロソフトはC#に今後力入れるので C、C++、MFCあたりはやばい予感。
524 :
名無しさん@5周年 :2005/09/25(日) 16:40:00
...そうかな。
MFCてMicrosoft Fortran Compilerか?
526 :
名無しさん@5周年 :2005/10/03(月) 09:47:07
Microsoft Foundation Class Library (C++で記述されたWindows用クラスライブラリ) 次期Windowsが成功すれば,C#主流の流れが加速されるかもしれないが 数値計算の世界からは遠くなるような気がする. C++も数年後には言語使用や標準ライブラリが見直される と思うけど,相変わらずマニアックな仕様だろうか? 言語は所詮,言語であってC++のように言語自体の自己主張 が強すぎるとマニアックな傾向になってしまう.初心者に 優しい仕様になってほしい.
527 :
名無しさん@5周年 :2005/10/03(月) 09:53:14
言語使用→言語仕様
528 :
名無しさん@5周年 :2005/10/09(日) 23:16:30
Cを使わずにFORTRANつかってる学生は、 なんかムカつくヤシだったな。
C++はごちゃまぜ言語だから、現状の延長でのスペック改定にならざるを得ないんじゃないか? 今更多重継承は無くせないだろうし。 やるとすればC#のインデクサ、インターフェースクラスの導入、 =0はあまりに不細工なのでabstruct修飾詞認めるぐらいじゃないの。 あ!テンプレート引数にdoubleとか認めるとかすると大きくプログラミング手法が変わるかもね。
530 :
名無しさん@5周年 :2005/10/11(火) 20:03:49
あと言語仕様としてスレッド操作もサポートしたほうがいいよな
531 :
名無しさん@5周年 :2005/10/17(月) 01:15:07
Java++に期待する。
532 :
名無しさん@5周年 :2005/10/17(月) 01:58:10
インテルC、欲しいなぁー。でも予算がとれん・・。
533 :
名無しさん@5周年 :2005/10/17(月) 10:55:58
Why? インテルC++はWin/Linux共無料だぜ。
534 :
名無しさん@5周年 :2005/10/21(金) 08:47:38
数値計算というのは具体的にどういうコードになるのだか知りませんが たとえばCやC++には複素数や行列のクラスはありませんから そういうクラスを定義したほうが分かりやすいんでしょうかねー。 Boostバリバリ使用中ですっ!て人いらっしゃるのかな。 それなら数学用言語を選んだほうがいいですか…。
535 :
名無しさん@5周年 :2005/10/21(金) 12:11:35
>C++には複素数や ハァ?
行列演算はともかく、複素数はC99にもある。
C++の複素数や行列のクラスは、探せばある つーか、自作できるだろ、こんくらい
>C++の複素数や行列のクラスは、探せばある C++の複素数クラスライブラリはISOで標準化されてる。なんで探す必要があるんだ?
>つーか、自作できるだろ、こんくらい 遅いライブラリなら学生のお遊びでいくらでも自作できるだろうが、 Expression Templateを使ったマトリックスクラスを自作してみな。
も〜、そんなムキにならなくたって〜 どうせすぐおわる計算ばっかりのく・せ・に♥
541 :
537 :2005/10/23(日) 21:28:38
>>538 >>534 は標準化されてるかどうかも、知らないだろうが、猿
始めにもう入ってるライブラリから探しゃいいだけだろうが、揚げ足取り万能信望者
たまたま知ってたからって鬼の首でも取ったつもりか、厨房
>>539 遅かろうが何だろうが、自作すりゃ理解するのに意義があるだろうが、要領いいだけの中級人材
542 :
名無しさん@5周年 :2005/10/24(月) 16:11:33
>>糞の537へ >たまたま知ってたからって鬼の首でも取ったつもりか、厨房 Complexクラスそのものを知らんかったようだな。ええ?アホ学生の537よ。 まさにアホの活け造り。人の質問に答える暇があったら勉強しろ。おまえがやることは テメエの頭の上のハエを先ずは追い払え。アホ。 >遅かろうが何だろうが、自作すりゃ理解するのに意義があるだろうが、要領いいだけの中級人材 >つーか、自作できるだろ、こんくらい 車輪の再発明が得意中の得意か? よかったなぁ。無駄な時間を使う暇がいっぱいあって。 糞学生のおまえにとっちゃ研究以前の自作して過程を理解するのが精一杯だろうて。 卒論書くのに四苦八苦 大笑い。 どうせ、研究はこの3月までで、4月からは糞企業でこき使われるだけだから、理解なんかしなくていいよ。 あ・ほー
543 :
名無しさん@5周年 :2005/10/25(火) 07:50:02
便乗質問。ちょこちょこっと使えるCで書いた行列演算ライブラリってないでしょうか。 サイズを自由にできて、逆行列と固有値あたりが計算できるやつ。
>>542 >車輪の再発明
まだこんなこと言う奴がいるとは
一種類の車輪が、旅客機でも装甲車両でも自動車でもイスのキャスターでも使えると思ってるのか?
最適な部品を用意することを知らない奴には、品質という概念がないな
韓国や中国の会社がお似合いだよ
日本でなら、やっつけ仕事で自転車操業でもしてなさい
自転車用の車輪使ってw
C?gslはどうよ?逆行列があるかどうかは知らん。 C++ならnewmatというのがちょこちょこっとつかえる行列ライブラリ。こっちは逆行列はあったはず。 あとTNTも逆行列はあったと思う。すぐに使いこなせると思う。 Expression Template を使ったBlitz++ は原理的に逆行列実装は大変困難で実際提供されてない。 用途にもよるが、使いにくい & 数値計算に必要な機能が少ない & 改造は大変困難。テンプレートを駆使した実装に興味ある人以外はお勧めしない。 無難なのはliboctave、歴史も長い。機能も充実。
546 :
名無しさん@5周年 :2005/10/25(火) 11:20:50
>>544 糞学生は戯言ほざいてないでcomplex クラスの使い方でも覚えろ。アホ
既に存在するものを調べてできるだけ有効利用して、足りない部分は新規に開発するなら正当なやり方だが、 アホのお前のやり方は、何も調べず突撃するだけ。 マヌケ丸出し。お笑い。ドンキホーテ。
548 :
名無しさん@5周年 :2005/10/25(火) 12:59:30
学生を罵倒してる奴って、社会人なのか? 随分品性が低いな
きっと会社でたたかれまくってストレス溜まってるんだよ。 そっとしておいてやろうよ。
552 :
名無しさん@5周年 :2005/10/26(水) 00:43:16
>> 545, 548 ありがとうございます。 ちらっと見たところでは(書き方の古さはともかく)548さんに 紹介していただいたのが動けば用は足りそうですが…。 ま、マニュアル!?があるようなので見てから考えます。
553 :
名無しさん@5周年 :2005/10/26(水) 01:39:49
社会人ならば必ず分別がある、ってんなら刑務所はいらんわな
なんだこりゃ、 久しぶりに盛り上がってると思ったら・・・
557 :
名無しさん@5周年 :2005/11/01(火) 03:58:22
GNU Scientific Library使ってる人いますか? これ使って行列の和のプログラム書くにはどうすればいんでしょうか? なんか、このライブラリ癖があるように感じるんですが・・・
すこぶるアホだな。 行列の和のプログラムごとき自分で作れ。 AddMatrix( double *a, * double *b, double *c, int nm ) { for( ;nm == 0; nm-- ){ *c++ = *a++ + *b++; } }
>>558 違いますよ。GSLを使った書き方ですよ。
557 自己解決しました。すみません
死ね
562 :
名無しさん@5周年 :2005/11/17(木) 22:45:29
エイリアスの問題を解決するためにイロイロやってきたんじゃん。ちゃんと嫁
564 :
名無しさん@5周年 :2005/11/17(木) 22:58:50
色々やったところで論理的に限界がある。
イロイロやらなくても楽に速いプログラムが書ける方がいい。
566 :
名無しさん@5周年 :2005/11/18(金) 00:05:30
>Cもポインタがあるので、高速化を望ならFortranでしょう。 どういう意味だ?アセンブラにもポインタ相当の間接アドレッシングは普通のCPUなら用意されてるわけだが。
567 :
名無しさん@5周年 :2005/11/18(金) 00:41:36
アセンブラはコンパイラで翻訳しませんからねぇ。
アセンブラ級の低水準命令つかいまくりんぐでコンパイラが最適化をどうやったらいいかわからないという、自由度の高さがアダになってんのよ。 その点fortranは構文が硬直化してるので、制約の大きさがコンパイラにとっては楽ちんな罠。 まあC++でも、制約条件を設けたクラスを用意して高速化するとか可能ではあるんだけど、STLの某コンテナは……
569 :
名無しさん@5周年 :2005/11/18(金) 02:48:41
科学技術計算に限ればポインタの使い方なんて for( i = 100 i > 0 ; i-- ){ *x++ += *y++ * *z++; } ぐらいだろ?インテル系のように直接指定できるレジスタが少ないCPUでなければ、 x[i] += y[i] * z[i]; なんて書くより早いはずだ。
570 :
名無しさん@5周年 :2005/11/18(金) 03:25:31
>>562 C++のようなオブジェクト指向言語じゃなくて、
C++を使ってハードウェア条件を考慮せずにメモリアクセスを無駄に増加させる場合という意味だろ?
オブジェクト指向は決して現状のハードウェアにとって効率のいいアプローチじゃないのは間違いないが、
C++を使って限りなくCに近く記述すれば、Fortranの最適化に比べれば多少劣ることはあってもほとんど問題ないはずだ。
Cのポインタの問題(C++にはそこに書いてるのは別な問題があるようだけど)にしろ、もしポインタを使って遅くなるような処理系なら
使わない選択肢だってあるわけよ。配列の行、列のアクセス順と0から始まるインデックス以外はほとんどFortran風にかけるはずだ。
あと、
C++にしても、例えば Matrix A,B,C,D;で
A= Inv(B) * C +D;
と書いて、メモリコピーに時間がとられているようなら、別途高速化のためにC風の2項演算用の関数をしておけばいい。
C++だとそういう選択の自由だってあるし、テンプレートを使えばループのアンロールだってやってくれる。
テンプレート機能のない他の言語だとこうはいかない。処理が短くてループ処理のオーバーヘッドを無視できない場合は是非使いたい機能だろ?
限りなくCに近いコードで適所にテンプレートによるループのアンロール機能をすれば、普通にCで書くより速いと思うけど。
それと、そこに書いてるExpression templateは和や積程度ならいいけど、逆行列のように行列のひとつの成分の算出に全行列成分が絡んでくるような場合は、
ほとんどやる意味ないと思うわ。Expression templateで逆行列作った人いる?もしいたら感想を聞きたいんだけど。
571 :
名無しさん@5周年 :2005/11/19(土) 11:57:27
でも、オブジェクト指向を勉強して、それで自然にプログラミングをすると とっても遅いプログラムになる可能性が高いということでしょう。 C++を使ってCに近いコードを書く、とかCを使ってFortranに簡単に変換できる 様なコードを書く。それでFortranに近い性能を確保する、というのは たぶん可能なんだと思うけど、あまり嬉しくはないのではないだろうか。
数値計算の奥深くはどうせ単純なループなんだからそういうとこだけは古式ゆかしきコーディングスタイル。 その他のところはOOPでざっくり。 全体をfortran的に書くような屈辱的なスタイルをわざわざとらなきゃイカンと思う必要はないわな。 どうせ全体の処理時間の8割は2割のコードが負担する。そこをピンポイントで叩けばよい。
>>571 OOが目的じゃないだろ?多くの目的においてOO的プログラミング開発をすれば開発、保守でいいことが
あるんじゃないかな?って話。
実行速度だけみれば絶対に速くならん。そりゃそうでしょ、OOは実体を仮想的に計算機の上に構築してる
わけで、計算機の都合なんか二の次。速くなるはずがない。
それでもC++だとOO的プログラミングも手続き型プログラミングもどっちでもいけるから数値計算にも使えるってこと。
何がなんでも数値計算を効率よく(プログラミングも実行も)やろうと思えばFortranの牙城はいまだに崩せてない。
ライブラリもオプティマイズも。
それ以外の目的(将来数値計算以外のプログラミングで飯食うかもしれないので今のうちに慣れておきたいとか。。。)
があるからC++やらOOやらを考えてるわけだろ?
数値計算をもっとも効率的にこなしたければ電卓代わりにMatlab使って、ある程度目処がついたら
Fortranでプログラムがお勧めだ。
>>571 OOを勉強するのはいいとして、
一般的なことをいうと既に手順が明示された数値計算プログラムでわざわざOOが必須の場面なんてほとんどないよ。
>>570 でC++の利点かいたりしてるけど決してOOを使えることが数値計算上のC++の利点なんて言ってないよ。
・演算子の多重定義 --> 見やすい
・テンプレートを使ったループのアンロール --> 実行時ループ判定不要になって速度改善
ってことしか書いてない。
A=Inv(B) * C + D;
なんて別にOOとは全く関係ないテンポラリメモリコピーのオーバーヘッドだから。
端的に言って、プログラム構造からすればOOか非OOかは継承機能を使うかどうかだ。
数値計算で継承を使いまくる場面があるかどうか考えてみればいいよ。
575 :
名無しさん@5周年 :2005/11/19(土) 16:23:04
分かんないんですけどMathcadとC言語ってどう違うんですか? Mathcadは数式を視覚的に入力できるメリットが大きいんですが。。。
茶化してる?
577 :
名無しさん@5周年 :2005/11/19(土) 16:32:20
茶化してるのではなく、汎用性がCの方が高いということですか?
>>575 Mathcad → 科学技術計算・ドキュメント作成支援に特化したソフトウェア
C言語 → コンピュータ上で動くプログラムを作成するための言語
Mathcadで事足りるんなら、それはそれで良い。
どちらも目的(科学技術計算)を達成するための手段でしかないのだから。
難しいことはよく分からんけど、 要はクソめんどくさい事をすればC++でも Fortran程度のスピードはでますよってコト? 何も考えずに今使ってるシミュレーションプログラムを記述すると Fortranの倍近くかかるぽ。
クソメンドクサイことをしなくても人間の思考は、コーディング量が少なければ、本来手続き型プログラミングを考える方が はるかに向いてる。OOっていうのはコーディング量が大きい場合にこそ意味がある。 手続き手法に基づいてプログラムすればFortranであろうがCであろうがC++であろうが、差はほとんど誤差だ。 コーディングスタイルを変更して、OOやるとコーディング量が減るとでも思ってるのか? あと、オブジェクトのテンポラリコピーを多用させなければOO流儀に基づいてプログラムしようが速度的に 許容範囲のものができる。コーディングしててそのことに気づかんようなアホなら初めからOOなんかに手を出すなってこった。 >何も考えずに今使ってるシミュレーションプログラムを記述すると >Fortranの倍近くかかるぽ。 倍で済むと思ってるのか?ソフトウェアはな、ちょっとした配慮をするか否かで簡単に一桁違ってくるんだよ。 どうせ学生なんだろうがとっととコーディングして結果出さんと卒論間に合わんぞ。 これからOOなんかやってる暇あるのかい?OOはC++の教科書読んだだけでは簡単に身につかんぞ。
>>575 Mathcad,Mathematica,Mapleはいずれも数式処理をこなしてくれるソフトだ。
特にMathcadはエディタを使って数式どおりに入力すれば式計算してくれる。
Matlabは数値計算と可視化をあわせたソフトだ。
Cを使った科学技術計算というのは、Matlabの数値計算でさらに速度を稼ぎたいような場合に意味がある。
中には数式処理をCでやる情報処理分野の研究者も居るかもしれんが、Cは本来人工知能的な目的には向かない。
いったんCを使って処理システムを作ってその上で処理させるのが一般的な手法。
まあいざとなりゃcからfortranのサブルーチンを呼び出したっていいんだから。 速度の問題は入念なアルゴリズムの選定と、それなりの実装への気遣い。 まずもって重視すべきは簡単に組めてそれなりの結果を出すこと。 必要なら速度の向上や規模の拡大を行うこと。 結局回答のひとつは573の「電卓代わりにMatlab使って、ある程度目処がついたらFortranでプログラム」 ちょっと違うやりかたというか、仕切り線がかわるが、GUIやプリポストをc++でOOP的に組んで、ソルバはbetter c(c++のc的使用)というのもある。 そんな自分はというと、あえてExcelでvbaを走らせて、本格的なシミュレーションは市販ソフト
583 :
名無しさん@5周年 :2005/11/21(月) 22:06:57
ところであなたたちは何をシュミレートしているのですか? ちなみに自分はあるデバイス中のキャリア伝送ですが。
>>580 回答ありがと。大した規模じゃなきゃ変わらんはずなのね。
そうすると、単にコーディングの仕方が悪いだけなのかな。
メインルーチンは、ほとんど配列の隣の要素同士を四則演算して
ループするだけなんだけどなぁ。
C++にしたいのはユーザインターフェイス周りが作りやすいから
ってだけ。もちろんシュミレーション部とインターフェイス部を
別々の言語で記述してもいいんだけど、同じ方が受け渡しがやり易い。
FortranとC++じゃファイル出力取っても正確に同じじゃないし。
学生ではないが、モノ作るための参考程度のシミュレーションのための
コーディングなので、プログラミングについては詳しくない。
シミュレーションなんて一切せずにモノ作ってる人のが多いしね。
>>584 なるほど、大体わかったけど、C++でユーザインターフェースは決してやりやすくないと思う。
単純にGUIにしたいだけならTcl/Tkってのがあるけど。
とりあえずユーザインターフェースは後回しにしてメインの部分だけC++で作ってみればどうよ。
引数の引き渡し方と計算結果の出力の仕方だけ仕様を決めといて、それはあとから考える。
引数の引き渡し方なんて製品でもなければバッチファイル作ってしまえばどうとでもなるし。
計算結果の可視化あたりもわざわざ自分で作らなくても探せばそこそこ使えるものがあるんじゃないの?
もっと実用に即したことを言うと、、、
何をシミュレーションしたいかわからんが、技術屋が必要とするようなアプリケーションは大抵市販されてる。
もっと汎用性のあるMatlabとかOctave/gnuplotやScilabあたり確かめた?
Cと比べてはるかにプログラミングが楽だし、数値演算に必要なライブラリもほとんど揃ってる。
自分で作った数値演算ライブラリの試験するの大変だよ。
なによりOctaveやScilabは無料だし。
>>584 >メインルーチンは、ほとんど配列の隣の要素同士を四則演算して
>ループするだけなんだけどなぁ。
そのプログラムのどこが一体オブジェクト指向なんだ?
>C++にしたいのはユーザインターフェイス周りが作りやすいから だからでしょ。 メインルーチンってか、ソルバが、だろうね。普通GUIまで含めた設計ならメイン関数で計算するはずないから
CUIベースでもメインルーチンで主要な計算はやらん。getoptで解析したスイッチを割り振るだけ。 クラスつーかプログラムの構成とかモジュールとかの粒度を一切考慮してねえのにオブジェクト指向もへったくれもない罠。 ごちゃごちゃ考える前にとっとと手を動かせば?って話しだと思う。 悪いことは言わんMatlab使え。ど素人でも半日もあればプログラムは完成するはずだ。それがなければOctaveダウソしてとっとと仕上げろとせ。
最後にごみ入ったみたい "とせ"削除
>CUIベースでもメインルーチンで主要な計算はやらん。 ああ、いや原則論としてはそうなんだけど、実際問題は…… サブルーチンがどこにも見当たらずに延々と続くメインルーチンという恐ろしいものを生産し続ける人達も世の中にはいるんです。 親の顔がみたいわ
そんなことも親の問題になるのか。
592 :
名無しさん@5周年 :2005/12/03(土) 19:47:12
>590 とことんまでチューニングすると、そうなるらしいよ。
それはインライン展開もできないfortranみたいな旧式言語の話ではなくて?
インライン展開やマクロ展開できればそんなメイン関数ひとつなんてありえないし、 する必要もない。大体そんなプログラム書く奴はオブジェクト指向どころか構造化プログラミングからやり直せ。 ローカル変数の概念のないアセンブラでもN88 BASICでもそんな書き方はしない。
595 :
名無しさん@5周年 :2005/12/12(月) 23:21:40
>std::vectorの割り当て >std::vectorの割り当てはのろいnew, deleteを用いるので >ループ深部ではあらかじめバッファを作成しておくこと どんな感じで作成すればよいのでしょうか?
なんかループの中で無意味に割り当てと解放を繰り返してるんじゃね?
597 :
名無しさん@5周年 :2005/12/15(木) 23:01:20
Fortranでもインライン展開ぐらい出来ますよ。
え?標準のfortranにインライン機能あったんだ
599 :
名無しさん@5周年 :2006/05/02(火) 16:31:46
はぁー、死にスレ
>595 reserve >598 標準には無い。 コンパイラ指示行かコマンドラインオプションで(環境依存)。
601 :
名無しさん@5周年 :2006/07/19(水) 01:34:36
上げます
602 :
名無しさん@5周年 :2006/07/19(水) 03:23:04
標準といえば、Fortran90の自由形式でも、いまだに1行あたりの文字数に制限がある。 この制限をかたくなに準拠しているコンパイラがあって驚いた!
603 :
名無しさん@5周年 :2006/07/28(金) 23:34:02
>>602 むしろこの制限に準拠していないコンパイラの方が珍しい。
Fortran2003でもやっぱりこの文字数制限は変わらないんだよね…
>1行あたりの文字数に制限 これに拘るメリットってあるのかな? 別に文字数制限がないとコンパイラが最適化しにくいとかあるの? 他の言語を見習ってもうちょっと使いやすくなってほしいなぁ
バッファオーバーランw
うちの研究室もFORTRANしかだめだったな〜 Cで書いたら教授が"私はCを知らないから指導のしようがない"と 困ってたことがある。つまり日本ではFortranの方が計算式の評価や検討には 絶対有利だよね。 複雑な科学技術計算をCで書くならひとつだけアドバイスが出来る。 絶対にポインタを使わないこと。後で死ぬような地獄を見たくなければ…
607 :
名無しさん@5周年 :2006/09/24(日) 15:03:20
世の中からFortranが駆逐されない限り、スパコンの運用もこれ以上ナンも変わらないと思う。 全部Javaで書けばなにかが変わる。
608 :
名無しさん@5周年 :2006/09/24(日) 23:33:59
609 :
名無しさん@5周年 :2006/09/25(月) 00:12:44
Javaとか言ってる時点でネタだろう
世の中Fortranしか知らない役立たずの研究者ばっかだから、 Javaなど使いこなせるわけもなく、OOすら理解できず。 だからFortarnが生き残っていけるのさ。
612 :
FAQ :2006/10/22(日) 00:25:10
Cの方が汎用性があるけど、Fortranは楽でいいよ でも両方使えればいいんじゃね
Fortranで済む研究ならそれでいいじゃない 道具をあれこれするのも楽しいけどね
614 :
名無しさん@5周年 :2006/11/03(金) 13:44:02
FORTRANは一見楽そうな言語に見えるけど、読みにくい プログラムをついつい作ってしまう。 また、FORTRANではプログラムをある程度完成しないと 走らせることができない。ということはバグの場所の特定が難しい。 C言語やC++のようにとりあえずここはダミーの関数 を仮においといて、部分的にテストしていく、というのが やりにくい。 結局、学生がFORTRANで数千行の数値計算プログラム を組むと、3ヶ月から半年動かないということも珍しくない。
615 :
名無しさん@5周年 :2006/11/09(木) 20:59:59
>>614 技術計算は全部完成させなきゃ動作確認できん訳で、数ヶ月動かんなんてCで書いても状況同じ。
部分部分だけ観察しても意味ないのでね。
演算量多いからデバックも難しい。文法簡単なFortranが楽だが今時は古いね。
616 :
名無しさん@5周年 :2006/11/11(土) 02:20:09
>>606 遅レス。俺はプログラマーになりたかったんで、Cが使いたかったの
でも教授が分からないからってんでFortrun使わされた。
おまけに他の学生にBASICのレクチャーまでさせられた。
617 :
名無しさん@5周年 :2006/11/11(土) 03:52:11
c++用の数値計算クラスライブラリーってある?
618 :
名無しさん@5周年 :2006/11/11(土) 12:02:50
@ boostのuBlas A Blitz++ B Lapack++ @は実際にダウンロードして使ってみたが、自分のVC++.net2003の 環境下では、エディタで特定の文字列を入力するとハングアップする という不思議な現象が発生した。sampleプログラムを見ても自分は その仕様が好きになれなかった。 Blitz++は使ったことがないが、実行速度の速さでは世界最速では なかろうか。しかし、template機能使いまくりで古いコンパイラ ではソースコードをコンパイルできない。また、ちょっと複雑な 行列計算では、コンパイル時間がものすごくかかることを覚悟して おいた方がいい。自分は行列計算の一部の仕様が気にいらない。 Lapack++はLapackの機能をC++用に移植したものだが、機能が 限定される。 結局、自分にあった行列計算ライブラリ、数値計算ライブラリは 少なく、みなさん自作されていることが多いようです。 ただし、自作の場合、行列計算で便利だからと言って 演算子のオーバーロード機能は使わないようにしましょう。 (数万から100万個の行列要素のコピーしまくりが発生して 致命的なほどに遅くなるから)
619 :
名無しさん@5周年 :2006/11/11(土) 12:10:58
>>616 ただのプログラムなら寿命は35歳。使い捨ての業界なのに
そんなものになりたいの?
単なるプログラミング技術だけでなく(そんな人は日本国中
にいくらでもいる)、他の分野の技術を2,3マスターして
いると視野も広がるし、強みになると思うけど。
620 :
名無しさん@5周年 :2006/11/11(土) 12:12:34
ただのプログラム→ただのプログラマ
>>619 >ただのプログラマなら寿命は35歳。使い捨ての業界なのに
>そんなものになりたいの?
そんなわきゃーない。
最近は覇権のなんちゃってプログラマが増えたおかげで
企業も地雷を踏むのを避けるためにちゃんとコーディングできる香具師は
それなりに仕事がある。それなりにだけど。
時代と共に価値観も移り変わっていくものだ。
四十路過ぎで只のプログラマってのもそれはそれで悲しいものがあるな
623 :
名無しさん@5周年 :2006/11/12(日) 09:20:18
年収1千万円以上のプログラマなんて数えるほどしかい。 今はWindows XPでOSが固定されてるからいいようなものの、 vistaが出てくるとまた次から次と新しいことを覚えなくちゃ いけない。年をとるとそうそう覚えきれない。 プログラミングは日本では苦労の割にはあまり評価されない。 平均的なプログラマと他の技術分野の平均的な技術者を比べる なら後者の方が絶対良いと思う。 プログラマは苦労の割には報われない。
/\ /\ /:::::::ヽ____/::::::::ヽ、 丿 ::.__ .::::::::::::: __ ::::ヽ_ / /。 ヽ_ヽv /: /。ヽ ::::::ヽ ~~~~| | | |Ο ./ / ̄ ̄√___丶  ̄ ̄\ ::::| ■■ \/ / | ~~|~~ ━━| .:::::::::: / / tーーー|ヽ ...::::: ::|━━━━▼▼ /\丿 |丿/ | ヽ .| .:::::. ..: | |ヽ .::|. ●● | ::: | |⊂ニヽ| | .:::::| \ / /| : | | |:::T::::| ! .::| \ \ / / \: ト--^^^^^┤ 丿 \\
よこぎ内科胃腸科クリニック平中央医院いわき市国民健康保険田人診療所中野中央病院佐藤医院野崎整形外科医院高月整形外科高木医院木村クリニック新潟手の外科研究所
F#ってFortranが.net上で動くのかと思ったら全然違ったorz
>>626 Lahey/Fujitsu Fortran Ver.7.1 for Windows Enterprise とか
Salford FTN95 とか
629 :
名無しさん@5周年 :2007/05/08(火) 07:49:36
FortranかCかなんて議論は馬鹿げているよ。 Fortranなんてもはや化石言語。 だから消去法でCを選ぶ他ない。 しかし君たち。 実はもっとも身近で簡単な科学計算用言語があるのだ。 それがExcelVBA。 答えは案外足元にあったわけだ。 いわゆる青い鳥ってやつだね。
630 :
KIDING :2007/05/09(水) 00:17:42
JAVAが最強に決まってるだろ。 JAVAを使う数値計算の本もたくさん出てるし これからはJAVAの時代だよ。
631 :
名無しさん@5周年 :2007/05/09(水) 10:46:39
JAVAで数値計算やる奴の気がしれない
C使いがFortranを学ぶことはあっても、Fortran使いがCを学ぶことは無いから どちらがいいかは明白だわな。
fortran使い必死だな、とスレを斜め読みして思った 一昔前の小鯔ーのようだ
634 :
名無しさん@5周年 :2007/05/13(日) 01:10:51
どう考えてもFortranなのだが・・・
635 :
名無しさん@5周年 :2007/05/26(土) 17:51:59
愚乳フォートランで描いておいて、プリプロセッサ使ってCのソースを吐かせれば、 愚乳Cで混配留できるよ。
636 :
名無しさん@5周年 :2007/05/31(木) 21:12:03
sonnnamonnyoutoniawasetetukausikanai
637 :
名無しさん@5周年 :2007/06/01(金) 02:30:52
ココ見て思い出したけどfortranで複素数使うなとか言われてたけど fortran200?では、改良されたの? 未だに自分でルーチン作って複素数の計算してます。
>fortranで複素数使うなとか言われてたけど kwsk
639 :
名無しさん@5周年 :2007/06/04(月) 02:00:51
>>638 f77で用意されてるけど、結果が出鱈目なんだよ。
そういうのが多いので、自分で複素数を作って計算してた
マジに? 処理系に問題ありってことはない?
複素数使うなじゃライブラリに問題あるだろ。 そりゃそういうライブラリ提供してるメーカ品使ってるお前の個別の話 少なくともg77じゃコード品質はともかく間違うことなんかありえない 例えばCの数値演算ライブラリもフォートランライブラリをラップして使ってるものだって多い、 octaveだってそう。octaveの演算結果がでたらめで誰も気づかないなんてありうると思うか?
あっと。 言い忘れたけど精度に関しては数値演算プロセッサに依存するのでそのつもりで。 X87系とSparc,ACOSそれぞれで微妙に違うのは当たり前。 数値演算プロセッサを無視してソフトで処理するとかしない限り末尾数桁はハードウェアによって異なる。 しかし、これは複素数云々じゃなくフローティング演算すべてに絡んでくる話なので念のため
643 :
名無しさん@5周年 :2007/06/05(火) 09:56:37
>>639 昔のLah*yか?倍精度複素数計算にバグがあって
正しい計算結果が出ないことはきいたことがある。
644 :
名無しさん@5周年 :2007/06/05(火) 20:41:19
645 :
名無しさん@5周年 :2007/06/07(木) 03:32:04
>>641-642 俺個人の話なら、それで良いが計算ソフトを商品として客先に売ってる。
「エンディアンの違いとか、CPUを統一せよ」って言えない訳。
各社でIrix,HP-UX,SUNとかバラバラなんだよ。x86やEWSでFreeBSDの
結局f2cのf77とか。それら全部で精度保つプログラムが必要なんだよ。
処理系とで違うは十分分かってるよ。
>>643 La*eかどうかは、ちょっと不明。だけど多分そう。
最近は各社インテル系でlinux+g77に以降したので再現性高く便利。
ここって、趣味人だったけか?職業人もいると思ってたけど。
客先とか想定できない人も居るなんて。
646 :
名無しさん@5周年 :2007/06/09(土) 19:00:22
GNUのgfortran ならFortran9xに対応しているから、コンパイラを 買わなくてもFortran90でプログラムできるぞ。
647 :
名無しさん@5周年 :2007/06/15(金) 23:18:18
全員C言語で
648 :
名無しさん@5周年 :2007/06/16(土) 19:28:19
地球シミュレータとかのスパコンではCやC++よりも Fortranの方が性能が出るらしい。また、ポータビリティの 店から言ってもCやC++はアーキテクチャー依存があって 苦労するらしい。だから、必然的にFortranになるわけだ。 可視化するときはCだけどね。
649 :
名無しさん@5周年 :2007/06/16(土) 22:50:40
文字や数値の扱いやすさでfortranだね。
651 :
名無しさん@5周年 :2007/06/17(日) 08:19:12
なぜに工作員?
652 :
名無しさん@5周年 :2007/07/01(日) 01:13:41
C++とFortranの両方使ってるけど、数値計算はFortran、 データ処理・可視化にはC++と使い分けてる。 科学技術計算ならFortranのほうが圧倒的に有利でしょ。 数式どおりに書けるし、Fortranのほうが直感的でわかりやすい。
653 :
名無しさん@5周年 :2007/07/01(日) 10:56:39
>数式どおりに書けるし、Fortranのほうが直感的でわかりやすい。 本当に C/C++ を知っているのか。俺は両方知っているが新規に作るなら C/C++ しか使わないぞ
エー(´д`)
655 :
名無しさん@5周年 :2007/07/01(日) 15:17:39
これからはCOBOLを知ってるとNTTデータで活躍できるよ
657 :
名無しさん@5周年 :2007/07/02(月) 02:11:18
658 :
名無しさん@5周年 :2007/07/07(土) 19:34:48
659 :
名無しさん@5周年 :2007/07/07(土) 19:40:29
地球シミュレータでのプログラムはほとんど全てFortranだよ。 C++なんかで動かそうとすると「それで性能出るの?」って 言われる。
>>659 PC上でg77とかしか使ったことないんで聞きたいんだけど、
そういうのってOSやコンパイラは何なの?
661 :
名無しさん@5周年 :2007/07/08(日) 00:16:30
>>660 OSはSUPER-UXでUNIXの一種。
コンパイラはクロスがesf90、セルフがf90。
662 :
名無しさん@5周年 :2007/07/08(日) 02:01:54
分散は弱いよね。
663 :
名無しさん@5周年 :2007/07/08(日) 02:03:13
あ、C系の話ね。
664 :
名無しさん@5周年 :2007/09/09(日) 14:40:44
C++の話なんですが、 Numerical Recipes C++ に敵う日本語のお勧め本ってありますか?
665 :
J :2007/09/15(土) 12:13:56
Fortranは最初にちゃんと理解することが大切。 教えてくれる人が古いところではいまだにF77を平然と 使ってたりする。 Fortranは必ず90以降でやる。 最低限:自由形式、モジュール、インターフェース 配列(引数、戻り値、演算、部分配列、動的割当て)、intent implicit none、COMMOMブロック不使用、代表的な組込み手続き あたりを押さえてから先に進むと良い。 今のFortranは使い方を先に正しく勉強すれば、 安全、早いコードが書きやすい、メンテも楽な言語だ。 ただし歴史が古いぶん、昔ながらの悪いものも サポートしないといけない宿命を背負っているので 謝った使い方も簡単にできてしまう。 まず正しく勉強。これが大切。
666 :
名無しさん@5周年 :2007/10/31(水) 00:22:10
配列を手続きに渡すときに、 DIMENSION A(N,N) に対して CALL SUB(A) とやるのと、 CALL SUB(A(1,1)) とやるのと CALL SUB(A(:,:)) とやるのと、 CALL SUB(A(:N,:N)) などとやるのと、どう違って、引数の結合の効率がかわるんだろうか?
77しか知らないので、3,4番目はわからないが、 1番目と2番目はどちらも、サブルーチンに配列の先頭ポインタを渡すだけだか ら、変わらないはず。3,4番目も値渡しでなければ変わらないんじゃないの? コンパイラにオプション付けてアセンブラ出力比較すれば?
>>666 Fortran90以降の場合はSUBの定義の仕方で変わってくる。
ヘタをするとSUBの仮引数に合わせて一時的な配列のコピーが作られるので
効率が悪くなる。
詳しくは処理系のマニュアルを読め。
669 :
名無しさん@5周年 :2007/11/04(日) 18:34:16
Fortranの一冊目の本でおすすめあったら教えてください
671 :
669 :2007/11/05(月) 15:57:46
>>670 おおー
ご親切にありがとうございます。
お礼遅くなりましたm(__)m
672 :
名無しさん@5周年 :2007/11/07(水) 01:49:00
>>666 それはa(:)などと指定すると、いったん暗黙のうちに配列のコピーが
テンポラリ配列に取られて、実行後にまた、元の配列にコピーし戻さ
れるからだ。なぜかといえば、たとえばa(1:n:2)見たいな書式が許さ
れている事を考えれば分かるだろう。ほとんどの実装では、たとえ
メモリー上で連続しているはずの、全渡しa(:)や部分渡しa(100:)等
でも、いったんコピーしている。
これを容易に確かめたいなら、超巨大な1Gクラスの配列を使って
実験してみるといい。SGIのORいぎnとかMatMulにまでコピーを
暗黙に使うので、昔、意味不なSegmaentationFaultでウンコ漏れた。
F77にくらべてF90がうざいのは、この辺だ。
このサイトに、情報が書いてあった記憶がある。あいまい。
10年位前に読んだので、すぐには見つからなかったw
ttp://www.cs.rpi.edu/~szymansk/oof90.html
>>672 参照渡し以外はコピるから無駄が多いってことね
まぁ仕方ないか
そこでCONTIGUOUS属性ですよ
2008か よさげだから早く普及しないかな
その前にFortran 2003の処理系を何とかしないと・・・
677 :
名無しさん@5周年 :2007/11/17(土) 03:47:20
Fortran2003はいつになったら出るのかな。 OOPブームが終わっちゃうよw Fortran2008はCoArrayFortranを取り入れたが、 ハードウェアに依存する機能を入れるのはとても疑問だ。
678 :
名無しさん@5周年 :2007/11/17(土) 23:40:45
Fortranとは違いますがF#ってのはどうなんですか? なかなかな感じですか?
.netでFortranっすか・・・ というかオブジェクト指向と数値計算は、少なくとも速度面では相容れないと思うけど
680 :
名無しさん@5周年 :2007/11/18(日) 00:54:33
F#はFortranとは別物みたいだけど、科学計算を想定してるみたいね
Fなら知ってるがF#は知らないや
F#は関数型言語なんだね
もんすごい普及しなさそう
FortressとF#、どっちの方が普及しそうかな
685 :
名無しさん@5周年 :2007/11/20(火) 01:29:07
FortressはSUNがアメリカスパコン計画フェーズ3に脱落したから もうおしまいだろ。
F77最強
688 :
名無しさん@5周年 :2007/11/21(水) 00:06:00
「本物のプログラマ」からみたFortran90ってどんなんでしょ?
>>689 本物のプログラマは、科学技術計算なぞしない
あいつらは奴隷だからな 自分の研究のためだけにプログラムを組めるのはある意味幸せだ
まぁ”ある意味”な・・・
俺は好きで書いてるからいいんだよ。 決してMATLAB買ってもらえないからじゃな(ry
>679 「ホントの最適化」はどうだかしらないけど、並列化とかの隠蔽に有効とか聞いたがどうか。 CPU単体の性能向上が頭打ちになってマルチコアとクラスタ化が主流になりつつあると、 一般ユーザー的には面倒な並列化プログラミングを意識しないですむなら価値あり
それはそうだけどね 全ては出来のいいコンパイラが出るかどうかにかかってる
日曜プログラマ的には少しばかりのオーバーヘッドよりもバグ取りの時間が圧倒的な悪寒だから
日曜PGでなくても同じ・・ まぁさじ加減の問題
699 :
名無しさん@5周年 :2008/01/15(火) 16:24:24
700 :
名無しさん@5周年 :2008/01/22(火) 14:22:36
真のFORTRANは 66までだ。 77はヒヨッタボケで、その後のは最早FORTRANではない。 マイコンのプログラム開発に昔のFORTRANは最適だと思う。 ANSIになる前のCでも言い様にも思うけど・・・
プログラムは流行の対象になるようなものじゃないんだが・・・ 今までの基幹システムを作り直すことになるとSEは当分食うのに困らなくなるな
703 :
名無しさん@5周年 :2008/01/29(火) 11:43:34
CがいいFortranがいい、というより 結局コンパイラがどれだけ賢いかにかかってるんじゃ?
とりあえずオススメのコンパイラをうp
Fortranがいいなんていわれても大学の研究室でのあの gotoやらcommonやらが多用されてて、 しかも変数はaやaaやらx1とかx2なんてもんで 引数が何十個もあるサブルーチンばっかのプログラムしか 印象になくてどうしても引いてしまう。思い出してぞっとした
そーいう低次元の話はやめとこうぜw まっとうな使い方をしたとして、CとFortranでどーなんだ、という話だ。 スパコンのスタッフとかだとFortranを強く推してる人もいるな。 Cも相当速くなったとはいえ、やっぱりFortranなんだろう、というのが個人的な認識だが。 openFOAMなんかはFortranだとGUI周りの作成が困難だからCに変えた、とか言ってたな。
機能が限定的≒規則が単純≒最適化しやすい≒速い でないか?
>>706 openFOAMって知らないんだけど、普通はソルバー=Fortran、GUI=C系で書いてリンクさせんじゃね常考
709 :
名無しさん@5周年 :2008/01/31(木) 14:47:27
>>705 研究室で学生が書いたものならFORTRANだろうがC/C++だろうが
言語によらず解読困難なプログラムが山盛りの予感。
研究室ならどこもそうだよ
こんなとこで遊んでないで勉強しろ
大規模計算や並列計算だと、まだしばらくはFortranじゃないかなあ。 企業レベルでも、欧米の研究機関全体で見ても、Fortranコンパイラの最適化とか チューニングにつぎ込まれてる資金と人材は、まだまだC/C++より多い気がする。 一般ユーザだったら、既出だけど「開発(含むデバッグ)+実行(+保守)」のコストが 一番少ないのがいい気がする。 漏れは、Fortran、MATLAB、C++の順に流れて、今はMATLABとFortranの併用。 純粋な数値計算なのでC++は不要な機能が多すぎた。というかFortranで十二分に 便利。 ただ、大人の事情(上司が違う言語)とかだとそう単純じゃないよね。漏れは、直属の 上司はC++、その上の上司はFORTRAN77(not 90/95)という微妙な状態。
>>714 C++な人なら説得すれば分かってくれるんじゃないの?
C++使いはFortranを今更プゲラで鹿にしてるから駄目なんじゃないかな? F77使いだと、Cは複素数が使えないから駄目とか素で言い出すしなぁ。ウチの場合
C、C++ でやるなら restrictキーワードとかの"裏仕様"も知っとかないといけない
>>704 g95や、silverFlost F95とか…かな
あ、俺は駆け出しの者なんですけどね
____ / \ / ─ ─\ / (●) (●) \ | (__人__) | ・・・ / ∩ノ ⊃ / ( \ / _ノ | | .\ “ /__| | \ /___ /
IntelなCPUなら普通にIntelコンパイラだろ 確か非商用ならタダだったような
>>720 今確認したけど評価版だけで、そんなのなかったよ…
探し方がわるかったかな。
723 :
名無しさん@5周年 :2009/01/14(水) 16:55:14
age
724 :
名無しさん@5周年 :2009/01/17(土) 19:19:13
使用用途が科学計算のみの場合、プログラミング未経験者が 一から勉強して習得しやすいのは、FortranとCだとどっちですか?
>>725 ちょっと待て。もっとよく考えてみろ。
と言うわけで Fortran95 以降推奨
Fortranって書いた場合、一般に90以降を指すような? まぁ90より95のほうが確かにベターだが
728 :
名無しさん@5周年 :2009/01/18(日) 18:13:43
>>725 >>726 ありがとう。ではFortranを勉強したいと思います。
>>727 本は90でも95でもどっちでもいいのでしょうか?
調べてみたら90と95ではあまり変わらないようですが
大して変わらんからどっちでもいいよ
730 :
名無しさん@5周年 :2009/01/18(日) 19:32:27
頑張ってね いきなりガッツリ本読むより、適当にネットの入門サイトをザッと見るほうがいいかも
732 :
名無しさん@5周年 :2009/01/19(月) 00:50:08
>>731 アドバイスありがとうございます
頑張ります
733 :
名無しさん@5周年 :2009/02/17(火) 22:33:46
― 離 婚 モ ー ド 突 入 ― 。. ゜ 。 ヽ / ゚ 。 ・ .\ / . ゚ 。 ' , , ' 。 ・ . ゜ 。 ` ー _ - ' ゜ . 。 . 。 ゚ ゜ : 。 ゚ . m n _∩ .∩_ n m ⊂二⌒ __). _____ (_ ⌒二⊃ \ \. /⌒粕 ⌒ \ / / 、_ノ、_人_人_人_人_人_人_人_人 \ \. /-=・=- -=・=- \ / / ノ \ \. / (__人__) \ / / _) もう思い残すこともねえ! \ | `Y⌒y'´ | / ヽ \.\ ゙ー ′ // '^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ \. ̄  ̄/ .| |
このスレの最初の方で Fortran90を使ってる俺は少数派? みたいなレスがあったことを思うと 時代もずいぶん変わったんだねぇ
人の慣れって恐ろしいね。 年取ると環境替えらんないんかな。 C++使っとけば、Fortranなんて捨てられそうなもんだが
汎用性という点ではC++のほうが上だろうね でもね、研究以外に時間を割きたくない研究者としてはFortranのほうがいいんだよね 速度の点では昔はC++はFortranに及ばないって話聞いたけど、最近はそうでもないという話も・・・
コストに見合った速度と成果さえ出ればFortranだろうがC++だろうがカシオの電卓だろうが構わないよ。
そりゃそうだ
>736 いまどきのfortranは計算機センターwで走らせるんじゃなきゃ、中身はc++だから意味なし。 いちいちfortranなんて時代遅れな情弱のために開発してられるかよってのが本音。 速度面でも、ループの中で呼び出すライブラリさえ速ければいい訳だしな……
まあ、まともなプログラム組めるまでには5年くらい経験いるわな 道具覚えんのに5年もかけれないというのはわかるな
一流の研究してる人のコードって結構汚かったりしょぼかったりするもんな
まあ研究者にとっては、コード組みってのは、基本的に本来業務の領分じゃないからね コーディングの技術そのものは必須であっても、コード化されたアルゴリズムよりも上流の 定式化とかの部分が重要なんであって
速度が問題にならない場合は、CやFortranでカリカリ書くよりもMatlabなどのフレームワークを使うほうが 効率だけでなく安全性の面でも推奨されるしね
こうしてFortranは生き残っていくのでありました。
いゃ〜、このスレも足かけ6年ですか。 消えろみたいなのもありますけど、結局生き残ってますよ。 そりゃC/C++も書きますが、やればやるほど”シミュレーションならFortran十二分説”に賛成。
746 :
名無しさん@5周年 :2009/02/24(火) 17:13:52
長寿スレあげ
748 :
名無しさん@5周年 :2009/04/04(土) 20:30:37
あげてねーだろw つか2003年なんてこの板じゃ全然長寿じゃないから
749 :
名無しさん@5周年 :2009/04/05(日) 07:54:20
>>743 モデル作成の試行錯誤中とかにもMatlabの類は効率的だよね。
安全性はどうだろう。
あの手のソフトってきびきび・スムースに動く「ふり」をすることがあるからなあ。
たいていの場合は大丈夫じゃないの? めちゃめちゃ広く使われてるじゃん
Fortranで計算する時、データの入力はどうするの? Cなら直ファイルでもDBでも色々好きにできるけど データが壊れてても検出できないで計算進んだりすると 困りそう
752 :
名無しさん@5周年 :2009/05/05(火) 10:01:54
マルチコア化に対してコンパイラの最適はどの程度まで進んでいるんだろ? やっぱり、インテルのコンパイラがいいのか?
Intelの石ならIntelコンパイラ一択
F66/F77は死んだ! Fotran9x万歳!
755 :
名無しさん@5周年 :2009/05/15(金) 01:07:57
F77はまだ死んでない
C/Fortranどちらでも構わないのですが、 クレブシュ・ゴルダン係数を計算してくれるライブラリってありますか?
何それ
>>757 物理に出てくる話。まぁ篤志家が作っているかもしれないが
自分で使うためだろうから、ライブラリとして転がっている
とは思えない。
Mathematica なら内部のパッケージで持ってるかもしれんが
使わないから知らない。
MathematicaはたしかWingerの3jSymbleを持っていたような 3jSymbol ⇔ CG coefficientは簡単に変換できる
Maximaにはebsch_gordan.macなるパッケージがデフォで付属している
>>759 > 3jSymbol ⇔ CG coefficientは簡単に変換できる
その変換プログラムを作ってくれ、とか言われそう。
スレチだけどついでに聞きたい Mathematicaで、研究業界全体で騒動が起こるほどの致命的なバグが発見されたことってあった? ここまでメジャーになると、影響は計り知れないと思うんだが。 もう絶対バグはないって信じ切って使ってる研究者も多いらしいし。
まともな研究者なら自分でソース書く
>>763 いや、そんな暇なことはできなよ。
必要最小限の検証はするけど、自作コードの方がバグ率高し。
プログラミングが下手な人はそうなるな
>>763 数学屋さんとか自分の定理の検証とかに結構使ったりするらしいぞ
つーかMathematicaはもともと数学コミュニティから生まれたんだよな
>>767 残念ながら理系つーか工学系。だがMathematicaは使ったことないけど・・・
数学界とMathematicaがどういう関係なのかは個人的に興味深くてさ
工学や産業の世界だと、よく考えずに商用コードを使ってバグに振り回されるなんて
低レベルな話はよくあることだが、数学屋でそれはないんだろうなと思って
スレチならやめるけど、そんなら他のネタを出してくれ
中で何やってるかわからないMathematicaじゃなくて、 使うならMaximaにしろってどっかの先生が書いてたような気がするが どこで読んだのか忘れた
>>769 でも Maxima だって Lisp が解読できなければ中で何やってるか
分からんよな。個人的には Maxiam を使いこなすために Lisp に
手を出そうかとは考えちゃいるが。
# あくまでも個人的な意見ですよ
771 :
名無しさん@5周年 :2009/06/01(月) 04:42:32
>>770 中身が公開されてるかどうかの話じゃね?
純粋科学の研究者の態度として、ブラックボックスを 使わないってのはあるだろ。 純粋じゃない分野は好きにして
それも場合によるさ 純粋科学の研究者の書いたコードがバグを出さない、という保証があるわけじゃないんだから でも今時の数学者じゃLispとか使えるのは当たり前かも?
いやそうじゃなくて自分自身で確認する精神が重要ってことだろ むしろ昔の研究者は細部まで自分でプログラミング(死語w)していたよな サブルーチンもプログラミングしやすいという理由で発生したのであって 外部のライブラリを呼び出すっていう発想じゃないわけだ 今時の数学者の方がブラックボックスに安易に手を出すんじゃないか
仰るとおり、そういう精神は大事だ
細部までプログラミングしてもコンパイラ、さらにCPU、にバグがあるかもしれない。 結局、結果の合理性をある程度チェックして後は信じるしかないんだから、 低レベル言語でもMathematicaみたいな高レベル言語でも同じことでは。 もちろん、すべて手計算で研究できれば一番いいんだが、それを するにはわが脳みその性能が org
777 :
名無しさん@5周年 :2009/06/13(土) 19:00:43
Mathematicaは商用ソフトで完全ブラックボックスってのがなんとも いや、使っちゃうんだけどさw
1 愛のかぁびぃ ◆Kirby..wFo sage 2009/07/03(金) 18:01:34 ID:cCGEUfKK BE:657429539-PLT(24242) 俺は予知夢をみた。 PS3で大作ソフトが出る夢だ。 聞いて驚くな、これは 絶 対 に 当 た る まず最初にでたのは全世界で圧倒的な売り上げを誇るGTAの新作だ・・・ タイトルはGrand theft auto:New Tokyoで、会場は大盛り上がり。モチロンPS3独占 MSの幹部が目を涙目にしながら言うんだ「Why my hard not on this?」ってなw 次はFFの新作だな。FF13はマルチ化らしいが、後にマルチが解除されPS3独占になるであろう。 次はCall of Dutyシリーズの最新作!名前はCall of Duty7:High quarity warsだ! そしてどんどんPS3にソフトが集まってゆく。ついにはHomeのリメイクやKillzone3が出て盛り上がる。 とどめにXBOX360が世界中で見放され、PS3がトップになるであろう。 断言しつつも率直に言う。俺の予知夢で外れたことは一回もない。 数分後↓ 2 愛のかぁびぃ ◆Kirby..wFo sage 2009/07/03(金) 18:09:56 ID:cCGEUfKK BE:779174584-PLT(24242) このスレには書き込めません。 4 愛のかぁびぃ ◆Kirby..wFo sage 2009/07/03(金) 18:21:01 ID:cCGEUfKK BE:1193111377-PLT(24242) このスレは今、停止チュです。ご遠慮ください。
781 :
名無しさん@5周年 :2009/11/13(金) 22:46:18
IDLでいじゃん
782 :
名無しさん@5周年 :2009/11/16(月) 07:48:56
>>781 たけえよ、あれ。どうせならMatlabの方がいい。
783 :
名無しさん@5周年 :2009/12/10(木) 18:34:39
octave
784 :
名無しさん@5周年 :2009/12/28(月) 17:18:49
〉756 William J. Thompson:"ATLAS FOR COMPUTING MATHEMATICAL FUNCTIONS", Wiley-International, ISBN 0-471-18171-4, 19.7: Angular Momentum Coupling Coefficients に、3J, 6J, 9J シンボルの計算プログラムがFortranで出てるぞ。
785 :
名無しさん@5周年 :2010/02/05(金) 13:17:27
うちの大学のプログラミングの授業。 いままでFortran90を使っていたけど、来年から Fortran77に変更するらしい。 訳が分からん
担当教員が変わるからなんじゃないの、授業で教えるなら90を勉強すればいいのにと思うけど。 そんなに大変でもないのに、学生がかわいそうだ。
>>795 プログラミングの授業なんて、教科書の通り教えればいいだけだろ。
でかいプログラムを作るわけでないし、教員も文法の少しぐらい勉強しろよー。
90なんて覚えても分野によっては77が幅きかせてるんじゃないの?
でも、上位互換だから、90を学んでおけば77も対応できるだろ。 特に学生の場合は、卒業後どういう分野に就職するか分からないんだから、 どうせfortranをやるなら90の方が良いと思うな
俺の分野では、77で書かれた標準的に使われているプログラムがあるが、 固定形式で書けば、この77プログラムをサブルーチンにして他の部分は90で書く、 なんてこともできるので…
>>791 >固定形式で書けば、この77プログラムをサブルーチンにして他の部分は90で書く、
>なんてこともできるので…
関係ないような気がするけど。
確か1つのファイル内では77(固定形式)と90(自由形式)のどちらか一方に
統一しないといけないけど、コンパイルした後は関係ないんじゃないの?
それから、77で書いたら90の機能は使えない。
やはり「慣れてる」という観点以外で、77を使う理由は皆無だと思うね。
もっとも、慣れは極めて重要な要素ではあるがw
>>792 >>791 で言いたかったのは、90のプログラムを固定形式で書けば77のコードを
サブルーチンとして組み込んで利用できるのだから、
(たとえ77の汎用コードが出回っている分野でも)90を教えた方が良い、ということ。
794 :
793 :2010/02/10(水) 13:11:11
あと、誤解があるようだけど、90でも固定形式で書くことはできるよ。
>>793 ごめん、勘違いしてた。
>>792 で言った
>それから、77で書いたら90の機能は使えない。
は間違いだった。コンパイラはファイルのsuffixが.fか.f90かを見て77か90かを
判断するのだと思ってたが、判断されるのは形式(固定or自由)だけなのか・・・。
そうすると、本当に見た目上の些細な違いしかないってことになるね。
・固定形式・・・7-72桁の制約。継続行は6桁目に任意文字。
・自由形式・・・桁の制約(実質的に)なし。継続行は行末に「&」。
まぁ、自分的には桁の制約がないのはかなりのメリットだな。全画面でエディタ使ったりするんで。
>90のプログラムを固定形式で書けば77のコードをサブルーチンとして組み込んで利用できるのだから、
「組み込む」ってのは、同じファイル内にいっしょに併記するって意味だよね。
確かにこれは大きいのかも。catでサクッとマージしてコンパイルとかできるし。
たぶん、問題の講座担当教員はそんなことまで考えていないから大丈夫
797 :
名無しさん@5周年 :2010/02/11(木) 18:18:22
72桁の制約はきつすぎる 数式を扱う以上、長くなりがちだし
>>797 だね。・・と書きつつ、
目が72桁制約の固定書式に慣れてしまって久しいので
F90の機能てんこもりだけど固定書式で書いてる。
その事で文句をいってくるコンパイラは今のところないし
799 :
名無しさん@5周年 :2010/05/03(月) 11:44:20
昔、カードバッチの時代にはだ、計算センターにつめている場合であっても、 プログラムをコーディングしてカードをパンチした束を抱えてJOB制御カードを つけてカード読み取り機にかけるんだが、その読み取り機に並んで居る人間 の列がまずある。読み取り機にかけても数百数千枚とあると、時々カードが 引っ掛って一回で読めないことがある。そうして無事に読めても、ジョブが スプールされていてコンパイルが始まるまでにしばらく間が在る。うまく コンパイルができれば実行が始まるのだが、概してコンパイラが文法上の ミスを見つけてラインプリンターにコンパイルリストとエラーリストの束が 出てくるから、それをもって机に戻り、どこがどう間違っているのかを 見極めて直すべき箇所を見出して、カードの束の中から該当するカードを 改めて打ち直したカードと慎重に差し替える。そうやってまたカード読み取り 機の待ち行列に並ぶ、正常に動作するまでは、なんどもなんどもこれの繰り返し。 おのずと学習して、極力ミスが無いかどうかを事前に慎重に考えるようになる。 計算機センターにつめて作業できる場合はうえのとおりだが、遠隔地だと 手元にカードパンチ装置があれば、それでカードをパンチしてアルミトランク に詰めて計算センター宛てに運送を依頼、何日か経って計算センターに届いた トランクの中身はセンターの職員がカードリーダーにかけて、結果のライン プリント用紙をつけてカードを送り返してくる。そこでも数日。 受け取ったプリント用紙には、COMPILE ERROR と書かれてエラーリストが 出ているから、それを直したカードディック(カードの山・束)を作って 再びトランクに詰めて依頼書をつけて送る。これの繰り返し。 まるで、葉書でやりとりして将棋を指すようなもの。 以上、昔話でした。
地獄だなw
801 :
名無しさん@5周年 :2010/05/07(金) 15:34:30
FORTRANだろ。たしか2003年か2006年にオブジェクトFORTRANの 仕様が公表されたんじゃなかった?対応しているコンパイラは ないけど
802 :
通過 :2010/05/07(金) 22:38:15
803 :
名無しさん@5周年 :2010/08/01(日) 22:22:28
BasicやってC,C++やってPerlやってPHPやってきた人間にとっては FORTRAN77は地獄なんだが。 なんで72桁制限? なんで構造体すらないの? なんでモジュール化できないの? せめてFORTRAN90のコンパイラ入れて欲しい。
>>803 科学技術計算から、縁が遠そうなんだけど。
>>804 私事で愚痴ってすまそ。
研究で計算やる前から趣味で言語覚えてたというわけ。
FORTRAN77は高級か低級かっていうんじゃなくて
なんていうか、力技でもどうにもならない不自由さがある感じ。
90以降は色々機能追加されてるから違うと思うけど。
これから使う方は90以降をオススメします。
FortranってまともなIDEがなくない? そもそも不要って人も多いかもしれんけどさ・・・
Fortran遣うような人はemacsで満足してるんじゃない?