【糞】Pentium4最適化への道
■ このスレッドは過去ログ倉庫に格納されています
0001DX4Inside
NGNG技術者ならば、糞だ糞だと言う前にどうすればその能力を
引き出せるのか考えるべき
みんなで一緒に考えましょう
関連URL : http://www.intel.co.jp/jp/developer/design/pentium4/manuals/index.htm
俺の意見 : cmov 使え
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNGで、そいつをロジアナでトレース。これ最強
素人にはお勧めできない
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG口にしてはいけません。
0006デフォルトの名無しさん
NGNGま、cmovはうまく使わないとな。
分岐予測が外れやすいところで、使うと効果的。
分岐予測が当たりやすいところで使うと、かえって遅くなる。
cmovはフラグの値が確定するまで待ち状態になる。
分岐はフラグの値が確定していなくても、予測して処理を進める。
0007デフォルトの名無しさん
NGNG/GB [ブレンド]
Pentium 用に作成されたコードを最適化します。
80386 (/G3)、80486 (/G4)、Pentium (/G5)、および Pentium Pro (/G6)
オプションの最適化をブレンドします。このオプションは、_M_IX86 プリプ
ロセッサ マクロに対して値 500 を使用します。これは、デフォルトの値で
す。コンパイラの今後のバージョンでは、主流のプロセッサに合わせて別の
値を使用する予定です。
これって.NETになって拡張されてるの?
Pentium4向けのオプションとかあってもよさそうなものだが。
0008DX4Inside
NGNG; 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は分岐予測が外れやすいところで使うべし
0009DX4Inside
NGNGcl.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
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNGおもしろいねそれ。
true/falseがある確率でランダムに出るとして、
速度が同じになるのはどれくらいの偏りのときだろう。
0012デフォルトの名無しさん
NGNGPen4で、普通なら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
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGPPro以降はハンドスケジューリングの効果もあまりなかったし
SSEが必要になったこともまだないや。
Itaniumなんかもう人の手じゃ無理なんじゃないか?
0015デフォルトの名無しさん
NGNG汎用4096本+フラグ、ハードウェアスタック、プログラムカウンタなどを搭載してくれれば、
やりくり考えずに盛大にレジスタ使いまくれるのに。
0016デフォルトの名無しさん
NGNG保守もしづらい。漏れの会社なんかだと、アセンブラ読める人間が数人、
その中で、SIMDが解釈できるのは漏れだけ(涙
頑張って最適化するより、CPUのクロックが上がる方が手っ取り早い罠。
0017デフォルトの名無しさん
NGNG論理的にはかなりのレジスタが使えることになるのかな。
0018デフォルトの名無しさん
NGNG>汎用4096本
なんかポインタ地獄ならぬレジスタ地獄になりそうだな(w
0019デフォルトの名無しさん
NGNGキャッシュと同じで、ある数以上は、
性能向上にほとんど寄与しないと思われ。
0020デフォルトの名無しさん
NGNG色付きだたYO
0021デフォルトの名無しさん
NGNGフラクタル圧縮なんかの、小さなブロックを繰り返し走査するタイプのプログラムには効果絶大じゃないの?
すべてのデータをレジスタに保存しておけるし。
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGキャッシュにヒットしてれば、レジスタとの差異はさほど無いよ。
パイプラインがうまく流れれば、メモリからレジスタへの転送に必要な
オーバヘッドも隠蔽されるから、実質差はうまれないんじゃないかな。
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNGいろいろおもしろそうなことができそうな気がする。
プログラマは手が出ないかもしれないけど。。
0026デフォルトの名無しさん
NGNG1、割込やマルチスレッド・タスクの切替が重くなる
2、命令サイズが肥大化し易い
から嫌
それより一部の1チップでやってる、サイクルスチールで
全レジスタセットを切り替えられ仕掛けが欲しいな
002725
NGNGたしかに従来みたいに単純に増やして、1スレッドが全部のレジスタを
使えるようにしたら嫌なカンジになるでしょう。
レジスタセット切り替えとかウィンドウとかの機構が必要ね。
0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNGZ80 の裏レジスタを思い出しちゃった。なつかしー。
>>28
Pen4 最適化できる奴は、インテルにしかいないと思う。
0030デフォルトの名無しさん
NGNGレジスタセット切り替えに関しては、どうせOOOのためにレジスタリネーミング
とかの処理が入るから、それを利用すれば比較的簡単に複数スレッドのレジ
スタセットを同時に持たせるようなことはできると思う。つーかPentium4は
複数スレッドを実行できるから、何らかの方法でレジスタセット切り替えは
やっているはず。
ウインドウレジスタは無駄だと思うが。そんな使わないレジスタに面積使う
よりキャッシュ載せたほうがましでは?
0031デフォルトの名無しさん
NGNG確かにウィンドウはどんな場合でも有効というわけではないです。
わしの理解では、ウィンドウは時間的局所性が期待できずにキャッシュが
利かない状況下でのメモリ遅延の隠蔽のための手段だと思ってるのです
が、違いますかな?キャッシュの足りんとこを補うみたいな。それにキャッシュ
は結局レジスタにデータを取ってこなきゃならんのだから、そんなら始め
からレジスタにとってもよさそうな気がします(プリフェッチもプリロードも
レイテンシ隠蔽手段の発想はほとんど同じだし)。
なお、ウィンドウ関係は、論文読める環境なら、筑波でやってた
擬似ベクトルプロセッサが参考になります(キャッシュもふまえている)。
(たしかオーム社の)IA-64の日本語の本(題名失念)でもいいですが。
0032デフォルトの名無しさん
NGNGPSLLDQ, PSRLDQ 命令ってなんで8bit(バイト)単位でしかシフトできないの?
PSLLW/PSLLD/PSLLQ 命令等は1bit単位でシフトできるのに。
なんでこんな手抜き命令を追加するんだか…。
32x32=64bitの乗算命令PMULUDQも符号なし乗算のみで
符号あり乗算命令として存在すべきPMULDQ命令は無いし。
全くあきれるよ。
0033デフォルトの名無しさん
NGNGVC6のプロセッサパックや、
VC++.NETにはMMX,SSE,SSE2などの組み込み関数が用意されているみたいだけど
誰か使った人いる?
ttp://www.microsoft.com/JAPAN/msdn/vstudio/downloads/ppack/default.asp
0034デフォルトの名無しさん
NGNG0035what's opecode!
NGNG0036デフォルトの名無しさん
NGNGマルチスレッド化しないとユーザーに侮られますよ。
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNGなにか?
0040デフォルトの名無しさん
NGNGclock?
0041デフォルトの名無しさん
NGNGit is MOV!
the immediate values move 0xffffffff to eax.
0042デフォルトの名無しさん
NGNGはぅ
0043デフォルトの名無しさん
NGNG惨憺たる結果が話題になってる。
0044デフォルトの名無しさん
NGNGハァ?
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNGルーチンの前後で
0049デフォルトの名無しさん
NGNGチンチンの前後で
0050デフォルトの名無しさん
NGNGペアリングなんかの問題で一概には言えないから、
ルーチンの前後で rdtsc を入れて調べれ
0051IP記録実験
NGNGhttp://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を提出することがある。
0052デフォルトの名無しさん
NGNG0053IP記録実験
NGNGhttp://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を提出することがある。
0054デフォルトの名無しさん
NGNG最終的にはスレ立てしたヤツと書き込みしたヤツが法廷に引っ張り出される、と。
0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0058デフォルトの名無しさん
NGNG民事での兵糧責めにひろゆきは屈したわけだが、
しかし、さっさとヲチ板とかはトマト導入せんと、
今度は、いずれは名誉毀損の幇助で刑務所ってことになるぞ。(藁
0059デフォルトの名無しさん
NGNG内部告発はともかく。
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGまだなハズ
0062デフォルトの名無しさん
NGNG0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNGでも訴えるとさらにその話が大事になって結局意味ねーよ
みたいなことで泣き寝入りしたパターンが多かったみたいだけどね。
0065デフォルトの名無しさん
NGNG漏れも「今から危険な領域に突入しようと(以下略」みたいなとこまでは
いったんだが…。気になるけど見たくない…。
0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNG・報告無しで処理された分を省いた
・まとめが好きで好きでたまらないまとめ大好きっ子だった
0068デフォルトの名無しさん
NGNGIPとは何でしょうか
↑素人は誰だ!!!!!!!
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNGこの間の厨房版みたいに。
0071デフォルトの名無しさん
NGNGただ、差別の非差別による差別やタブーに付いて、一般人が気軽に話せる
場所がなくなるのは勿体無い気もするなぁ。
0072デフォルトの名無しさん
NGNG電撃タンも行ったみたいだし。
# まだいるかは知らん
0073デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0074デフォルトの名無しさん
NGNGひろゆきは破産だろ。
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNG俺は生だからうかつな発言はできないなぁ(w
0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG告発ネタが減少するのは残念。
・WTCテロのリーク
・西部の松坂の駐車違反
・牛肉買い上げの告発
等々、
いろいろとおいしいネタがあったのになあ。
おまえらの知ってる2ちゃん内の告発ネタを教えてください。
0080デフォルトの名無しさん
NGNG全レスです。
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNG大好きだったけど〜、IP取るなんて〜♪
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNGそれでいて、いわゆる荒らし行為に臨む者が存在する現状で誰も文句を言わないと言うのはおかしくないか。
住所などを表示した場合のセキュリティはどうする?
仮に本名で語り合ったとしてもその「本人であるという認証」はどうする?
IPアドレスやリモートホスト、メールアドレスの表示があったとしても偽名で書き込むのはなんなくできてしまう。
「身元」と言う表現を使うなら、それはハンドルネームを用いるネット上の全てのコミュニティ、
サイトに対する挑戦となってしまうな。
0086デフォルトの名無しさん
NGNGモナーが出演決定!!!!!!!!!!!!!!!!!!!!!
<<放送時間>>
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
0087デフォルトの名無しさん
NGNG2ちゃんで7日以内に反論するのは「削除依頼された書き込みをした書き込み者」だよ。
その人が、書き込みが正当である旨反論すれば、管理人としては削除すべきではないという
積極的な心証を得る場合があり、ひいてはISP責任法の免責事由になる場合もある、
というのが狙いだと思っています。
あと、
>確かにレスが事実誤認であることを証明するのは 原告側。
原告側にこの証明責任はありません。
0088デフォルトの名無しさん
NGNG0089山崎渉
NGNG0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNG帰れ。
0092山崎渉
NGNG0093山崎渉
NGNG0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNGあるクラスのメンバ関数内で
そのクラスのメンバ変数m_itemsが下記のように参照されていた。
while(n<m_items.size())
で、これを
size_t count=m_items.size();
while(n<count)
と書き換えたところ、処理速度が10%ほど低下してしまった。
ローカルじゃない変数はローカル変数に代入した方が
より最適化が効き、早くなるとどっかで見て信じていたので驚きだったよ。
ちなみにコンパイラはVC++ .NET
0098デフォルトの名無しさん
NGNGアライメント良く見れ。
0099山崎渉
NGNG0100100 get!
NGNG0101山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNG0104山崎 渉
NGNG0105山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0106デフォルトの名無しさん
NGNGループ中で頻繁にREADだけされる値は
レジスタに貼り付けるよう最適化するのは、
今のコンパイラじゃ普通じゃないの?
というかさ、プログラマなんだから速度が低下した〜
じゃなくて、アセンブラのソース貼り付けろよ。
0107デフォルトの名無しさん
NGNG。 。。
。ρ。 ううっ!出るっ!!
ρ  ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
mドピュッ
C|.| /⌒⌒⌒ヽ/~ ̄ ̄ ̄ ̄ヽ
/⌒ヽ⌒ヽ___ | ∴ヽ 3 )
./ _ ゝ___)(9 (` ´) )←>>1-1000
/ 丿ヽ___,.───|彡ヽ ―◎-◎-|
_/ ) ( Y ̄ ̄ ̄ ̄)
(__/ \____/
0108デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています