[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 10/27 07:58 / Filesize : 141 KB / Number-of Response : 567
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

MMX SSE 3D NOW!のプログラミング



1 名前:デフォルトの名無しさん [04/05/28 22:00]
どうぞ

255 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 21:01:22 ]
ttp://hitokuso.kicks-ass.org/bilinear.zip
2年前のソースをそのまま晒す恥知らずの俺サイコー

256 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 21:31:14 ]
>>255
こ、更新日時が2004/12/12 10:07!!
俺は特に見たかったわけではないが、>>255はある意味で神。
よかったな、>>32

257 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 22:36:18 ]
>>255
すげぇw

258 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 14:43:13 ]
これから、64bitのWindowsが普及してくる(使えるレジスタ倍増)のと、
Core2やK8LでSSE命令のレイテンシは据え置きでスループットが倍になること、
これらによってSSEの使い方がかなり変わってくるだろう。

259 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 02:30:01 ]
急にSIMDとかインラインアセンブラ使いたくなってやってみたんだけど、
トイプログラムで

 A: SIMD化+とことんオプション最適化
 B: とことんオプション最適化
 C: SIMD化
 D: 軽くオプション最適化
 E: ベタ書き



 A:B:C:D:E = 10:15:30:35:60 #速度比

と、実は結構コンパイラオプションのチューニングだけで
いけてしまうことがわかってコンパイラスゴスと思ってしまった。

A:Bでも10:15位の速度比があるのでSSEとか効いてはいるんだけど、
最初はC:Dで止まってて「あんま変わんないなぁ」とか思ってたら
B:Cで15:30とオプションいじるだけで下手なSIMD化を抜いてしまって
驚いた。よほど性能が必要なケース以外は下手に拡張命令使うより
コンパイラお任せで十二分にいい仕事してくれるのな。

自分は拡張命令覚えるよりコンパイラオプション覚えたほうがいい
レベルなのだと痛感しますた・・・


260 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 03:09:59 ]
処理内容に依存するからなあ。
どんなの?

SIMD化というのはインラインアセンブラ?
コンパイラに頼るなら組み込み関数という手も。
インラインアセンブラをまたいでは最適化が効かない。

最近はCPUが賢いというのも
コンパイラ有利な要因かも。

261 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 03:44:25 ]
>259
SIMDで最適化するならデータの配置も最適化しないと意味無いぽ。
てかコンパイラ、サンプルコード、計測方法、コアの情報も無く比だけ提示されてもな、って感じ。

262 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 16:58:12 ]
正直、そのデータ配置の最適化ってのがどういうもんなのかよくわかんね・・・
セオリーとかあるの?

263 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 17:10:13 ]
インテルのマニュアルにSoAとかAoSとかについて書いてある。



264 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 21:27:32 ]
何にせよ、どんな処理を高速化したいのか
書いてくれないと話が進まない。

265 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 22:58:45 ]
>>260
いや、トイプログラムって書いてる通り、1M個くらいのfloat列を
2つ乗算するだけのコード。インラインアセンブラもやったこと
なかったので、最初はインラインアセンブラで書き始めて、途中で
Intel/MS/GNUが全部同じAPIで叩かせてくれると気づいて書き直した。

これまでやったことがなかったので経験のためやってみただけなので、
あまり真剣に取らないで・・・スマソ。

でもコンパイラオプションだけで考えていた以上に性能が接近すると
知ったのは収穫でした。問題の部分に使うクロック数で非SIMDは3倍
程度はかかるかと思ってたから。


266 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 23:16:32 ]
>>265
そういうのをトイプログラムというのか。
今のCPUだと、floatならSIMDの方が速いと思うが、
float*1M個*2つ=8MBなので、L2キャッシュに乗らず、
単にメモリがネックになってるだけと思われる。

非SIMDでfloatの乗算をするのに、うまく最適化すれば
Athlon系なら1クロック、Pentium系なら2クロックでできる。
それに対しメモリ帯域は1〜2byte/clkだから、
2つのfloatをロードし結果をストアするのに12byteのアクセスを
するのに全然帯域が足りてない。

つまり、ここで必要なのはSIMDでなくプリフェッチ。
>>259のどのコードも、FP演算ユニットは遊んでいたと思われる。
もっとも、SIMDのロードやストアはアクセスの単位が大きいので、
メモリアクセスが効率化されて若干速くなる。
AとBの差はそれだろう。

267 名前:・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 mailto:sage [2006/11/29(水) 23:43:32 ]
結果の格納を別の配列にしてるんならmovntpsが有効なのでつ

x87からライトスルー命令は使えないし、やっぱりSSEまんせー



268 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 23:52:32 ]
>>266
いやそれがですね、-fprefetch-loop-arrays とかいうオプションが
あってまさにそれやってくれてたんですよ。

わざわざ拡張命令使わなくても限定的ながら自動ベクトルかとかも
してるそうで、もうコンパイラ様々というか。


269 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 00:00:04 ]
>>267
あ、それを忘れてた。

>>268
すごいなコンパイラ。
すると、インラインアセンブラを使うと最適化が効かないから
プリフェッチもしてくれないわけで、それでAがBに勝ったの?

コンパイラの吐いたプリフェッチコードキボンヌ。

270 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 04:55:32 ]
そもそも機械的な最適化に負けるコード吐いてる次点でSIMDがどうこう言う資格無い。
時々勘違いしてる奴がいるが、アセンブラ化すれば速くなるわけじゃない。
コンパイラで出来ないことをアセンブラで最適化するから速くなる。
MMX/SSE命令並べただけで速くなるならコンパイラだってそうするだろうよ。

271 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 05:20:08 ]
>>270
コンパイラに負けるから勉強して
SIMDを使えるように頑張るんじゃないか。

272 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 11:31:10 ]
うん、勉強頑張るのはいいよな。
「コンパイラの最適化で十分」とか結論付けるのは良くないよね。

273 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 20:51:08 ]
VC8で64bitコードにインラインアセンブラを使えないのが腹立たしい。
MASMだと煩雑だしプリプロセッサも無い。
組み込み関数じゃ思った通りの命令を生成しない。



274 名前:・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 mailto:sage [2006/11/30(木) 21:58:25 ]
COFF形式でコード吐きだせば別にアセンブラは何だっておkだよ。
むしろx64対応のアセンブラそのものが少ないのが問題。

x64でプログラミングやるならVC++Std + PSDK + ICCが一番コストパフォーマンスいいと思う。

275 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 22:14:39 ]
yasm使ったことある人いる?

276 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 07:50:32 ]
インラインうぜーよ
モジュール分けろやボケが

277 名前:デフォルトの名無しさん [2007/02/18(日) 10:10:27 ]
裏切派遣って知ってる?
元々は正社員だったのに取引先にフリーのほうが稼げるとか騙されて派遣やってるバカのことw

前の会社を裏切り、結局派遣先からも騙されてる。
そもそも信頼されてるなら直接契約するか正社員にするはずだが、派遣会社経由って舐められ杉

自分でも騙され裏切れられてることは薄々わかってるから派遣問題の話が出るとウッキー!って逆ギレw


278 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 01:15:50 ]
krypton1.at.infoseek.co.jp/x86/x86ext.htm

279 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 09:39:36 ]
そんなサイトよか光成さんの方がよい

280 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 13:19:31 ]
>>279
光成さんって?

281 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 14:24:27 ]
光成 SSE
でぐぐったらこんなページに出会った。
homepage1.nifty.com/herumi/index.html

あー、確かにこれはいいものだわ。

282 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 15:17:55 ]
>>281
XBYAK
なんじゃこりゃ、すげぇ

283 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 06:38:58 ]
むしろこのスレで知らない人が居るのに驚いた訳だが



284 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 10:04:48 ]
禿同

285 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 21:08:56 ]
今更ながら MMX を使用した MMX_MemCpy() を作ってみたが普通の memcpy() と10%も速度が変わらなくて萎えた…

286 名前:・∀・)っ-○◎● mailto:sage [2007/03/13(火) 22:33:09 ]
FSBで律速されるからね。
キャッシュ内で使う場合は十分意味ある。

287 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 22:56:37 ]
>>286の言う通りメモリの速度に依存する。
それに64byteとか128byteごとにキャッシュされるんだから
4byteずつコピーしようが8byteずつコピーしようが殆ど同じ。
重要なのはプリフェッチ。

L1のサイズをきちんと考慮してプリフェッチしてからmemcpy()を繰り返してもいけたりして。

288 名前:285 mailto:sage [2007/03/14(水) 07:59:02 ]
そうなのか…
8Byte境界なら MM7 レジスタまで使用して64Byte転送するとかやってみたんだが同じなのか。orz

289 名前:名無し募集中。。。 mailto:sage [2007/03/14(水) 21:13:59 ]
数%でも高速化されるならそれは凄い事だと思うよ

290 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:42:23 ]
後は用途によってノンテンポラル関連を使うとかだよな。

291 名前:285 mailto:sage [2007/03/15(木) 23:32:55 ]
>>289
最初はそう思おうとしたが、さらに速いマシンで実行したら効果がさらに薄くなったんだよつД`
1Gコピーしても50msも変わんねぇ

292 名前:・∀・)っ-○◎● mailto:sage [2007/03/15(木) 23:38:30 ]
そんな大容量のコピーするからこそかわらんのですよ
キャッシュの中でうまく捏ね回すのがSIMDプログラミングの掟

293 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 23:42:26 ]
正直単純なメモリ転送を最適化する暇があるなら、転送中ヒマをもてあましてる演算器の活用方法でも考えたほうが。



294 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 13:38:50 ]
32bitのDIB(R8G8B8A8)を24bitのDIB(R8G8B8)にアルファブレンドする関数を書いているのですが、
Cでテーブルを使って実装すると、テーブルへのアクセスがボトルネックとなって、
他の処理と比べて重くなってしまいます(テーブルは256x512x4で、L2にも入らない)。
そこでMMXを使ってみようと考えたのですが、
MMX命令を用いた計算方法そのものは分かるものの、
ピクセル単位の異なる二つの画像を、上手くMMXレジスタに配置する方法が分かりません。
どなたかご教授下さいませんか。
#どちらのDIBも、横幅が8の倍数であることは保障されています。

295 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 14:25:33 ]
mov ecx, pixelcnt
mov esi, DIB32
mov edi, DIB24
label:
mov mm0, esi
mov mm1, edi
--なんか処理--
add esi, 4
add edi, 3
loop label
後は最初か最後にediからの読み込みに1Byte前後して読んでシフトする処理が必要になるけど、
ループの外で処理すればいいし、テーブル参照するよりゃ速いんじゃね?

296 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 13:51:06 ]
>>295
どうもありがとうございます。
シフト処理を入れたら上手く配置できて、
二倍近く速度が出るようになりました。

297 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 17:21:13 ]
>295
どーでもいいけど、
mov mm0, [esi]
mov mm1, [edi]
じゃね?

298 名前:・∀・)っ-○◎● mailto:sage [2007/04/04(水) 21:13:55 ]
っていうかmovdじゃね

299 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 02:13:45 ]
movq な。

300 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 02:18:01 ]
あ、この場合movqでなくてmovdになるか…。

301 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 04:15:49 ]
つまり団子は普通に名無しで潜伏してる

302 名前:・∀・)っ-○◎● mailto:sage [2007/04/06(金) 21:41:06 ]
イミフ

303 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 14:50:25 ]
ttp://www.cutt.co.jp/book/4-87783-169-1.html

こんな本が出てるね。初学者にはありがたいかも。
SSSE3やSSE4の解説は載ってないっぽいけど、仕方ないか・・・。



304 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 20:06:23 ]
上下で都合2マソ取ろうっての?ボッタクリ過ぎだろ。
x86アセンブラ入門+IntelのPDFで十分。

305 名前:・∀・)っ-○◎● mailto:sage [2007/05/27(日) 16:37:14 ]
>>303
要らん

操作画面の横でPDF表示する為のサブディスプレイを2万で買ったほうが有意義

306 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 16:53:13 ]
ひでぇ商売だ

307 名前:・∀・)っ-○◎● mailto:sage [2007/05/27(日) 16:59:20 ]
著者の情報調べてみた
ttp://www.vector.co.jp/vpack/browse/person/an001828.html

最近の作品さっぱり無いな

308 名前:デフォルトの名無しさん [2007/05/27(日) 17:41:16 ]
mmxって廃止なの?
代わりに何をつかえばいいの?

309 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 17:44:22 ]
>>303
不要。
最近のコンパイラは、SSEを自動的に使ってくれる。
むしろ、その最適化にやさしいコードを書いた方がよい。
手動で最適化したところで、大抵数パーセントも上がらない。


310 名前:・∀・)っ-○◎● mailto:sage [2007/05/27(日) 18:29:03 ]
SIMD Intrinsicsの解説やってる実践的な本のほうが欲しいな。
それもIntelで十分か。
どうせならAltiVecとかCellのSPUとかも扱って移植性とパフォーマンスを両立する方法とかね。

311 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 22:26:02 ]
>>310
Intrinsicsの解説自体はコンパイラのドキュメント読めば十分理解できるだろ。
むしろ実践的なアルゴリズムをいかにSIMDに落とし込むかという話のほうが読み応えないか?

312 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 18:33:00 ]
>>309
アセンブラでSSE使うことが不要というのは言いすぎだと思う。
まあ、結果としてこの本が不要という結論にはなるだろうが。

313 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:27:06 ]
>>310
移植とかは、COINSにお任せしておけば良いのでは



314 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:50:18 ]
金融SE、プログラマにこの辺やOpenMPのHPC系技術をおぼえてほしいんだがな。
誰もわからんからユーザーの俺がプログラミング。どういうこっちゃ。

315 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:59:53 ]
金融で、そんなにシングルスレッド性能がいるの??


316 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 01:07:04 ]
金融の一部の分野は大量データの高速計算や
複雑な計算を瞬時に行う必要がある。

317 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 07:57:11 ]
へー、どんな計算?

318 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 16:21:28 ]
>>316
こういう奴ってさも物事を大げさに書きたがるが、具体的な例や数字は
一つも書かないから結局何を言っているのかさっぱりわからないんだよな。

319 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 19:24:02 ]
>>318
こういう想像力の無い奴に物事を説明するのって疲れるんだよな

320 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 19:56:50 ]
想像力……www

321 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 20:09:35 ]
>>318
デリバのプライシングとか、ALMでのVaR計算とかなんだが詳しく書いても
多分分らんと思うが。

322 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 20:29:00 ]
知らないことを想像しろと言われても、ヒントもなしでは結構難しいと思うのだが。

323 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 20:31:13 ]
リロードしてなかったorz



324 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 20:37:36 ]
>321
それは具体的な「業務内容」であって、具体的な「例」でも「数字」でも無いと思うんだ。
ここが金融系の板ならそれで通じるかもしれんが、ここはム板だから。
例えば必要精度何桁でどんな数式を秒間何万件処理する必要があるとか、そういうこと。
専門用語でお茶を濁す事は具体例では無い。

325 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 20:52:19 ]
>>324
たとえば百万件のデータから求める解を得るためにニュートン法等を数種類、複数回駆使ししたり
モンテカルロシミューレーションで数十万回の試行を行ったりといったこと。

これらはスレッド単位の高速化とマルチスレッドでの高速化により絶大な効果が得られる。
しかし高速化の技術を知るエンジニアは極めて少ないのが実情。

ってとこ。

326 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 21:51:55 ]
モンテカルロ法でSIMD使って絶大な効果ってどんだけ単純なシミューレションだよ。
マルチコア、マルチCPU環境等でマルチスレッドなら同意できるが、
中途半端にSIMD使っても結局速くなった気がするだけ。

がちがちにコーディングする暇があるなら速くなるかもしれないけど
そんなことで工数がホイホイ増えるくらいなら計算機にお金使ったほうがマシ。

327 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 22:00:56 ]
>>326
高速化するために数学的手法を駆使したMCなんだが
MCがすべて単純な繰り返しと思っているレベルの頭脳では話にならん。


328 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 22:27:38 ]
>327
お前プログラマじゃないだろ?
具体例の無い説明といい、「xxを駆使」とかいかにも営業が使いそうな言い回しといい、胡散臭すぎる。

329 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 22:35:50 ]
>>328
流れを読め。

オレ=>>314
これからこの話題につながってるんだが。

また別にお前に依頼してる訳ではないから具体的に書く必要性もない。


330 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 23:43:09 ]
以下、「お前こそ」禁止。

331 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 00:14:39 ]
うーむ、よくみりゃ誤字ってたな。

>>327
MCが単純って書いた覚えはないよ。
金融工学の問題ってSIMDがクリティカルに利いてくるような
単純な代数計算なのかって話。

332 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 00:43:42 ]
たとえばExceで用意されているNormdistといった確率分布関数のようなものは
商用ライブラリーを購入する手があるが、処理スピードと精度のトレードオフの調整が利かない。

これをCで組むと四則演算+EXPの多用となる。普通にプログラミングするとかなり遅いがSIMDを使うと大幅に
高速化する。SIMDにEXPがあると良いのだが。


333 名前:・∀・)っ-○◎● mailto:sage [2007/06/01(金) 00:59:18 ]
その辺はニュートン法使ったりテーラー展開したり。
Intelが数学用ライブラリ出してなかった?

x87のアレはどうせマクロ命令なので。
ちなみにdivpsとかで得られる商は近似値で精度低い。



334 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 01:06:33 ]
標準関数よりニュートンのほうが早いってことあるのか?
ニュートンは方程式を解くのに多用するが初期値問題があるしな。

MKLのEXPは使い方によるだろうが、メモリにデータを貯める必要があるときは高速だろうが
そうでないとメモリアクセスの遅さがネックになってあまり役立たない。

335 名前:・∀・)っ-○◎● mailto:sage [2007/06/01(金) 01:12:44 ]
SIMDで組み直せば標準関数のスループット越えることなんてざらにあるよ。
あくまでSIMD使うからこそ意味があるんだけど。

336 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 01:24:31 ]
へ-そうなんだ。
とすれば試してみる価値あるな。

expのニュートンは簡単そうだし。。。
初期値どうするかな

337 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 01:33:41 ]
金融の問題って収束が遅いモンテカルロでどうにかなるのか。

338 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 01:37:50 ]
使わないですめばそれにこしたことはない。
解析的に求める方法がなければモンテカルロを使うしかない。
という理由で使われる。

339 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 09:24:19 ]
結局金融には直接関係ない部分の話になっちゃったね。

340 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 00:29:40 ]

>>335
よく考えたら f(x)=exp(x)で f'(x)=exp(x)だからexpをニュートンで求めるのは無理だな。
 
テーラー展開でやってみたんだが
・テーラー展開式 exp(x)=肺^n/n!
・階乗部分をすべて初期値設定
0!:n0=1
1!:n1=1
2!:n2=2
・・・
x:入力値
expsse:求める値

x=_mm_mul_pd(x,x);
expsse=_mm_add_pd((expsse, _mm_div_pd(x, n0));
x=_mm_mul_pd(x,x);
expsse=_mm_add_pd((expsse, _mm_div_pd(x, n1));
x=_mm_mul_pd(x,x);
expsse=_mm_add_pd((expsse, _mm_div_pd(x, n2));
・・・

こんな感じ。for分使わずn=20までやって精度9桁くらいだったかな。
しかし処理時間は非常に遅かった。
時間がなかったのであまり詳しく調べなかったがコーディングに問題あるかな?


341 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 01:32:46 ]
Visual C++ 2005 で ssse3 の intrinsics が使えるようだ

342 名前:・∀・)っ-○◎● mailto:sage [2007/06/05(火) 06:08:53 ]
いつのまにSSSE3まで使えるようになったのか
インラインアセンブラのニーモニックは使えるが


343 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 14:01:57 ]
>342
お前が>333でネタ振ったんだから責任もって>340のフォローしろや



344 名前:・∀・)っ-○◎● mailto:sage [2007/06/05(火) 19:50:20 ]
レイテンシのチェインがある mulpd→divpd→addpd
対象データが複数あるなら複数インターリーブするとスループットが稼げます。

345 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 20:33:01 ]
>>344
その理論で行けばSPEのスカラも多くはスループット1クロックで処理出来るんだがな。
つーかx86にその理論を適用するにはレジスタが足(ry

346 名前:・∀・)っ-○◎● mailto:sage [2007/06/05(火) 20:34:12 ]
レジスタリネーム

347 名前:・∀・)っ-○◎● mailto:sage [2007/06/05(火) 20:39:13 ]
XORでゼロクリアしたり(Core 2からSIMDレジスタにも適用)
データ移動(部分データ移動は不可)するとレジスタリネームのヒントになる

SIMDレジスタは内部的に80程度はあるからそこそこいけるんでない?


Cellの演算ユニットはIntelアーキのそれの倍のレイテンシがかかる。
SPEのスカラが性能でないのは、そもそもベクタ化すら出来ないデータを
並列処理でレイテンシ隠蔽するには限界があるから。


348 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 21:00:36 ]
演算器が先にストールする。

349 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 21:06:06 ]
連投失礼。
レジスタリネームとかって言ってる人のコードの書き方に興味がある。
よっぽどコンパクトな演算じゃない限り演算結果をレジスタから追い出さなきゃいけないと思うんだが。

350 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 21:36:42 ]
問題は十分な精度が得られないことだと思う

速度を上げることはそんなに難しくない

定数除算を逆数との乗算に置き換える

a4*x^4 +a3*x^3 +a2*x^2 +a1*x + a0

(((a4*x+a3)*x+a2)*x+a1)*x+a0

tmp=a[N]
for(i=N-1;i>=0;i--) tmp=tmp*x+a[i]

(初期化部分は省略)
LOOP:
mulpd xmm4, xmm0
mulpd xmm5, xmm1
mulpd xmm6, xmm2
mulpd xmm7, xmm3
addpd xmm4, [esi]
addpd xmm5, [esi]
addpd xmm6, [esi]
addpd xmm7, [esi]
add esi, 16
sub ecx, 1
jnz LOOP

351 名前:・∀・)っ-○◎● mailto:sage [2007/06/05(火) 21:50:00 ]
いや除算は近似値命令だから乗算に置き換えるだけである程度
精度確保できるんじゃないの?

Intelはx87倍精度は内部的に80ビット精度に展開して処理してるけど
SSEは精度度外視してたような。
精度が必要ならx87のほうがいいかもしれない

352 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 22:11:04 ]
近似値なのはrcpps,rsqrtps命令で、
divpsは近似値じゃないんじゃない?

353 名前:・∀・)っ-○◎● mailto:sage [2007/06/05(火) 22:21:41 ]
いや近似値。内部的に逆数近似値と乗算してるだけ。



354 名前:・∀・)っ-○◎● mailto:sage [2007/06/05(火) 22:22:19 ]
ちなみに本物の除算は何十クロックもかかりますから。

355 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 22:28:36 ]
>>353
そのソースは?
rcppsのレイテンシとmulpsのレイテンシを足しても
divpsのレイテンシよりずっと短いよ。
インテルの命令セットマニュアルには
rcpps,rsqrtpsの説明には近似値であると明記してあるけど、
divpsには近似値なんて書いてないよ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<141KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef