GCCについて part8

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2009/06/21(日) 19:22:46
>>951
いやicc以外バグがあるってintelに指摘されてるでしょ
953デフォルトの名無しさん:2009/06/21(日) 19:24:16
>>952
ソースは?
954デフォルトの名無しさん:2009/06/22(月) 01:08:45
こういう嘘つき野郎って、やっぱり頭おかしいんだろうな
955デフォルトの名無しさん:2009/06/22(月) 05:23:14
GCC以前に64bitの演算器が32bit未満の並列粒度しか保障してない
CPUもなかったっけ?
956デフォルトの名無しさん:2009/06/22(月) 05:58:46
世の中にないと断言するのは難しいが。
957デフォルトの名無しさん:2009/06/22(月) 06:41:47
プレスコは32bit演算器のパイプ2段で64bit命令実行している。
CoreMAは最初のころ命令デコーダがEM64Tの命令切りわけ時に
ペナルティがあった。

レジスタが増えた分と実行性能が落ちる分とがあるから、
64bitにしたら単純に性能が上がるとは言えない。
958デフォルトの名無しさん:2009/06/22(月) 06:58:33
一般論で言えるわけではなく、そのCPUの出来が悪いってだけの話だな。
959デフォルトの名無しさん:2009/06/22(月) 10:11:04
Athlon64は初期のころから性能上がるケースが多かったけど、
Intel は Core2 でもあまり性能上がらなかったからな。
ネハーレンでやっと最初から64bitをターゲットに設計したCPUになった。
960デフォルトの名無しさん:2009/06/22(月) 20:34:09
そもそも、一般論で終わらない話題だろーが。
上のほうで「速くなる」とか「遅くなる」とか言ってるのがアホってだけで。
んなもん、CPUと対象のプログラムに依存するにきまってんだろ。
961デフォルトの名無しさん:2009/06/23(火) 00:08:05
iccもvcもpgも速くなるのに
なぜかgccだけは64bitでもっさりするw

終わってるよな
962デフォルトの名無しさん:2009/06/23(火) 04:53:20
vcは全然はやくなんねーけどな。
963デフォルトの名無しさん:2009/06/24(水) 02:02:15
レジスタいるような計算ぶん回してるときって、
push/popが実質0クロックで終わるから、レジスタ増えたこと自体は
大した解決にならないんでないの。
push reg/pop regも1バイト命令だし、ALUがボトルネックになるだろうから
今時のx86デコーダの負荷にはならんだろうし。

レジスタリネーミングが無いプロセッサとか、
レジスタ割り当て問題にコンパイラが悩まされてるときなら
レジスタが多いのは役に立ったけど、今となっちゃあ
それだけでパフォーマンスアップしろってのは難しいでしょ。
964デフォルトの名無しさん:2009/06/24(水) 02:09:10
スタックフレーム上のローカル変数(レジスタ割付できなかったもの)は
普通、push/popなんてしません。
毎回直接読み書きするし、
それがアドレスを示すものならば、必ずレジスタにロードしてから(アドレス先に)アクセスします。
965デフォルトの名無しさん:2009/06/24(水) 02:12:59
>>963の内容は
「レジスタ変数に割り当て可能なレジスタ」が増えた場合の話だけね。
局所的な計算に用いる「レジスタの増加」とはあまり関係ない。
966デフォルトの名無しさん:2009/06/24(水) 02:45:08
そういえば、レジスタが足りなくてpush/popするのは人間だけか。
でもやっぱりmovも0クロックじゃね?
ほとんどのケースで演算に隠れちゃいそうだけど。
967デフォルトの名無しさん:2009/06/24(水) 03:08:16
たとえキャッシュに乗っていたとしても、
メモリの読み書きとレジスタじゃ速度が違うんだよ。
そうでなければレジスタの存在意義が半減する。

だからこそRISCとかは沢山のレジスタを持ってるし
x86だってレジスタリネーミングとかを駆使して補おうとしている。
補えないから、一時変数としてのメモリの読み書きが発生してるんだがね。
968デフォルトの名無しさん:2009/06/24(水) 03:58:11
>>967
いや、だから今時のx64積んでるようなx86ってその「レジスタの存在意義が半減」してるから、
単にレジスタ増えただけじゃあんまり変らなくね?って話ですよ。
キャッシュアクセスのスループットがいくら悪くても、
前後の演算なりイテレーションなりに隠せないようなケースってのは
ほぼ無いと見ていいんじゃないかと。

もちろん、裏付けがあるわけではないので、
「んなわけねーよ、メモリ待ちでストールしまくりだよ」
と言われるとそれまでです。
969デフォルトの名無しさん:2009/06/24(水) 04:28:09
>ほぼ無いと見ていいんじゃないかと。

これだけは絶対ありません。
そして、(対32bitにおけるデコーダ等の不利の無い場合)
64bitで再コンパイルしたコードの速度が実際に速くなっているという事実が
全てを物語っていますけど。
970デフォルトの名無しさん:2009/06/24(水) 09:37:16
頼むからレジスタなんて多くても速くならないなんてスーパー馬鹿は放置してくれ
971デフォルトの名無しさん:2009/06/24(水) 13:17:59
あちこちで同じような馬鹿が沸いてるな
972デフォルトの名無しさん:2009/06/24(水) 16:33:04
レジスタの多かった下手なRISCよりもx86の方が早かったのも事実だが、
開発費を湯水のように使って高速なプロセッサの設計が出来、
開発費の回収も出来たからだろうな。

現状はレジスタ数を増やした方が早くなっているものの、早くなっていないアプリもある。
演算やポインタの単位が64ビットになって、キャッシュに対する影響が出ているのではないかと
思われるが、本当の理由についての解析は完璧に進んでいるのかな?
32bitでレジスタ増えるモードがあれば、相当に高速であるだろうとは思うが
そんな命令セットになってないし…
973デフォルトの名無しさん:2009/06/24(水) 16:41:49
974デフォルトの名無しさん:2009/06/24(水) 17:55:27
テンプレートを使ったコードのコンパイルエラーがもっと見やすくならない
ものか。あれでSTLを使うのに恐れをなす初学者は多いだろうな。
975デフォルトの名無しさん:2009/06/24(水) 18:17:53
conceptが完成の暁には〜
976デフォルトの名無しさん:2009/06/24(水) 18:19:42
977デフォルトの名無しさん:2009/06/24(水) 18:37:27
>>976
おお?
何じゃこれは?
978977:2009/06/24(水) 18:38:43
なつたん: STLFilt
ttp://natu.txt-nifty.com/natsutan/2007/08/stlfilt.html

あまり変わらないような気もするな。
979デフォルトの名無しさん:2009/06/24(水) 18:42:18
>>976
一時期使ってたことあったのだが、何でやめたのか思い出せない。
また使ってみるか。
980デフォルトの名無しさん:2009/06/24(水) 21:05:49
ActivePerlを入れるのが面倒なのとコマンドラインでしか
使えないので使い勝手が悪かったので俺はやめた
981デフォルトの名無しさん:2009/06/26(金) 00:46:51
redhat linux 8.0 で自分のディレクトリにgccインストールしようとしたら

make[2]: *** [configure-stage1-target-libgcc] エラー 1
make[2]: 出ます ディレクトリ `/***/src/gcc-4.3.3'
make[1]: *** [stage1-bubble] エラー 2
make[1]: 出ます ディレクトリ `/***/src/gcc-4.3.3'
make: *** [all] エラー 2

てな エラーが出るんだが、これってどう意味?
ググったけどあんまり参考にならなかった。
982デフォルトの名無しさん:2009/06/26(金) 00:55:10
もうちょっと上のほうのメッセージがないとなんとも

もうちょっと上のほうで xgcc だかなんだかがエラーはく
→ それを起動してた make がエラーになる
→ その make を起動してた make がエラーになる
って感じになってて、そのメッセージじゃその最後の2つだけしかわからないから、根本的な原因がわからない
983デフォルトの名無しさん:2009/06/26(金) 01:21:23
make cleanして
もう一回makeしたらこういうのが出ました。

checking for suffix of object files... configure: error: cannot compute suffix of object files: cannot compile

984デフォルトの名無しさん:2009/06/26(金) 01:27:06
disk fullなんじゃねーの?
985デフォルトの名無しさん:2009/06/26(金) 01:27:19
使っているgccが古すぎて新しいgccが正しく作れない。
なんて事もあったりする。

RH8じゃ元々入ってるのはかなり古くないかい?
986デフォルトの名無しさん:2009/06/26(金) 01:33:22
>>984
diskはフルじゃないこと確認した。

>>985
調べてみたけどgcc バージョン 3.2だ。2002年だけど、これってかなり古い部類?
987デフォルトの名無しさん:2009/06/26(金) 01:57:57
gmp,mpfrがらみ?
988デフォルトの名無しさん:2009/06/26(金) 02:04:32
>>987
それは両方とも最新のをインストールしてあります。
989デフォルトの名無しさん:2009/06/26(金) 02:09:43
上のエラーでググるとインストール先が変でxgccが起動してないってのがあった。
990デフォルトの名無しさん:2009/06/26(金) 04:31:46
>>986
gcc-3.4.6でgcc-4.1.1のクロスコンパイラ作ろうとしたら、
libgcc作る所でxgccがInternal Error吐いたことがあった。

gcc-4.3.3にしたら問題なし。





991デフォルトの名無しさん:2009/06/26(金) 07:24:07
configureの段階でバイナリ吐けないってlibcのヘッダが入ってないとかでないの?
992981:2009/06/26(金) 16:39:35
config.logから関係ありそうな部分抜き出してみた。
configure:3251: checking whether the C compiler works
configure:3257: ./a.out
configure:3260: $? = 0
configure:3277: result: yes
configure:3284: checking whether we are cross compiling
configure:3286: result: no

configure:3630: gcc -c -g -O2 conftest.c >&5
conftest.c:2: parse error before "me"

configure: failed program was:
| /* confdefs.h. */
|
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| /* end confdefs.h. */
|
| int
| main ()
| {
| exit (42);
| ;
| return 0;
| }
993デフォルトの名無しさん:2009/06/26(金) 19:55:13
それはstage1のtarget-libgccのconfig.logなの?
994デフォルトの名無しさん:2009/06/26(金) 21:00:16
いや、makeする前のconfigureのログだと思う。
>>983のエラーの後にfor more detail see cofig.logとか何とか書いてあったので見てみたわけです。
995デフォルトの名無しさん:2009/06/26(金) 22:22:41
stage1-gcc/cc1 --help
とかやって、コンパイラ本体が動くか確認してみては?
996981:2009/06/26(金) 23:30:37
>>995
すまん、それはそのまま
% stage1-gcc/cc1 --help
って打ち込めって事で合ってる?
997デフォルトの名無しさん:2009/06/27(土) 00:09:59
もうだめかも分からんね
998デフォルトの名無しさん:2009/06/27(土) 04:53:12
エラーをエラーと見抜けないと(gccを使うのは)難しい
999デフォルトの名無しさん:2009/06/27(土) 08:29:20
999
1000デフォルトの名無しさん:2009/06/27(土) 08:31:04
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。