トップページ⇒linux
985コメント403KB

intel compiler for Linux

■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin01/11/29 17:53ID:5k7yf0ai

intel 社の Web ページ
URL:<http://developer.intel.com/software/products/eval/>;
の、"Non-Commercial Unsupported Software(非商用、サポート無し)" から、
RedHat系Linux 6.2 または 7.1 に対応した IA-32 や IA-64向きの
最適化C++,Fortran9x用のコンパイラ(version 5.0.1) が無料で
ダウンロードできるようになっています。
(詳しいライセンス条件は、ダウンロード時に表示される文書を
参照してください。)

intel 自身が作ってますので、インテル系のCPUの資源を活用できる
実行ファイルが生成されるます。(AMD の Athlon も Pentium III と
みなしてコンパイルオプションを選べばMMX機能などを使うことが可能です。)

以下は、「無料永続版」を入手した後で、それを実際に使えるようにする
ための設定方法の記述です。
C++ と fortran9x を両方ともインストールする例を書いていますが、
どちらかだけしか必要ない場合は、片方を省略することができます。

例は RedHat6.2 系統向けになっていますが、7.x 向けの場合でも大体同様です。
(Web ページからダウンロードしてくるファイルが違うだけです。)

ダウンロードする際に入力したメールアドレスにインストール時に必要となる
ライセンスキー情報が送られてきます。
00746902/01/20 13:32ID:0V/4SmC4
>>73
4月と2月で違うのって、
nelibのlapackですか。
もっと古いかも。そんなに
違うと思ってなかったんで、
無理に最新にしてなかった。
機能までアラインメントも気にして
なかったし。まだまだ、
やること、ありそうです。
0075login:Penguin02/01/20 15:33ID:5whqLm3T
>>74
すんません。数ヵ月単位のジョブと言うと2ヵ月が4
ヵ月というのが全然違うということです。
アラインメントは重要です。PentiumIVならもっと
違うかも知れません。Intel の compiler ならそういうのを
しれっとやりそうですが。
00767402/01/20 15:45ID:Zx6TOajk
>>75
ちゃんと2ヶ月、4ヶ月とかいてありましたね。
PDAから見てたもので、読み方が荒かったです。
もうしわけありません。

昨日、この板でアラインメンとを知って、
びっくりしてるところです。そういえば
思い当たるふしもあったので。それと、
今までのベンチマークは
time ./a_g77.out
time ./a_pgf77.out
time ./a_ifc_lapack.out
time ./a_cfla_O5.out
というようにコンパイラ、コンパイルオプション
ごとに、実行ファイル名を変えていたのですが、
これはまずいですね。月曜日から、いろいろと
することがありそうです。
00777602/01/20 16:12ID:Zx6TOajk
自宅からsshして試してみたところ、
g77,ifcはファイル名を変えても実行速度が
あまり変わりませんでしたが、pgfortran
は16%ほど、速いファイル名とそうでない
ファイル名と分類できてしまいました。
g77はf90に対応してないので、f90は
仕方なくpgf90でやってましたが、
これからはifc,pgf90の両方で試し、
かつ、ファイル名をいろいろと変えて
走らせることにします。
幸い、自分の今の計算は長い計算を
一回というのでなく、反復計算が
多いので、このファイル名を変えるというのが
実現可能です。
0078login:Penguin02/01/20 16:23ID:5whqLm3T
>>77
なんだか混乱させるようで悪いですけど。問題は
ファイル名だけではないのです。スタックのアラインメントの
問題だから、シェルの種類やもしかしたらコンディションで
変化するかも知れないのです。詳しくは僕も分かりませんが、
シェルが子プロセスを走らせるときのアラインメントが違えば
ファイル名だけで対処することはできません。
LinuxとFreeBSDだと微妙にアラインメントのブレは違うのですが、
これまた大きな問題です。Cの場合は適当にスタックを
変化させるように最初にいれておけば問題は無いですが、
Fortranの場合はどうしたらいいもんか?
いろいろがんばってみましたが、FreeBSDはカーネルパッチ
があって、なんとかコミットされたらと思いましたが
コミットされる前にページ毎消えちゃいました。

はぁー。
0079login:Penguin02/01/20 16:31ID:5whqLm3T
>>77
とりあえずこのスレの僕の書き込みでURL示してるのがあるので
ちょっと見てみてください。
0080login:Penguin02/01/20 17:31ID:C3Sbw68k
>>47のリンク先ですね。
実行するごとに微妙(0.2 秒)
くらい、実行時間が変わるのは
環境のためでしたか。
一つ分からないのですが、
ファイル名を1文字、2文字、、、、と
8通り作ると、pgfortでは実行
時間が15秒と18秒のものに
きれいに分かれるんです。
もちろん、コンマ1、2秒の
誤差はありますが。
g77, ifcでは10秒なので、
pgfortの最適化があまいのは
明らかなのですが。ちなみに
実行時間の測定は2回ずつ
行ないました。
0081login:Penguin02/01/20 21:00ID:5whqLm3T
i386 gcc には 最近から
-mpreferred-stack-boundary
ってオプションがあるんですが、gcc-2.95.3 では効かなかったんですよ。
最近のRHは効いているのかも知れません。ちょっと真面目にチェックする
必要ありですね。
0082login:Penguin02/01/22 01:09ID:bDfE+epr
アラインメントなんて知らなかった。
明日ifcで試してみよう。
(((( ;゚Д゚)))ガクガクブルブル
0083login:Penguin02/01/22 20:53ID:wJXZKWBH
>>82
たぶんこれはIFCでは直ってるはず。
というかアセンブラのソース見るわ。
なんだかあおってすまん。
0084  02/01/29 23:03ID:PECJA2Mi
商品版(高い!)と無料DL版との違いはどこにあるの?
0085login:Penguin02/02/03 18:11ID:lkEkFcBp
商品版なんてあったのか。
知らなかった。
0086login:Penguin02/02/04 21:30ID:B2i7yVMD
バグ多くないか?IFCは -tpp7 をつけると
すぐ Internal error が起こる。cast がうまくいかんことないか?
integer*8 で I=iargc() が変な値が返ってくる。
call exitで出られないことはないか(c の wrapperを書きました)。
あーGNUに統合しやがれ!
0087   02/02/08 17:20ID:sam3w5OZ
>>86
CPUは何を使っているの?
0088login:Penguin02/02/08 19:01ID:MfBFWerp
Pentium III で IV の最適化をしてはまってました。
iargcはInteger*4を仮定するのです。
0089   02/02/10 13:05ID:f9cX/woZ
Athlon Thunderbirdで、PentiumIV用のコードを実行させようとすると、
結果がめちゃくちゃ。まああたりまえだけどね。
0090   02/02/13 23:45ID:8/27EbsI
ただ、ただなのは、まだテスト中の製品だったりするからだったから
じゃないのかが不安だ。将来は無料版はなくなるのではないか?
0091login:Penguin02/02/14 08:21ID:qBCCIPAv
g77とか違うコンパイラやマシンで結果が一致するか調べたら
ええんとちゃうか。出来ればGNUに統合されて欲しい。

0092   02/02/16 01:17ID:P37gR3ZU
インテルが商品であるICCとかIFCのソースを公開するかなぁ?
0093名無しさん@Emacs02/02/17 07:24ID:PId1GyBh
コンパイラをGPLにしたとして
それで失う利益よりもPentiumの売上が増える効果のほうが大きければ、
ビジネスとして正しい選択技でしょ。
0094名無しさん@XEmacs02/02/18 01:58ID:iYWvirB6
>>93
Intelに正座して聞かせたい
0095login:Penguin02/02/18 12:42ID:X/HQdXYC
>>93
そのうち g++,g77 が icc, ifc より高速になるYO!
0096login:Penguin02/02/19 10:30ID:ygRZQp1y
ifc では2G以上のファイルをかけないな。
確認した。gaussian でかけているのはCのサポート関数の
おかげ。
Program FileO
Real*8 X(16*1024*1024)
do i=1, 16*1024*1024
X(i)=1.0D0
end do
open(1,File='fileout.data',status='unknown',
1 form='unformatted')
write(6,*)'Open OK--->fileout.data'
do i=1,1024
if(mod(i,10).eq.0) write(6,*)i
write(1)X
end do
end
Input/Output Error 161: Write operation failed

In Procedure: main program
At Line: 11

Statement: Unformatted WRITE
Unit: 1
Connected To: fileout.data
Form: Unformatted
Access: Sequential
Records Read : 0
Records Written: 15

End of diagnostics

ちなみにgccだとgcc-3.1(experimental,2002-2-2)
は少なくともそうはならない(FreeBSDで確認)。
0097login:Penguin02/02/19 13:18ID:wHR25Yfq
>>95
正直、それは無理じゃね?
0098login:Penguin02/03/08 09:38ID:0oVxicVH
age
0099login:Penguin02/03/16 20:17ID:jeTKf9Ot
Intel Fortran 6.0 beta が出るらしいな。
いつになるかわからんけど。
0100login:Penguin02/03/17 16:27ID:Y0L5kwur
>>99
4月はじめには正式版出荷。
0101login:Penguin02/04/01 23:00ID:MIY3lWi0
>>100
というわけで4/1にはりこんでみたがまだだった(当然か)。
0102login:Penguin02/04/01 23:56ID:4KjWNtlY
gccってしょぼくねぇ?
最適化とかにはあんまこだわってないのか?
0103名無しさん@お腹いっぱい。02/04/02 00:41ID:BCv0vzPu
こだわっているのは、CPUサポートと言語サポートなんじゃないの?
0104login:Penguin02/04/02 01:21ID:uU1FqcA5
>>102
ふつーに「カナディアンクロスコンパイル」できるのって、gccくらい
でわ?
# XってプラットホームでYで動くZ用クロスコンパイラ作ることね
# <カナディアンクロス
# Linuxで、MinGW/gccコンパイルして、Winのダイアログをコンパイル
# できたときは、ちょっと感動した。(カナディアンじゃないけど)

どこぞで、「おかげでプロセッサに特化した最適化は遅れがち」って
書いてあったぞ。まぁ、だからegcsとかも出てきたり。
でも、「とりあえず、gccは動くだろ」って安心感は、デカイよな。
HP-UXをたまに使うから、つくづく思う。
そーいや、「WindowsでLinuxカーネルコンパイル」とかも理屈上は
できるハズだな。だれか挑戦しない?
0105login:Penguin02/04/02 14:46ID:j7gY85GQ
「カナディアンクロスコンパイル」って
プロレス技みたいだな。なぜカナダ?
0106login:Penguin02/04/02 22:10ID:qqpoU7Yo
GCCはたいていの環境で動いているからGCCよりレベルの低いコンパイラは無く
なる方向になる。とするとGCCが最低レベルのコンパイラになるよな。
# GCCにはコンパイル速度のほうをもっと頑張ってほしい。インライン関数と
# かテンプレートとかたくさん使うと使うとやってられない。
0107名無しさん@お腹いっぱい。02/04/02 23:23ID:BCv0vzPu
>>106
全てのコンパイラを全順序に押し込むわけ?
0108login:Penguin02/04/03 00:51ID:aLlZ/CTX
GNU Autoconf/Automake/Libtoolより
「『カナディアンクロス』の名前は、3つの異なる種類のシステムが
つかわれているような、最も複雑なケースに由来しています。その
ような問題が顕在かしてきた当時、カナダには3つの国民政党があった
ので、このように呼ばれることになりました。」
だそーだ。cygnus用語かな?
0109login:Penguin02/04/03 05:21ID:2DUVTyBB
>>106
ifcで-O2 -tpp7とかやってみ。g77の数倍は時間かかるぞ。
0110login:Penguin02/04/03 23:15ID:FRqVmuPz
uni 板で mozilla を FreeBSD+icc でコンパイルしようとして
失敗しとるヤシがいる。
# http://pc.2ch.net/test/read.cgi/unix/1012057979/l50

Liunx+icc で mozilla をコンパイルした人いる?
0111login:Penguin02/04/04 00:16ID:b5ogLD4j
XFree86をコンパイルしようとしたけど
なぜかプリプロセッサがビミョーにちがうのか、エラーになってしまう
(昔のことだから、メッセージ残ってないしスマソ)

あとオプション変える必要あったりな。
-fPICは-kpicに、-Wl,rpathは知らんのでリンクだけはgccで...
でも前述のエラーとかでできなかった(へたれ)
0112login:Penguin02/04/04 01:45ID:b8zl9fsb
漏れはsnesを…インラインガセンブリ…
0113login:Penguin02/04/19 01:13ID:c5m+sLvD
☆ チン     マチクタビレタ〜
                         マチクタビレタ〜
        ☆ チン  〃  Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・) <  早くしてよね > 6.0
             \_/⊂ ⊂_ )   \_____________
           / ̄ ̄ ̄ ̄ ̄ ̄ /|
        | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |

0114login:Penguin02/04/25 13:03ID:s0tjalkG
Intel Fortran Compiler 6.0でてるぜ!
でてるぜ!
check it out!!!
0115 02/04/25 16:54ID:hRAttTY0
なぜか、Non-Commercial Unsupported Software 版
(サポートなしの無料版)は、Fortran も
C++ も、バージョン6.0はダウンロードできないよ。ダウンロード
するリンク自体がいくらさがして発見できない。
(Web でユーザー登録とかをしてみてもだめ)
0116login:Penguin02/04/25 17:20ID:s0tjalkG
いまできてるよ! Form がおかしいときあるよね。
web で登録した後、メールは来た? そこにURLかいてあるよ。
http://developer.intel.com/software/products/compilers/downloads/l_fc_p_6.0.140.htm
0117login:Penguin02/04/26 11:09ID:ybIjNGS+
因に、C++の場合は、
http://developer.intel.com/software/products/compilers/downloads/l_cc_p_6.0.139.htm
だよ。
0118login:Penguin02/04/26 11:52ID:pSUh8qyn
XEONお持ちの方自動並列化のレポートキボンヌ
01196.0のインストール法02/04/26 12:38ID:ybIjNGS+
既に、インテルのウェブサイトにいって、サポート無しの無量版をメールによ
るライセンスファイルを入手し、バイナリもダウンロードし,入手してあると
する。(カーネルのバージョンなどによっては、だめな場合がありうるので対
応を確認しよう。)以下はインテルのC++とF90を両方入れる場合の説明に
なっている。
その1) 作業場所(以下の説明で$WORKとしよう)を用意して、そこに
l_cc_p_6.0.139.tar l_fc_p_6.0.140.tar を入れる。
展開するための場所を$WORKのしたに作る。
# mkdir l_cc_p_6.0 ; mkdir l_fc_p_6.0
tar アーカイブ を,それぞれの下で展開する。
# (cd l_cc_p_6.0; tar xvf ../l_cc_p_6.0.139.tar )
# (cd l_fc_p_6.0; tar xvf ../l_fc_p_6.0.140.tar )
それぞれの下でインストールスクリプトを実行する。
# (cd l_cc_p_6.0; ./install )
# (cd l_fc_p_6.0; ./install )
それぞれのインストールスクリプトでの応対を適切にする。
IAー32かどうかの撰択、コンパイラとデバッガのどちらを入れるか。
(どちらを先に入れても問題ない。どうせあとでもどってくる。)
いろいろと答えていくが、/opt/intel 以下が標準インストール場所
らしいので、特にそれでも問題なければ、それをそのまま撰ぶ。
rpm のインストールオプションも同様。
コンパイラとデバッガを各々入れたらOK。
(途中でKTERMの画面の標示の白黒反転が狂うのが欝。)
その2) ディレクトリー /opt/intel/licenses/ に、メールに添附されてきた
ライセンスファイルをコピーする。(xxxxxxxx,yyyyyyyy は数字)
# cp l_cpp_xxxxxxxx.lic /opt/intel/licenses
# cp l_for_yyyyyyyy.lic /opt/intel/licenses
その3) $HOME/.bashrc にコマンドサーチパスを追加するためにつぎの行を加える。
---------------
PATH=$PATH:/opt/intel/compiler60/ia32/bin ; export PATH
---------------
上の設定をすぐにいかしたいときは
# source ~/.bashrc
としておく。
INTEL FORTRAN を使う場合には、シェアードライブラリーを実行時にリンクするために、
----------------
LD_RUN_PATH=/opt/intel/compiler60/ia32/lib ; export LD_RUN_PATH
----------------
も付け加えておく。上の設定をすぐにいかしたいときは
# source ~/.bashrc
としておく。あるいは、/etc/ld.so.conf に一行
/opt/intel/compiler60/ia32/lib
を追加し、 設定をすぐに生かしたいなら
# /sbin/ldconfig
を実行しておく。
その4) コンパイラがうごくかどうかは、
# icc a.c; ./a.out
# ifc a.f; ./a.out
などにより確かめること。
# icc -help
# ifc -help
などにより、簡単な使い方が分かる。
以上終り)

0120login:Penguin02/04/26 14:45ID:9G9h10f6
隊長!Debian potatoにはインストールできません
0121login:Penguin02/04/27 13:16ID:l7/+TGKw
>>116,117,119
どうも情報、ありがとうございます。てなわけで
取りに行こうとしたんですが、

https://shale.intel.com/registrationcenter/register.asp

が落ちているのか、つながりませんのでライセンスファイルを
もらえなくて欲求不満です。

それと、みなさん、pgplotってライブラリ、使ってます?
なんかifcだとうまくコンパイルできないんですが。
0122login:Penguin02/05/09 00:58ID:mt4hx9Cg
>>210
超亀レスだが、alienパッケージを入れたあとに普通にinstallスクリプトで
インストールってことが5.0では出来たんだけど、6,0では出来なくなっている?
0123login:Penguin02/05/09 18:28ID:usKCh3+Y
で、結局6.0は5.0と比べてどーなのよ?
速くなっているの?
0124login:Penguin02/05/10 00:38ID:S+u2Lx1o
俺Linuxで数値計算するから勢い込んで導入! って思ったらそんなに速く
ないみたいね、ここ読んだ限りでは。NDA 問題ないから速いかと思ったのに。
そのうち気が向いたらにしよっと。
0125login:Penguin02/05/10 06:52ID:AeDox/td
>>124
君がどんな計算しているのかちょっとわからないけど、
僕の環境ではPentiumIII@1GでAlpha 21264@500MHzとだいたい
同じパフォーマンスだったよ。Pentium4@2Gならもっと高速です。
僕らはpentium4は持ってませんが。また使ってみてください。
数値計算はチューニングが必須です。
0126login:Penguin02/05/10 07:59ID:p++nUXag
>>122
5.0なら問題ないんですけど、6.0の場合はpotatoのRPMのバージョンが
古すぎるのでalienすらできないですね。
d-uに困ってた人居ましたけど、woodyへdist-upgrade必須ではないかと。

>>125
うちの計算もそんな感じです。ほとんどFFTでできてるようなプログラムです。
あと6.0の目玉機能は自動並列化だと思ってたんですが、試す環境にないのが
非常に残念。
0127login:Penguin02/05/10 09:30ID:up11SU+x
intel自身が作っている計算ライブラリーも使えば、高度な
パフォーマンスが得られる場合があるだろう。ダウンロード
してみたらどう?
012812402/05/10 09:32ID:S+u2Lx1o
>>125 サンクス。俺はFPU intensiveな対角化とか分子動力学とか。
今までgccでintelも使ってたけど、alphaには全く太刀打ちできなかった。
けどその話聞くと結構速いみたいね。またintel純正のコンパイラーで
がんばってみるか。
0129login:Penguin02/05/13 11:23ID:9l4vLaBH
>>127
これはMKLのことですか。BlasとLapackを配布していますが、
PentiumIIIではMKLが少し高速です。しかし、Pentium4では
atlasが高速でした。Lapackはよく知りません。
>>128
メモリのバンド幅はあげたほうがいいでしょう。
0130plamoユーザ02/05/13 11:45ID:c5nvN02Z
intelのコンパイラって、rpmでないとインストール出来ないんでしょうか?
slackwareとかplamoのような非rpmなディストリビューションで動かしている
方いらっしゃいますか?

0131login:Penguin02/05/13 12:33ID:YDaaODKg
>>130
SlackやPlamoにrpmコマンドを入れればよかろうが。
ゴルァ!
0132plamoユーザ02/05/13 13:18ID:c5nvN02Z
>>131
そりゃそーなんだけどね。rpm-2.5.1をいれたら「これじゃ旧い」って
怒られるし、rpm-4.0を入れようとしたらライブラリが足らんって言われて
コンパイル通らんし。で、他に方法無いんかなと思って。
地道にやります。失礼しました。
0133login:Penguin02/05/13 13:28ID:9l4vLaBH
僕はFreeBSDな人なんですが、rpm2cpioとかいうのを
使って展開していますね。
0134plamoユーザ02/05/13 18:05ID:c5nvN02Z
>>133
お蔭様で、あっさり動きました。快適です。
有難うございました。
0135 02/05/14 01:52ID:IZxJRGuk
Pentium4のマシンを買うならば、絶対にメモリーの種類が
RDRAMのものを買うべし、買うべし。
0136正直alphaの大メモリ機は高スギ02/05/14 04:21ID:XDFbjSgq
ややスレ違いですが、
xeonマシンだとメモリ8Gとか16G積んでる奴ありますよね。
32bitマシンだと2Gだか4Gだかにメモリの壁があるとどこかで聞いた
覚えがあるのですが、このメモリは単一の計算でめいっぱい使いきれる
のでしょうか?
普通に巨大計算できるのか、並列化しないとできないのかご存知の方
いらっしゃいません?

ちなみにifc6.0用のdebianパッケージがここに置いてありました。
http://www.gfd-dennou.org/arch/cc-env/ifc/
0137login:Penguin02/05/14 05:13ID:XO5C21R+
>>136
Pentium Pro以降のCPUにはPAEというアドレス変換機構がついて
いるので、64GBまでは扱えます。ただし、チップセットの制限に
引きずられますが。あと、変換のオーバヘッドがあるので、
パフォーマンスも悪化します。
Linuxでもこの機能はサポートされてます。

たぶん単一の計算でめいっぱい確保できるでしょう。
0138login:Penguin02/05/14 05:47ID:XDFbjSgq
パフォーマンスの低下がどの程度か気になりますが、大規模計算は
できるのですね。参考になりました。
0139login:Penguin02/05/14 06:10ID:XO5C21R+
しかし、この手の使い方なら実績あるSolaris8とかが良いかと思われ
0140login:Penguin02/05/15 05:38ID:gSF91Ka8
>>137,138
大規模計算をやっている人ならばFortranな人が多いと思います。
sizeof(integer)=8 でないと困るように思いますが、ifcはPentium4
SSE2で64bit integer扱えるはずですが、-tpp7でも
でもそういうコードは吐かなかったです。僕が間違えた可能性は
高いですが。
AMDのx64や、Intel も IA-64 以外にもPentiumの64bit
拡張を考えているようですね。
ではでは。
0141login:Penguin02/05/16 05:17ID:GYM8ysqy
5.0まではAMDのAthlonThunderbirdでFortranコンパイラがちゃんと
作動しましたが、どうやら6.0からは、Athlon上のLinuxでは
コンパイラが動きません。セグメントエラーなどが起きる。
0142login:Penguin02/05/16 06:41ID:5yZwyBjV
マジデスカ?
0143login:Penguin02/05/19 22:26ID:TA85Te6I
>>141
おかしいなと思っていたら、本日マシンはお亡くなりになって
しまいました。M.B.か、CPUがいかれていて、BIOS画面すら起動
しなくなってしまった。
0144login:Penguin02/05/23 01:52ID:MUEwqJ2X
icc 6.0試してみました。Pentium4上でgccとの最も大きな違いはmath関数
にあるようです。expやsin,cosはgccの10倍以上の速度でした。

しかし、ベクトル化はコンパイラの条件が厳しくてほとんどされないし、
されても加速は2倍行かないですね。やっぱり、ベクトル型スパコンとは
違うんだと思いました。


0145 02/05/24 02:38ID:8A5lq9k5
Pentium4用にはどんなコンパイルオプションを使えばもっとも速い
コードがでますかね。
0146login:Penguin02/05/25 19:50ID:7ZkaIBTb
>>144
にわかには信じられん。exp, sin, cos は数値演算プロセッサに渡している
だけだと考えられる。gcc側はへんなライブラリをかませているのか?
0147 02/05/26 02:34ID:7Wq7WMOb
組み込み関数としてインライン展開されたり、MMX命令の類をつかって
いたりするのかもね。パイプライン化に最適なコードを出しているのが
効くのかも。インテルのMATHライブラリーはすごく最適化していると
思う。
0148login:Penguin02/05/26 06:59ID:yJVR8li1
>>147
なるほど!
0149login:Penguin02/05/26 10:25ID:yJVR8li1
>>146
やっぱりよーわからん。多分インライン展開はgccでもやっとると思うが。
あー頭イテ。
0150login:Penguin02/05/26 10:28ID:4fUXbWUZ
>>146
コプロの命令は死ぬ程おそいんだYO
0151名無しさん@お腹いっぱい。02/05/26 11:49ID:ALTTjrt3
つーか、誰か-Sで調べてくれよ。
0152login:Penguin02/05/26 14:04ID:kDtJ2VZ7
>>119
> (途中でKTERMの画面の標示の白黒反転が狂うのが欝。)
Vineのftpに解決法が載っていたような。moreがどうとか…
rxvtとかではならんらしいです。
0153名無しさん@お腹いっぱい。02/05/26 19:53ID:ALTTjrt3
激しくスレ違いだけど、>>119の報告に応えると言うことで、

file:///usr/share/doc/xterm/xterm.faq.html#xterm_hiliteより、

Reverse video is not reset

When running less or other programs that do highlighting, you see the
highlighting not turned off properly.

This may be due to incompatible terminal descriptions for xterm. With XFree86
3.2, I modified the terminal description for XFree86 xterm to use the VT220
(aka ISO 6429) controls that allow an application to turn off highlighting (or
bold, underline) without modifying the other attributes. The X Consortium xterm
does not recognize these controls.

If, for example, you are running an older xterm and rlogin to a system where
the newer xterm has been installed, you will have this problem, because both
programs default to $TERM set to xterm. The solution for mixed systems is to
install the newer terminal description as as a different name (e.g.,
xterm-color) and set the termName resource accordingly in the app-defaults file
for the system which has the newer xterm.

続きに、「What $TERM should I use?」つーのがあって、
xtermの場合、xterm-xfree86ってのを使えってさ。
0154login:Penguin02/05/27 17:17ID:W/KwZtKC
>>151
やってみたところで結果が理解できない自分を発見しますた
0155login:Penguin02/05/27 22:12ID:UHJ+0bj9
とりあえずちびっとだけやってみた。

#include <stdio.h>
#include <math.h>

main()
{
printf("%d\n",sin(3.14));
}
gcc-2.95.3だったら(FreeBSDだけど)、
main:
pushl %ebp
movl %esp,%ebp
subl $8,%esp
addl $-4,%esp
addl $-8,%esp
pushl .LC2+4
pushl .LC2
call sin
subl $8,%esp
fstpl (%esp)
pushl $.LC1
call printf
leave
ret
こんなコードを出しよる。
icc だと、
main:
.B1.1: # Preds .B1.0
pushl %ebp #5.1
movl %esp, %ebp #5.1
subl $3, %esp #5.1
andl $-8, %esp #5.1
addl $4, %esp #5.1
subl $16, %esp #5.1
fldl _2il0floatpacket.1 #6.17
fsin #6.17
movl $__STRING.0, (%esp) #6.17
fstpl 4(%esp) #6.17
call printf #6.17
# LOE ebx esi edi
.B1.2: # Preds .B1.1
xorl %eax, %eax #7.1
addl $16, %esp #7.1
movl %ebp, %esp #7.1
popl %ebp #7.1
ret #7.1
.align 4,0x90
そのままコプロをよびだすようなコードやね。
gcc はライブラリをはさむな。実際ライブラリのソースを
見るともうちょっと処理をしている。10倍はわからんが、
差はでるやろうな。
0156login:Penguin02/05/27 22:13ID:UHJ+0bj9
しかし、printf("%d\n",sin(3.14));
って笑うコードだな。すまん。間違えた。
0157login:Penguin02/05/28 00:02ID:I7J1z0a7
なんか、おもしろそうなことやってるね。

>>155
うちの環境は、Linux + glibc2.1 + gcc2.95.2。
/usr/include/math.hを追っていくと、/usr/include/bits/mathinline.hってのがある。
んで、どーも/usr/include/feature.hが-Oオプションを監視していて、
つけてると、リンク時にインライン展開してくれるみたいなんだなー。
で、-ffast-mathすると、nmの出力からsinが消える。

~/test$ gcc -O m.c -lm
~/test$ nm -a a.out |grep sin
08048420 T __sin
08048420 W sin
~/test$ gcc -O2 -ffast-math m.c -lm
~/test$ nm -a a.out |grep sin

憶測だけど、--fast-mathを指定しないと、全ての関数をとりあえず
wrapしてしまって、インラインアセンブラコードまでは展開されないって
可能性はないかな?

例の数倍の差が出たって人、-ffast-math使って追試きぼーん。
0158名無しさん@お腹いっぱい。02/05/28 01:10ID:fjbf3+Jg
iccってdebugger付いてるの? -g付けても、inline展開かね?
015914402/05/28 02:05ID:MAw0QlwZ
#icc -O3 -xW -tpp7 test.c
#time a.out
2.600u 0.030s 0:02.63 100.0% 0+0k 0+0io 145pf+0w
#gcc -O3 -ffast-math test.c
#time a.out
9.650u 0.020s 0:09.68 99.8% 0+0k 0+0io 86pf+0w
#gcc -O3 test.c -lm
#time a.out
11.210u 0.020s 0:11.25 99.8% 0+0k 0+0io 97pf+0w
#gcc --version
2.95.2

10倍は気のせいだったのか、再現できませんでした。すいません。
-ffast-mathなしで4.3倍、-ffast-mathからは3.7倍です。
test.cではsinを10^8回計算してます。

>>158
debuggerはldbです。
0160login:Penguin02/05/28 02:19ID:bUBmd7+C
>>159=144
結果さんきう。
まだ3,7倍かぁ。

> test.cではsinを10^8回計算してます。
じゃ、-funroll-loopsと-frerun-cse-after-loopもきぼーんぬ

ところで、-m686とか使っても変化なし?って
> #gcc --version
>2.95.2
かぁ。これってpentiumへの最適化もされないよね、たしか?


0161login:Penguin02/05/28 02:23ID:bUBmd7+C
>>159
できれば、テストしたソースもきぼーんぬ。
0162login:Penguin02/05/28 08:44ID:t5QZ3SAT
うげー、Linux(RH7.2)とFreeBSD では挙動が違うよー。
-ffast-math すると確かにLinuxでは
main:
fldl .LC33
pushl %ebp
movl %esp,%ebp
subl $8,%esp
addl $-4,%esp
#APP
fsin
#NO_APP
subl $8,%esp
fstpl (%esp)
pushl $.LC34
call printf
movl %ebp,%esp
popl %ebp
ret
となって実際にfsinを直接呼ぶね。
FreeBSDで同様の事(-ffast-math)をしても、call sin は取れなかった。
うげーーー。
#APP ってなんだろ。
#NO_APP
0163 02/05/28 08:59ID:w0d6+dv2
ほう、FreeBSDでiccとかifcがつかえるのですか。
どうやってインストールすればよいのか、詳細希望します。
できれば最新の4.5Rで。
0164名無しさん@お腹いっぱい。02/05/28 10:16ID:fjbf3+Jg
>>162
> #APP ってなんだろ。
> #NO_APP

Assembler PreProcessor.

asm文使うと挿入されます。
#NO_APP
asm文のコード
#APP
逆だから、optimize optionやdebug optionや付けるlibraryで、
fsinの実体が変わったりするのかね。
0165login:Penguin02/05/28 14:55ID:aPvGsWSr
>>163
ちっとむつかしい。あんまりおすすめしない。
icc はlinux_base-7を入れなければならないが、
FreeBSD ネイティブバイナリを生成する。すばらしい!!
C++はコンパイルできないみたい?
ifc はまだsend-prしたばかり。FreeBSDネイティブバイナリ
作成はむつかしいと思う。
4.5-Rだと入らない。icc は 5.0 なので、もう手に入らない。
ports を cvsup すれば入る。
わからなかったら 4.6-Release まで待つべし。
そこまで解説する情熱がもてない。すまん。
>>162
ありがとうございました。
さっきfreebsd-users で
話してたのですが、FreeBSD(4.6-RC, gcc-2.95.3 buildin)
でも
-O -ffast-math -mfancy-math-387
ってやれば、fsin を出していることがわかりました。
0166login:Penguin02/05/28 22:52ID:lr8zx0zz
http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/68750
http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/68752
http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/68753
http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/68755
http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/68758
http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/68759
http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/68766
http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/68770
016714402/05/29 08:15ID:aVv8ARHZ
>>161
#include <math.h>
#define N 1000*1000
main()
{
int i, j;
double *a = (double*)malloc (sizeof(double) * N);
double *c = (double*)malloc (sizeof(double) * N);
for (i = 0; i < N; i++)
a[i] = 1.0 * i;
for (j = 0; j < 100; j++)
for (i = 0; i < N; i++)
c[i] = sin(a[i]);
}

-mpentiumpro -funroll-loops -frerun-cse-after-loop効果なしです。
~
0168login:Penguin02/05/29 11:33ID:D7OquwsK
>>167
多分、インテルコンパイラは、外側のループ無くなってるな...
0169login:Penguin02/05/29 11:36ID:D7OquwsK
それとも、キャッシュがヒットするようにうまいことやってるのだろうか...
0170login:Penguin02/05/29 14:30ID:gGpH3Xsz
167のプログラムで、sinでなくてexpだと、gcc -O3に対して約14倍、gcc -O3 -ffast-math
に対して約9倍となりました。ただし、expだとoverflowするので、a[i]=1.0/(i+1)としています。
gccのexpはあまり最適化されていないようです。

>>168
>>169
繰り返し数に対しても配列の大きさに対しても、計算時間は線形に増加します。
また、ループの中外を入れ替えても結果は変わりません。
0171login:Penguin02/05/30 11:27ID:Q1DeRRtz
>>170
ほんとかなと思ってためしてみました。
malloc をよばないようにして。
#include <math.h>
#define N 1000*1000
main()
{
double a[N];
double c[N];
int i, j;

for (i = 0; i < N; i++)
a[i] = 1.0 * i;
for (j = 0; j < 100; j++)
for (i = 0; i < N; i++)
c[i] = sin(a[i]);
}
当方Celeron800ですが、
icc -O3 -tpp6 -xiMK -S test1.c
でこんぱいるすると、fsinが一つも入っていないぞ!
つーか、コードを見ると最後の二重ループはまわってさえいない。

gcc -mpentiumpro -O3 -ffast-math -mfancy-math-387 test1.c
でのコードは素直だ。ちゃんと fsin を使っているし、普通に
アセンブラに出力されている。
つーわけで、参考にならん。
まぁそりゃそうだ。というのもこのコードを最適化すると出力が
全くないから
#include<stdio.h>
main(){}
と等価だもんな...
0172login:Penguin02/05/30 11:32ID:Q1DeRRtz
つーわけで、コードを変えてみた。
#include <stdio.h>
#include <math.h>
#define N 1000*1000
main()
{
double a[N];
double ans;
int i, j;

for (i = 0; i < N; i++)
a[i] = 1.0 * i;
for (j = 0; j < 100; j++)
for (i = 0; i < N; i++)
ans = +sin(a[i]);
printf ("%lf\n",ans);
}

% icc -O3 -tpp6 -xiMK test1.c
% time ./a.out
-0.977352
14.926u 0.007s 0:15.41 96.8% 5+10175k 0+0io 0pf+0w
% gcc -mpentiumpro -O3 -ffast-math -mfancy-math-387 test1.c
% time ./a.out
-0.977352
15.089u 0.007s 0:15.15 99.5% 5+10193k 0+0io 0pf+0w
%
というわけで、誤差範囲。
もっと本質的なコードが必要だな...
0173login:Penguin02/05/30 11:42ID:Q1DeRRtz
おもしろい結果が出た。
% gcc -mpentiumpro -O3 -ffast-math -mfancy-math-387 test1.c
% time ./a.out
-0.977352
15.095u 0.007s 0:15.15 99.6% 5+10187k 0+0io 0pf+0w
% gcc -funroll-loops -mpentiumpro -O3 -ffast-math -mfancy-math-387 test1.c
% time ./a.out
-0.977352
2.355u 0.023s 0:02.39 99.1% 5+10184k 0+0io 0pf+0w
ま、こだわってもしゃあないな...
アセンブラのソースを見ると、二つ目のループは
unroll されてない。つーことは律速は 1コ目のループか。
でも、icc に勝ったぜ!
(またミスった。ans を初期化していないや。すまん)
0174login:Penguin02/05/30 11:47ID:Q1DeRRtz
172, 173 と
あまり意味無いことを書きました。ごめんなさい。
朝飯ぬいたので血糖値が低いみたいです。
#include <stdio.h>
#include <math.h>
#define N 1000*1000
main()
{
double a[N];
double ans;
int i, j;
ans=0.0;

for (i = 0; i < N; i++)
a[i] = 1.0 * i;
for (j = 0; j < 100; j++)
for (i = 0; i < N; i++)
ans = ans + sin(a[i]);
printf ("%lf\n",ans);
}
で試した。
% icc -O3 -tpp6 -xiMK test1.c
% time ./a.out
23.288398
15.070u 0.015s 0:15.95 94.5% 5+10209k 0+0io 0pf+0w
% gcc -funroll-loops -mpentiumpro -O3 -ffast-math -mfancy-math-387 test1.c
% time ./a.out
23.288398
14.811u 0.000s 0:14.98 98.8% 5+10197k 0+0io 0pf+0w
% gcc -mpentiumpro -O3 -ffast-math -mfancy-math-387 test1.c
% time ./a.out
23.288398
15.067u 0.000s 0:15.16 99.3% 5+10180k 0+0io 0pf+0w
■ このスレッドは過去ログ倉庫に格納されています