【糞】Pentium4最適化への道

このエントリーをはてなブックマークに追加
1DX4Inside
Pentium4 が糞なのはわかってる。

技術者ならば、糞だ糞だと言う前にどうすればその能力を
引き出せるのか考えるべき

みんなで一緒に考えましょう

関連URL : http://www.intel.co.jp/jp/developer/design/pentium4/manuals/index.htm

俺の意見 : cmov 使え
2デフォルトの名無しさん:02/07/11 12:07
i486SXサイコー
80x86ってのはモード切り替えが多目。そのかわりデバッガは無し。これ
で、そいつをロジアナでトレース。これ最強
素人にはお勧めできない
とりあえずWindowsには決定的に向かないのでやめよう。
x86は死の呪文(ザキ)です。
口にしてはいけません。
>>1
ま、cmovはうまく使わないとな。
分岐予測が外れやすいところで、使うと効果的。
分岐予測が当たりやすいところで使うと、かえって遅くなる。

cmovはフラグの値が確定するまで待ち状態になる。
分岐はフラグの値が確定していなくても、予測して処理を進める。
VC6のコンパイラオプションなんだけどさ、

/GB [ブレンド]
Pentium 用に作成されたコードを最適化します。
 80386 (/G3)、80486 (/G4)、Pentium (/G5)、および Pentium Pro (/G6)
 オプションの最適化をブレンドします。このオプションは、_M_IX86 プリプ
 ロセッサ マクロに対して値 500 を使用します。これは、デフォルトの値で
 す。コンパイラの今後のバージョンでは、主流のプロセッサに合わせて別の
 値を使用する予定です。

これって.NETになって拡張されてるの?
Pentium4向けのオプションとかあってもよさそうなものだが。
8DX4Inside:02/07/11 19:37
<<< テストコード >>>

; Jccバージョン
cmp dword [ebp], 0
jle .continue
or [ebx], byte 1
.continue

; CMOVccバージョン
xor ecx,ecx
cmp dword [ebp], 0
cmovg ecx, eax
or [ebx], ecx

<<<< 65535回行ったときの計測結果 >>>>

[ebp]の値が常に正の場合 Jccバージョンの方が速い
[ebp]の値が常に負の場合 Jccバージョンの方が速い
[ebp]の値が正負混ざる場合 CMOVccバージョンの方が速い

<<< 結論 >>>>
CMOVは分岐予測が外れやすいところで使うべし


9DX4Inside:02/07/11 20:19
>>7

cl.exe の最適化オプション

/G3 80386 用に最適化する
/G4 80486 用の最適化を行う
/G5 Pentium 用に最適化する
/G6 PPro、P-II、P-III 用に最適化する
/GB ブレンドの最適化を行う (既定)

... という感じで拡張されていないのでは?

Intelのコンパイラでは /G7 オプションがあって
Pentium4をターゲットにした最適化できます。

ttp://www.intel.co.jp/jp/developer/software/products/compilers/c60/index.htm



vc.netの/GBは600
>>8
おもしろいねそれ。
true/falseがある確率でランダムに出るとして、
速度が同じになるのはどれくらいの偏りのときだろう。
デノーマル数の演算ってめちゃくちゃ遅いんだね。
Pen4で、普通なら6クロックで終わる浮動小数点乗算が
デノーマル数だと1000クロック以上かかる。
せいぜい数10クロック程度だろうと思ってた。

#include <iostream>
using namespace std;
void main() {
 float a=1.0e-40; // a=1.0;
 float b=0.99;
 int clks;
 __asm {
  movss xmm0,a
  movss xmm1,b
  mov ecx,1000
  rdtsc
  neg eax
  mov clks,eax
 repeat:
  mulss xmm0,xmm1
  sub ecx,1
  jne repeat
  rdtsc
  add clks,eax
  movss a,xmm0
 }
 cout << clks / 1000.0 << " clocks" << endl;
 cout << "value = " << a << endl;
}

初期値 a=1.0e-40(デノーマル数)の場合の結果:
1224.15 clocks
value = 7.00649e-044

初期値を a=1.0 にした場合の結果:
6.096 clocks
value = 4.31717e-005

初期値 a=1.0e-40(デノーマル数)で、最初に
__asm {
 sub esp,4
 stmxcsr [esp]
 or dword ptr [esp],0x00008800
 ldmxcsr [esp]
 add esp,4
}
を追加してゼロ・フラッシュ・モードで実行した場合の結果:
7.404 clocks
value = 0
13デフォルトの名無しさん:02/07/18 03:11
Itaniumスレとして再利用(・∀・)シチャオーヨ!
アセンブラで効果あったのPentiumまでだなあ
PPro以降はハンドスケジューリングの効果もあまりなかったし
SSEが必要になったこともまだないや。
Itaniumなんかもう人の手じゃ無理なんじゃないか?
レジスタ数128本なんてケチ臭いことを言わずに、
汎用4096本+フラグ、ハードウェアスタック、プログラムカウンタなどを搭載してくれれば、
やりくり考えずに盛大にレジスタ使いまくれるのに。
16デフォルトの名無しさん:02/07/18 17:09
CPU依存する命令を使って高速化するのは非常にコストがかかる上、
保守もしづらい。漏れの会社なんかだと、アセンブラ読める人間が数人、
その中で、SIMDが解釈できるのは漏れだけ(涙

頑張って最適化するより、CPUのクロックが上がる方が手っ取り早い罠。
Itaniumのレジスタスタックエンジンってどういうもの?
論理的にはかなりのレジスタが使えることになるのかな。
>>15
>汎用4096本
なんかポインタ地獄ならぬレジスタ地獄になりそうだな(w
19デフォルトの名無しさん:02/07/18 17:42
>>15
キャッシュと同じで、ある数以上は、
性能向上にほとんど寄与しないと思われ。
20デフォルトの名無しさん:02/07/18 17:43
相手に有無のPDF落としたーYO
色付きだたYO
>>19
フラクタル圧縮なんかの、小さなブロックを繰り返し走査するタイプのプログラムには効果絶大じゃないの?
すべてのデータをレジスタに保存しておけるし。
レジスタってSRAMみたいな構成なのかな?
23デフォルトの名無しさん:02/07/18 22:24
>>21
キャッシュにヒットしてれば、レジスタとの差異はさほど無いよ。
パイプラインがうまく流れれば、メモリからレジスタへの転送に必要な
オーバヘッドも隠蔽されるから、実質差はうまれないんじゃないかな。

今時のCPUの課題はメモリネックと分岐予測ミスということで
レジスタがいっぱいあると、(静的/動的とも)マルチスレッドで
いろいろおもしろそうなことができそうな気がする。
プログラマは手が出ないかもしれないけど。。
26デフォルトの名無しさん:02/07/19 10:56
レジスタ一杯あるとなると
 1、割込やマルチスレッド・タスクの切替が重くなる
 2、命令サイズが肥大化し易い
から嫌

それより一部の1チップでやってる、サイクルスチールで
全レジスタセットを切り替えられ仕掛けが欲しいな
2725:02/07/19 15:19
>>26
たしかに従来みたいに単純に増やして、1スレッドが全部のレジスタを
使えるようにしたら嫌なカンジになるでしょう。
レジスタセット切り替えとかウィンドウとかの機構が必要ね。
結局、このスレにはPentium4最適化できる奴いねーの?
>>26
Z80 の裏レジスタを思い出しちゃった。なつかしー。

>>28
Pen4 最適化できる奴は、インテルにしかいないと思う。
>>27
レジスタセット切り替えに関しては、どうせOOOのためにレジスタリネーミング
とかの処理が入るから、それを利用すれば比較的簡単に複数スレッドのレジ
スタセットを同時に持たせるようなことはできると思う。つーかPentium4は
複数スレッドを実行できるから、何らかの方法でレジスタセット切り替えは
やっているはず。

ウインドウレジスタは無駄だと思うが。そんな使わないレジスタに面積使う
よりキャッシュ載せたほうがましでは?
スレのタイトルと離れ気味で恐縮だが。

確かにウィンドウはどんな場合でも有効というわけではないです。
わしの理解では、ウィンドウは時間的局所性が期待できずにキャッシュが
利かない状況下でのメモリ遅延の隠蔽のための手段だと思ってるのです
が、違いますかな?キャッシュの足りんとこを補うみたいな。それにキャッシュ
は結局レジスタにデータを取ってこなきゃならんのだから、そんなら始め
からレジスタにとってもよさそうな気がします(プリフェッチもプリロードも
レイテンシ隠蔽手段の発想はほとんど同じだし)。

なお、ウィンドウ関係は、論文読める環境なら、筑波でやってた
擬似ベクトルプロセッサが参考になります(キャッシュもふまえている)。
(たしかオーム社の)IA-64の日本語の本(題名失念)でもいいですが。
Pen4のSSE2命令セットを見てて思ったんだけど、
PSLLDQ, PSRLDQ 命令ってなんで8bit(バイト)単位でしかシフトできないの?
PSLLW/PSLLD/PSLLQ 命令等は1bit単位でシフトできるのに。
なんでこんな手抜き命令を追加するんだか…。
32x32=64bitの乗算命令PMULUDQも符号なし乗算のみで
符号あり乗算命令として存在すべきPMULDQ命令は無いし。
全くあきれるよ。
そう言えば、
VC6のプロセッサパックや、
VC++.NETにはMMX,SSE,SSE2などの組み込み関数が用意されているみたいだけど
誰か使った人いる?

ttp://www.microsoft.com/JAPAN/msdn/vstudio/downloads/ppack/default.asp
34デフォルトの名無しさん:02/07/25 00:54
JavaでPen4 class作れよ
35what's opecode!:02/09/21 00:59
15 FF FF FF FF
Pentium4HTが普及したらお前ら無理やり
マルチスレッド化しないとユーザーに侮られますよ。
37デフォルトの名無しさん:02/09/21 01:20
んなことない。
38デフォルトの名無しさん:02/10/19 12:26
クロックとかの情報ってどこで手に入るんですか?
>>38
なにか?
40デフォルトの名無しさん:02/10/28 16:25
>>38
clock?
>>35
it is MOV!
the immediate values move 0xffffffff to eax.
>>38
はぅ
自作板でレイトレ・ベンチのPen4の
惨憺たる結果が話題になってる。
>>38
ハァ?
45デフォルトの名無しさん:02/12/04 21:27
55,000円
47デフォルトの名無しさん:02/12/13 19:48
age
48デフォルトの名無しさん:03/01/06 11:53
>>38
ルーチンの前後で
>>38
チンチンの前後で
>>38
ペアリングなんかの問題で一概には言えないから、
ルーチンの前後で rdtsc を入れて調べれ
51IP記録実験:03/01/08 21:48
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
俺のアイピーも記録されそうです!
53IP記録実験:03/01/09 02:56
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
書き込みした当事者の責任が問われるようになる第二段階という感じですかね。
最終的にはスレ立てしたヤツと書き込みしたヤツが法廷に引っ張り出される、と。
キタキタキタキタ━━━(゚∀゚≡(゚∀゚≡゚∀゚)≡゚∀゚)━━━━!!!!!!!!!!
あっはっは
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
何年も前から予想されていたとおり、
民事での兵糧責めにひろゆきは屈したわけだが、
しかし、さっさとヲチ板とかはトマト導入せんと、
今度は、いずれは名誉毀損の幇助で刑務所ってことになるぞ。(藁
誹謗中傷は昔からお断りだろ。
内部告発はともかく。
短い時間で味のある文章書くなぁ、、
>>141
まだなハズ
アイドル画像板だめぽ
ネット弁慶
>>898
でも訴えるとさらにその話が大事になって結局意味ねーよ
みたいなことで泣き寝入りしたパターンが多かったみたいだけどね。
>>544
漏れも「今から危険な領域に突入しようと(以下略」みたいなとこまでは
いったんだが…。気になるけど見たくない…。
フーン
・圧縮やなんかでdat落ちした分を省いた
・報告無しで処理された分を省いた
・まとめが好きで好きでたまらないまとめ大好きっ子だった
237 名前:ニュー速から来ました 投稿日:03/01/08 17:51 ID:AX1ZY0DD
IPとは何でしょうか



↑素人は誰だ!!!!!!!
質の低いって言ってもせいぜい荒らしとかのことだろう。
ピンクちゃんねるの方は、1月9日からHな広告のIP出てるよ。
この間の厨房版みたいに。
自由と無秩序のはき違え・・・か。

ただ、差別の非差別による差別やタブーに付いて、一般人が気軽に話せる
場所がなくなるのは勿体無い気もするなぁ。

あめざー行けばいいよ。
電撃タンも行ったみたいだし。

# まだいるかは知らん
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
でもこれまで起きてる訴訟だけでもかなりのものだからな。
ひろゆきは破産だろ。
俺は低学歴でクズでゴミとか書いても大丈夫でしょうか?
みんな串刺してるのか・・・
俺は生だからうかつな発言はできないなぁ(w
そういや今日早速ニュー速で連続投稿荒らしがいたな
放っといたほうが面白いんじゃないかな。
>>IP記録

告発ネタが減少するのは残念。

・WTCテロのリーク
・西部の松坂の駐車違反
・牛肉買い上げの告発

等々、
いろいろとおいしいネタがあったのになあ。
おまえらの知ってる2ちゃん内の告発ネタを教えてください。
11 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:16 ID:rLfxQ17l
全レスです。
2ちゃんねるも現実ですよ。

大好きだったけど〜、IP取るなんて〜♪

 
いや、俺のIP記録してもいいけど字汚いから読めないかもよ。
小学生は俺が守る! ハァハァ
匿名で書き込み、何処の誰ともしない奴に煽られ、
それでいて、いわゆる荒らし行為に臨む者が存在する現状で誰も文句を言わないと言うのはおかしくないか。

住所などを表示した場合のセキュリティはどうする?
仮に本名で語り合ったとしてもその「本人であるという認証」はどうする?
IPアドレスやリモートホスト、メールアドレスの表示があったとしても偽名で書き込むのはなんなくできてしまう。
「身元」と言う表現を使うなら、それはハンドルネームを用いるネット上の全てのコミュニティ、
サイトに対する挑戦となってしまうな。
2002年2ちゃんねるアニメランキング1位のアニメに・・・・

モナーが出演決定!!!!!!!!!!!!!!!!!!!!!

<<放送時間>>
1/12
大阪 テレビ大阪 (日)9:30〜10:00
東京 テレビ東京 (日)9:30〜10:00
名古屋 テレビ愛知 (日)9:30〜10:00
福岡 TVQ九州放送 (日)9:30〜10:00
札幌 テレビ北海道 (日)9:30〜10:00
岡山・高松 テレビせとうち (日)9:30〜10:00 
何か勘違いしているように読めるのだけれど。

2ちゃんで7日以内に反論するのは「削除依頼された書き込みをした書き込み者」だよ。
その人が、書き込みが正当である旨反論すれば、管理人としては削除すべきではないという
積極的な心証を得る場合があり、ひいてはISP責任法の免責事由になる場合もある、
というのが狙いだと思っています。

あと、
>確かにレスが事実誤認であることを証明するのは 原告側。
原告側にこの証明責任はありません。

ホビーの作業、乙です。
89山崎渉:03/01/13 18:51
(^^)
もうどうでもいいだろ、クチビルゲは
マルチスレッドサポートとマルチプロセッササポートを混同してる笠原1輝は記事を書くな。
帰れ。
92山崎渉:03/01/15 18:06
(^^)
93山崎渉:03/01/23 22:16
(^^)
俺は低学歴でクズでゴミとか書いても大丈夫でしょうか?
んなことない。
96デフォルトの名無しさん:03/03/06 19:40
rdtscは同期命令じゃないんだが。
97デフォルトの名無しさん:03/03/21 20:28
ペンタとは関係ないんだが、最適化スレが見当たらなかったのでここへ。

あるクラスのメンバ関数内で
そのクラスのメンバ変数m_itemsが下記のように参照されていた。

while(n<m_items.size())

で、これを

size_t count=m_items.size();
while(n<count)

と書き換えたところ、処理速度が10%ほど低下してしまった。

ローカルじゃない変数はローカル変数に代入した方が
より最適化が効き、早くなるとどっかで見て信じていたので驚きだったよ。

ちなみにコンパイラはVC++ .NET
>>97
アライメント良く見れ。
99山崎渉:03/04/17 15:52
(^^)
100100 get!:03/04/26 11:19
101山崎渉:03/05/28 13:22
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
ワラタ
ネット弁慶
104山崎 渉:03/08/02 02:34
(^^)
105山崎 渉:03/08/15 17:07
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
106デフォルトの名無しさん:03/09/25 18:55
>>97
ループ中で頻繁にREADだけされる値は
レジスタに貼り付けるよう最適化するのは、
今のコンパイラじゃ普通じゃないの?
というかさ、プログラマなんだから速度が低下した〜
じゃなくて、アセンブラのソース貼り付けろよ。



。  。。              
         。ρ。       ううっ!出るっ!!
         ρ         ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
         mドピュッ
        C|.| /⌒⌒⌒ヽ/~ ̄ ̄ ̄ ̄ヽ
      /⌒ヽ⌒ヽ___   |  ∴ヽ  3  )
     ./  _  ゝ___)(9     (` ´) )←>>1-1000
    /  丿ヽ___,.───|彡ヽ ―◎-◎-|
    _/ )          (   Y ̄ ̄ ̄ ̄)
   (__/           \____/


108デフォルトの名無しさん
で、結局x86-64は速いの遅いの?