2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

SSE AVXのプログラミング

1 :デフォルトの名無しさん:2010/05/26(水) 14:24:25
どうじょ

前スレ
MMX SSE 3D NOW!のプログラミング
http://pc12.2ch.net/test/read.cgi/tech/1085749218/

2 :デフォルトの名無しさん:2010/05/26(水) 17:33:42
MMXはぶってんじゃねーよ

3 :デフォルトの名無しさん:2010/05/26(水) 21:26:22
3D NOW!はぶって


よし

4 :デフォルトの名無しさん:2010/05/27(木) 16:54:37
即死しないといいね。

5 ::2010/05/28(金) 01:09:31
なんか書きこめよ、

6 :1:2010/05/28(金) 02:52:41
おい、さっさと俺様に役に立つこと書き込めよ

7 :1:2010/05/28(金) 17:06:51
早く書けよ
バカ

8 :デフォルトの名無しさん:2010/05/28(金) 17:27:54
>>7
即死しなくなるのは 20 くらいだっけ?
君の心意気は買うが、即死しなくなるまで一日一度でよい。

9 :1:2010/05/28(金) 17:36:26
>>8
うぜーよてめぇよぉ
誰にけんかうってんだ?
てゆーかさぁ同一人物の書き込みじゃないんだけど?

んなことより、さっさと何か俺の役に立つことを書き込みやがれ

10 :1:2010/05/28(金) 18:15:51
>>9
うるせ〜よバ〜カ

11 :デフォルトの名無しさん:2010/05/28(金) 22:24:24
即死を避けたいのはわかるが、罵倒はさすがにいかがなものか。
それっぽいコードを貼る、といった程度で勘弁してもらいたい。

12 :デフォルトの名無しさん:2010/05/29(土) 13:47:05
>>9
それはいいんだが、翌日になってから投稿すると、効率よく即死回避できるし、
もしかすると無駄な即死回避投稿する前に誰か何かネタを振ってくれるかも知れない。
だから投稿する前に一日待て。

13 :デフォルトの名無しさん:2010/05/30(日) 01:30:49
AVX使ってみた奴いる?
ど〜だった?使いやすい?

14 :デフォルトの名無しさん:2010/06/01(火) 01:18:41
何故?

15 :1:2010/06/05(土) 00:13:34
なんか書きこめよ、くずども

16 :デフォルトの名無しさん:2010/06/05(土) 01:00:22
なんか

17 :デフォルトの名無しさん:2010/06/05(土) 21:13:26
>>15
無理だろ
たかが1000レスに6年もかかったんだし
2日に1レスが妥当

18 :デフォルトの名無しさん:2010/06/05(土) 21:16:09
とりあえず前スレのMMX、SSE2、AMD64比較ベンチのソース
ttp://kawahenteko.hp.infoseek.co.jp/myapp.html

19 :デフォルトの名無しさん:2010/06/12(土) 20:22:54
すすまねえな

20 :デフォルトの名無しさん:2010/06/15(火) 03:02:12
インテル(R) Advanced Vector Extensions プログラミング・リファレンス
http://download.intel.com/jp/software/AVE/319433-006JA.pdf
p.86
3.2 YMM ステート管理
> AVX とFMA拡張をサポートするには、OS がYMM ステートを管理する必要がある。
> そうでない場合には、AVXあるいはFMA 拡張命令(VEX エンコーディングによる
> 拡張128 ビットSIMD 命令を含めて)を実行すると#UD 例外が発生する。

原文
Intel(R) Advanced Vector Extensions Programming Reference
http://software.intel.com/file/21558
P.90
3.2 YMM STATE MANAGEMENT
> An OS must enable its YMM state management to support AVX and FMA extensions.
> Otherwise, an attempt to execute an instruction in AVX or FMA extensions(including
> an enhanced 128-bit SIMD instructions using VEX encoding) will cause a #UD exception.

21 :デフォルトの名無しさん:2010/06/15(火) 22:19:14
http://msdn.microsoft.com/en-us/library/ff545910.aspx
In Windows 7 and Windows Server 2008 R2, both 32-bit and 64-bit versions of the operating system preserve the AVX registers across thread (and process) switches.

22 :デフォルトの名無しさん:2010/06/26(土) 18:26:07
SSEっていつまでサポートされる?
今後SSEのクロックあたりの実行速度が改善される見込みは?

23 :デフォルトの名無しさん:2010/06/26(土) 23:02:16
> SSEっていつまでサポートされる?
x86/AMD64がサポートされなくなるまで

>今後SSEのクロックあたりの実行速度が改善される見込みは?
複数のμOPに分解して実行していた命令が、1μOPで実行
できるような改良はありえる

24 :デフォルトの名無しさん:2010/07/01(木) 22:07:45
ビット論理演算て型によらず結果は一緒だよな?
なんで型ごとにあるんだ?
pxor / xorps / xorps とか。
例外も (対応CPUなら) 同じみたいだし。


25 :デフォルトの名無しさん:2010/07/01(木) 22:14:53
>>24
もすこしSIMDを勉強したほうがよく寝?

26 :デフォルトの名無しさん:2010/07/01(木) 22:18:17
>>25
どうしてもわからなくて夜も眠れないから
わかるなら教えてくれ!


27 :デフォルトの名無しさん:2010/07/01(木) 22:22:37
結果の出し方が違くね?

28 :デフォルトの名無しさん:2010/07/01(木) 22:28:39
結果の出し方は同じじゃね?


29 :デフォルトの名無しさん:2010/07/02(金) 02:18:02
整数SIMDブロックとFP-SIMDのブロックのそれぞれに用意されている
演算ユニットを明示的に使うため

30 :デフォルトの名無しさん:2010/07/02(金) 08:31:38
>>29
何のために?省電力?

パフォーマンスを考えた場合、
xorpd, xorps は PORT5 しか使えず、
pxor はPORT0, PORT1, PORT5 の3つを使える為、
pxor のみで十分だが。


31 :デフォルトの名無しさん:2010/07/02(金) 11:16:59
パフォーマンスのためだ
異なるブロック間でのデータのやり取りにはペナルティがあるので
各ブロックに演算ユニットが用意されている

32 : ◆0uxK91AxII :2010/07/02(金) 13:36:20
>>24
歴史的経緯に因る。

pdの追加は謎だけど。

33 :|ω・`):2010/07/02(金) 13:36:57
ペナルティがあったのって熱湯だけじゃないの?

34 :デフォルトの名無しさん:2010/07/02(金) 14:59:50
インテル(R) 64 アーキテクチャーおよびIA-32 アーキテクチャー
最適化リファレンス・マニュアル
http://download.intel.com/jp/developer/jpdoc/248966-017JA.pdf
のp.43,.56を読むんだ

35 :デフォルトの名無しさん:2010/07/02(金) 15:09:42
>>34
chapterごとにページ振ってあるんだが
何章の何ページだ?

36 :|ω・`):2010/07/02(金) 16:18:55
へー
ポート間じゃなくてintとfpの間に入るんだ

37 :デフォルトの名無しさん:2010/07/02(金) 22:35:56
addpd xmm0, xmm1
xorpd xmm0, xmm1
addpd xmm0, xmm1
xorpd xmm0, xmm1
....


addpd xmm0, xmm1
pxor xmm0, xmm1
addpd xmm0, xmm1
pxor xmm0, xmm1
....
でパフォーマンスを比べてみた。

●実測
Core2Duo の E8400とT7300では同じタイム。
Corei7 では後者が倍時間がかかった。

●シミュレーション
nehalem / sandy とも同タイム。


38 :デフォルトの名無しさん:2010/07/02(金) 22:41:17
addpd xmm0, xmm1
mulpd xmm2, xmm3
pxor xmm4, xmm5
pxor xmm6, xmm7
pxor xmm8, xmm9
の繰り返し

のように直後に値を使わない場合は
Corei7 だと pxor の方が実測、シミュレーションとも速い。
Core2Duoはこの場合もまったく同じ。


39 :デフォルトの名無しさん:2010/07/03(土) 12:28:47
整数演算主体のプロジェクトを
/arch:AVXでビルドしてもあまり速くならないの?

40 :デフォルトの名無しさん:2010/07/03(土) 12:39:25
SSEとAVX-128bitの組み込み関数は共通なので
コンパイラオプションで生成するバイナリを切り替えられる

整数SIMDの組み込み関数を使っているのなら
多少の性能向上はあると思われる

41 :39:2010/07/03(土) 12:45:39
>>40
とんくす

42 :デフォルトの名無しさん:2010/07/03(土) 12:49:48
エスパーだな。
俺はSSEを使っていないコードかと思った。

それだったら、多分最初の実装だとデコーダをカリカリにチューンはしないだろうから
命令の帯域がクリティカルな人は効果あるんじゃない?としか言えない。
命令長が短くなるのと、三項演算のおかげで退避に使う命令を減らせるからコードが全体的に少しだけ小さくなる。

43 :39:2010/07/03(土) 13:50:08
プロジェクトのほんのごく一部にSSE2のintrinsicを使ってます。
さらに/arch:SSEではほとんど速くならず、
/arch:SSE2ではかなり高速化したプロジェクトです。

44 :デフォルトの名無しさん:2010/07/03(土) 14:07:09
整数演算入ったのSSE2だし

45 :デフォルトの名無しさん:2010/07/03(土) 14:26:15
VCの/archはFPのスカラーコードで使う命令セットを
指定するのが主な使い方なので性能向上に過度な期待は
しないほうがいい

46 :39:2010/07/03(土) 15:01:42
分かりました。どうもありがとうございました。

47 :|ω・`):2010/07/03(土) 15:24:13
>>37-38
スループットの方は単純に fp logic の実行ポート数じゃん (Core2 は3つ、i7 は1つ)

レイテンシの方は、Core2 の fp logic 命令って実は int スタックらしいよ
だからどっち使っても同じ

48 :デフォルトの名無しさん:2010/07/04(日) 02:31:05
nehalemでは >>37 は前者の方が速いので、
ペナルティがあると考えるのが妥当かと。

ただ、シミュレーションの結果と一致しないのは気になるが。


49 :デフォルトの名無しさん:2010/07/04(日) 03:18:18
比較対象が違ってるんだが

50 :デフォルトの名無しさん:2010/07/04(日) 08:08:34
なにが?


51 :|ω・`):2010/07/04(日) 10:39:45
Nehalem の fp logic は fp スタックだから
他の fp 命令と繋ぐのはペナルティなし、int<->fp 繋ぐのは2クロックペナルティ
ってことで>>34の資料と一致してるんじゃない

シミュレータは多分うんこ

52 :デフォルトの名無しさん:2010/07/04(日) 10:50:49
"シュミレーター" の検索結果
約 334,000 件 (0.14 秒)

53 :デフォルトの名無しさん:2010/07/04(日) 15:06:07
>>51
Nehalem のFP/SIMD/SSE2 Move and Logic の Domain は FP と書いてあるんだけど、
これって嘘なの?


54 :デフォルトの名無しさん:2010/07/17(土) 20:37:01
__m128(fp32x4)の任意の要素に任意の値を書き込みたいんだが、
どういう実装がベストなのかな?↓がベストかな?

__m128 set_elem( __m128& v, const uint32_t index, float32_t e )
{
ALIGN(16) const float32_t mask_table[4*4] =
{
1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1
};

const __m128 mask = _mm_load_ps( mask_table + index * 4 );
return _mm_or_ps( _mm_and_ps( _mm_set1_ps(e), mask ), _mm_andnot_ps( v, mask ) );
}

55 :デフォルトの名無しさん:2010/07/17(土) 22:27:13
>>54
言語が何か分かんないけど、
float32_t の 1 でマスク作れるの?
andnot って1個目の引数のnotを取ると思うんだけど、順番あってる?

メモリ経由で、直接変更する要素に e を書くのとどっちが早いかなあ。


56 :デフォルトの名無しさん:2010/07/17(土) 22:47:40
>>55
すいません、どっちも間違ってましたw
まあ、実際1要素だけ書き換えなんて
やらないんでしょうねえ。

57 :デフォルトの名無しさん:2010/07/17(土) 22:59:05
4レジスタくらいなら直接保持したほうが速いと思う
で、値は1レジスタにまとめて読み込んで積をとる

58 :デフォルトの名無しさん:2010/07/24(土) 10:21:46
画像フォーマットの(en|de)codingで効果を発揮するのはSSE2までだけで十分だったりするの?
SSE3 SSSE3 SSE4まで使って頑張ってもSSE2までしか使わない場合と大して変わらないとかあるの?

59 :デフォルトの名無しさん:2010/07/24(土) 10:45:57
>>58
だんごさんはSSSE3が画像処理に意外と便利だと言っていたけど

60 :デフォルトの名無しさん:2010/07/24(土) 11:56:53
SSSE3 SSE4.1 SSE4.2は無用の長物。

61 :デフォルトの名無しさん:2010/07/24(土) 19:55:02
劇的に速くなることはマレだと思うが、
あれば便利な命令は結構ある。
互換性を考えると使いにくいけどね。

一般向け商用ソフトでパフォーマンスが重要なものの場合、
SSE2/SSE3/SSSE3/SSE4.1/SSE4.2/AVX/FMA....
と、すごい種類の可能性があって、
これらすべて用の関数を設計、チューニング、評価なんてとても出来ないから、
SSSE3/SSE4.1/SSE4.2 なんかは飛ばされがち。


62 :デフォルトの名無しさん:2010/07/24(土) 20:00:27
OOPのインターフェースつかってSSEのXXを対応したバージョンと、
それ以外のコードの2種類くらいを用意してあげればいいんじゃね?

環境はユーザー責任でスイッチしてもらう。

63 :デフォルトの名無しさん:2010/07/24(土) 22:04:16
>>62

それやりたいんだけどさ、C++のメンバ関数をアセンブラでどう書けばいいのかがわからない。
インラインアセンブラで書いたプログラムを64ビット用にコンパイルしようとしたら
cl64.exeはインラインアセンブラには対応してないとかエラーが出てコンパイルできないorz

64 :デフォルトの名無しさん:2010/07/24(土) 22:23:50
>>63
cl64.exeはインラインアセンブラ非対応。
ml64.exeを使うかintrinsic命令を使うかしかない。

>>62
ユーザーが自分でスイッチは無いな。
普通は実行時に自動判別。

事情により新命令を使ったバージョンしか作らないのなら、
対応してないCPUでの実行時は非対応CPUである旨を表示する。

個人で作った個人用アプリなど、非常に限られた人しか使わないのであれば、
非対応CPUで使ったらいさぎよくOSの例外発生メッセージが出るのもありかも。


65 :デフォルトの名無しさん:2010/07/25(日) 00:01:02
>>63
ぶっちゃけそのプログラムは64ビットネイティブにする必要はあるのか?

66 :デフォルトの名無しさん:2010/07/25(日) 09:11:31
>>65
おれは最近は、個人でしか使わない趣味のプログラムはすべて64bitネイティブだよ。
レジスタが倍あるし、いまさら窮屈なレジスタ数で組みたくない。
C++オンリーでもパフォーマンスは上だし。


67 :デフォルトの名無しさん:2010/07/25(日) 15:07:56
制約が緩くなるのはどう考えても悪いことじゃないな

68 :デフォルトの名無しさん:2010/07/25(日) 15:17:40
>>66そのきもちはすこしわかる。

68系のデータ8本、アドレス8本の環境から、
86系に移ってきたときには窮屈な思いをしたもんだ。

69 :デフォルトの名無しさん:2010/07/25(日) 19:10:36
>>65
>>63だが、>>66が全部言ってくれた。
インラインアセンブラで組んだウェーブレット変換のプログラムを
ちょっと64ビットで動かしてみたくなったのさ。

70 :デフォルトの名無しさん:2010/07/25(日) 21:32:13
CL /FA でアセンブリ出力して、修正、アセンブル、リンクですかのう。

71 :63:2010/07/26(月) 00:58:40
>>69
ありがとう
/FAオプションつけてコンパイルしたら、.asmファイルが出てきた
やる気出てきた。

ただ、今はDirectCompute用のプログラム書いてるんだけどね...
一応strategyパターン使ってCPU用とGPU用の処理を分けてる。


16 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)