1read 100read
2013年02月プログラム206: 【C++】高速化手法【SSE】 (879)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
UNIXプログラミング質問すれ Part10 (563)
国産オープンソースDIコンテナSeasar2 その16 (500)
画像処理 その13 (928)
【糞.NET】裏切り者には死を【アンチゲイツ】 (339)
【License】ライセンス総合【利用許諾】 (480)
リファクタリングがしやすいのは、静的型付け言語 (409)
【C++】高速化手法【SSE】
- 1 :2005/10/27 〜 最終レス :2013/01/11
- C++やインラインアセンブラ、SSEなどによる高速化の手法
について語りましょう。
- 2 :
- まずはi++は++iにしろよ。
- 3 :
- それで速度があがるならな
- 4 :
- Intelのコンパイラ買って開発したほうがいいんじゃね?
ヘタに素人が最適化なんてやるより
- 5 :
- アルゴリズムよりメモリアクセスが最大のボトルネックだったりする。
結局レジスタやキャッシュを意識するのが重要になってくる。
- 6 :
- >>4
コンパイラを変えるんじゃなくてパフォーマンスの解析ツールを
買わないとダメじゃないかな。
コンパイラ自体はVC7も用途によっては悪くないし。
- 7 :
- >>6
VC++はプロファイラがついてると思うが
- 8 :
- 今月のCマガ買って読め。
- 9 :
- STL使うなら自分で同じような物を作ったほうが高速。
- 10 :
- その心は?
- 11 :
- なんでいきなりSTLが・・・
- 12 :
- 主要部分をasmで書き直せばOK
- 13 :
- >>7
VC++のプロファイラは、普通に一通りの機能を備えているのに、使われないんだよね。
VC.NET用だと、Compuware(Numega)がプロファイラを無償で提供してくれてるよ。
VC++6.0まで、TrueTimeは売り物だったのにねぇ。
- 14 :
- >1
>>12
インラインアセンブラよりも、組込み関数を使ったほうがいいことが多い。
・コンパイラが最適化をしてくれる
・プログラムの記述が楽で、修正しやすい。
という2つの大きなメリットがあるよ。
- 15 :
- なおVC系の場合、
組込み関数をインライン展開する
というオプションを有効にしてしまうと、
インライン展開されてしまい、最適化されない
という直感的ではない結果になるので、確認しながらやりましょう。
- 16 :
- VCにプロファイラがあるなんて気づかなかった
というか2chで聞いたら無いっていわれてずっと信じてた
- 17 :
- VC7でなくなったんだっけか
- 18 :
- >>13
>使われないんだよね。
GUIに罠が仕掛けてあるからじゃまいか?
- 19 :
- SSE2が付いてるマシンではインラインアセンブラで書かれた処理を実行したいけど、
それ以外のマシンでは普通のC++で書かれた処理を実行したいと言うような場合、
どうすればいい?
- 20 :
- 開始時に判別して関数ポインタで入れ替え
- 21 :
- やっぱそれしかないか。
関数のインライン化されにくいなぁとか、
C++のメンバ関数だと面倒だなぁとか思ったんで。
- 22 :
- >>21
インスタンスをやたら作る必要が無いならファクトリーパターンで作り分けしてもらうという逃げ方もある。
- 23 :
- んなややこしいことしなくても、マクロ使って1つのソースから2つのオブジェクトを吐かせればいい。
関数ポインタだってコストかかるので、1つずつの関数を切り替えるのではなく、
2通りのプログラムを1つのプログラムに押し込むくらいの気持ちで、
もっとmain関数に近いところから切り替えてしまおう。
- 24 :
- インテルコンパイラってプリフェッチ命令を挿入するとか言ってるけど
プリフェッチって入れても効果ほとんど無いよね?
あとこれからPen3コアをベースにしたCPUになっていくからPen4用に
最適化はしないほうがいい?
- 25 :
- >>24
場合によるだろ。prefetch命令はL2へのロードのアルゴリズムを
変更するので、場合によってはメモリのレイテンシを劇的に減らす
事が出来る。というかintelのpdf嫁。
- 26 :
- prefetch命令を使って具体的に速度改善を説明する本とかないのかな。
サンプルコードとか載せてるのがあったら欲しい。
Webでも以外と情報無いし。
- 27 :
- STL like Template based coding with MMX/SSE extension
http://www.codeproject.com/useritems/STL_like_coding_with_MMX.asp
Intel IPP
Iten OpenCV
そのまま使えば高速じゃん
- 28 :
- >>27
なんだこれ。
マトリクスとかImageとか扱えるものなのか。
結構みんな使ってるんだろーか。
- 29 :
- クイックソート以外の例えばマージソートやバルブソートなどはどのようなときに使うのでしょうか?
- 30 :
- >>29
クイックソートは万能ではない。
特にソートする要素数が少ないときには他の方法が早い。
また、安定でないという欠点もある。(マージソートは安定)
- 31 :
- >>29じやないんだが
>また、安定でないという欠点もある。(マージソートは安定)
これどーゆー意味なんよ?
高速化のスレだから速度の事を言ってるのか?
- 32 :
- >>31
ソートで不安定といったら
比較関数の評価で重みが重複した場合に順序関係が保存されない
ことだと思うが…(;´Д`)
- 33 :
- >>31
>>31
>>31
- 34 :
- 出席番号順にソート済みの身体測定データを身長順にソートしたいとする。
ただし、同身長の人間がいる場合は出席番号の若い順に並んだままになっていて欲しい。
そういうときは「安定したソート」の出番よ。
クイックソートだと出席番号はバラバラになるからな。
まあ「安定した速度」って点でもマージソートはなかなかのもんだと思うけど
それにしても
- 35 :
- それは、キーの指定が悪い。
- 36 :
- >>31
基本情報の資格でも取ったほうがいいお
言葉が通じないと頭良くても吸収できないでしょ
- 37 :
- >>35
ソートで大小の評価を、
身長だけではなく、出席番号も加味してやればいい
と言いたいのだろう。
でもね、出席番号がついてなかったら、どーするの?
- 38 :
- 一般的にソート前のインデックス順序を比較で使えばいい
二次キーとして出席番号があるならそれを使えばいいし
- 39 :
- インデックスがついていなかったら?
- 40 :
- アドレスで比較すればいいだろ馬鹿か?
- 41 :
- アドレスで比較? なに馬鹿いってるの?
- 42 :
- IntelのライブラリはAMDでワザと遅くなるようにしてそうなんで
一般向けには使ってません
- 43 :
- 高速なメモリコピーするにはmemcpy?
それともキャシュ無視するためにSSEとか利用するのか?
- 44 :
- memcpyの実装はたくさんあるから一概には言えないぞ。
最もシンプルなのは1バイトずつコピーしているし、
コンパイラによってはインライン展開どころか組込み関数として処理しちゃうぞ。
- 45 :
- へぇー、組み込み関数(SSE?)で処理しちゃうのか。
ネットで調べてたらSSEのレジスタ4つにまず読んで、それを
また4つ書き出すとレイテンシとやらを隠蔽できるとかなんとか
あったけどそんな感じかな。
とりあえずmemcpy使っておきます。
- 46 :
- 組込み関数の意味がわかってない希ガス。
- 47 :
- 関係ないけど __divdi3 は組み込み関数なんだろうか。
- 48 :
- 直にCPUの命令またはその組み合わせに展開してしまえる関数だね。
組み込み関数の利用は#pragma intrinsic で明示できるよ。
逆に出来ない場合は組み込み関数として用意されてないといえる。」
ぶっちゃけIntel C++のオートベクトライズなんてあんま役に立たない。
処理を並列化できるところは明示的にMMX/SSEの組み込み関数
使って最適化したほうがいい。
CPUの動きを知り尽くしてレジスタカラーリングしてくれるから
へたなアセンブリコード書くより速い。
あとIntel C++なんかは、インライン関数を基本的に展開しない。
STL使ったら重いってことは結構ある。
ただし __forceinliceは受け付ける。
VC2005はcpuidとかローテート命令まで組み込み関数として使える
ようになったから、アセンブラ嫌いにはかなりフレンドリーになった希ガス。
- 49 :
- ローテートはVC6の頃から組み込み関数であった希ガス。
- 50 :
- 2005は8bit版や16bit版も用意されてる
http://msdn2.microsoft.com/library/hd9bdb82(en-US,VS.80).aspx
- 51 :
- U
\ |
\ 人 /
メ´ ヾ _,−'
−―< , -、 て_
C++とSSE! ) / / (´
/ / ⌒ 、
(⌒V ,'´`ヽ
ト、 ,ヘ ヽ ! :〉
ト、ヽ / /! / 、゙ーァ'
|,ノ ´ ̄` ヾ! / /`~´
,' > < ゙, / /
l 、ー―:ァ i/ /
゙、 Y⌒/ ,/ /
`''ァ‐`ー' /
/ i /
- 52 :
- だんごって何の仕事してんの?
- 53 :
- .NEETでFA
- 54 :
- 倍精度実数、うらやましいなー
- 55 :
- constで最適化が促進させられる理由ってなんでそ?
- 56 :
- 書き込むスレ間違えました。失礼しました。
- 57 :
- [1] 授業単元: 数値計算法
[2] 問題文(含コード&リンク): @f (x) = cos (x) - x2 = 0 の根のうち、0 < x < 1 を満たすものを2分法で求める
初期値 a, b が入力でき、 6桁推定された解と関数 f (x) を呼びだした回数を出力するようにしなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: (2006年06月08日まで
よろしくお願いします
- 58 :
- やべっ 二分法って何だっけ
忘れちゃったよ
- 59 :
- >>58
カップラーメンを従来の1.5倍の速度で完成させる最適化技法
- 60 :
- 調理時間の短いラーメンほど短時間で伸びる
- 61 :
- グルテンを加えるといい
- 62 :
- 麩になっちまう
- 63 :
- 即値で掛け算する場所を書き直してみたら?
- 64 :
- PenMのSSE2って遅くね?
- 65 :
- デコーダがネック。複合デコーダパスだからね。
汎用&MMレジスタベース命令と交互に配置するとデコーダネックを隠蔽できる。
Yonahでは解消されてる。てかめちゃくちゃスループットいい
- 66 :
- じゃあPenMだったら無条件でSSE2不使用、ってコーディングはもうしちゃ駄目だね。
- 67 :
- そもそもYonahな時点でPenMじゃないし。
つかPenMって3年前から更新されてない一昔前のチップだろ。
- 68 :
- ド忘れされてるDothanとi915萌え
YonahもBanias、Dothanと同様Pentium-Mですよ。
ただ発表後にPentiumブランド消失と絡んでIntel Coreとも名付けられちゃったが。
ブランド展開がまだよく分からんのでこの先どうなるか知らんが
- 69 :
- 面白い話題なんでもっと調べたいんですが、
いい本ないでしょうか?
やっぱりパターソン&ヘネシーですか?
- 70 :
- メーカのドキュメント
- 71 :
- SSEはコンパイラが自動的に使ってくれるのですか?
- 72 :
- コンパイラによる。VCだとスカラ演算のみ。
自動ベクトル化が可能なコンパイラはgcc4.0系とかiccとかPGIとか。
- 73 :
- SSEで最適化してもメモリアクセスのほうがボトルネックになんね?
キャッシュとかよく分かんねけどメモリよりキャッシュを意識せな
いかんのだろうけど。
- 74 :
- 処理の内容によるんじゃない?
動画の画像処理みたいにプリフェッチの予測が当たりやすい処理だと
メモリ帯域の方がボトルネックになってる感じはしない。
他の分野についてはわかりません。
- 75 :
- >>73
同じデータを色々な組み合わせで何度も使う場合
キャッシュをうまく効かせるのが腕の見せ所。
- 76 :
- 誰かSSEのプリフェッチをどう使えばいいのかまとめてくれ。
- 77 :
- めちゃくちゃ大雑把に話せば、
メモリを使う100クロック前くらいで
64byteごとに1回プリフェッチ命令を置く。
どの命令がいいかは、全部試して速いのを採用。
詳しくは、たくさんコードを書いてから
キャッシュについて勉強してくれ。
俺も勉強せねば・・・。
- 78 :
- GPUと組み合わせ使うて場合って
GPUができる計算はみんななげちゃうって方針でいいの?
低次元行列計算はDirextXでできるみたいだから、
DirextXになげちゃおかと思ってるのだけど
- 79 :
- >>78
DirectXは誰が動かしていると思っているの?
ユーザプロセスは?
OSカーネルは?
- 80 :
- インテルのペンティアムプロセッサのマシン語で
高速化を勉強できる良い入門書みたいなのあったら教えてください
ホント、よろしくお願いします。
このとおり!m(_ _;)m m(-.-;)m m(_ _;)m
- 81 :
- >>4
- 82 :
- そうおっしゃらず。。
なにとぞ、お願いします〜m(_ _;;)m
- 83 :
- >>83
いやマジで、下手な本買うよりiccのアセンブラ出力眺めた方がよっぽど勉強になるって。
- 84 :
- なるほど、そういう意味でしたか。
- 85 :
- >>80
MMXテクノロジ最適化テクニック(ISBN4-7561-0797-4)の5章
- 86 :
- >>85さん、ありがとうございます。
早速書店で探してみます。m(_ _)mペコリ
- 87 :
- SSEでどこか参考になるサイトはありませんか?
- 88 :
- つ[google]
- 89 :
- 最近のコンパイラはSSEなどは指定しなくても自動的に使ってくれるのでしょうか?
- 90 :
- ではまず最近のコンパイラの定義から(ry
- 91 :
- >>89
そういうコンパイラもあります。
- 92 :
- インテルコンパイラです
- 93 :
- 自動的に使うようになってると、SSEがないCPUでは動作しないのでは。
- 94 :
- O3を指定した場合、自動的に検出され使われる
- 95 :
- _ ∩
( ゚∀゚)彡 オッサン!オッサン!
⊂彡
- 96 :
- ここってこんなに人居たんだ
- 97 :
- >>95
オマイの駄洒落のほうが・・
- 98 :
- /Qx*とか/Qax*なしで使うことってあったっけ?
とりあえずboost:mt19937はICCのオートベクトライズでやたら速くなるが
- 99 :
- Auto-vectorization in GCC
ttp://gcc.gnu.org/projects/tree-ssa/vectorization.html
- 100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
インテルC++コンパイラ9.0発表! (586)
【SICP】計算機プログラムの構造と解釈 Part3 (545)
JAVAってこんなことも出来ないの? (475)
VB.NETのとんでもない欠陥に気づいた (298)
C言語なら俺に聞け(入門編)Part 112 (499)
メガデモを語る fr-08 (696)
--log9.info------------------
【特上カバチ!!】作 田島・絵 東風【激昂がんぼ】25 (517)
萩原一至 BASTARD!!-暗黒の破壊神-Part113 (387)
【ナポレオン】長谷川哲也 37【年末年始、初春】 (494)
【オセロ中島復帰】闇金ウシジマくん Part107【洗脳くん編】 (600)
【ジョジョリオン】ジョジョの奇妙な冒険 Part53(582)★【荒木飛呂彦】 (749)
井上雄彦 『リアル』 part12 (798)
【ラズウェル細木】酒のほそ道■23【総合】 (235)
【柳原望】高杉さん家のおべんとう 12食目【フラッパー】 (719)
【コピー機】憑鬼の剣 井上紀良総合64【大・復・活!!】 (963)
【弓月光】甘い生活2ndS.★新社屋はどんなだ?!★替え下着21枚目 (214)
近代麻雀総合スレッド ★4巡目 (379)
静かなるドン 22代目 (226)
ビッグコミックオリジナル32 (546)
【吉瀬狂助・霧科拓徒】ギャングスターアイランド 3柄ぁ目 (572)
【もやしもん】石川雅之総合スレ94【純潔のマリア】 (339)
★ヤングジャンプ総合スレッド Part145★ (748)
--log55.com------------------
【乃木坂46】生田絵梨花応援スレ☆163【いくちゃん】
【悲報】待ちに待った松村沙友理のもぐもぐSHOWROOM、つまらなすぎる・・・ Part.2
【乃木坂46】佐々木琴子応援スレ☆70【KTK】
【乃木坂46】山下美月応援スレ☆28【みづき】
乃木坂ビッグ5は飛鳥西野白石与田山下で確定したな
【乃木坂46】梅澤美波応援スレ☆10【みなみん】
乃木坂46モバメスレ★53
【乃木坂の粗大ゴミ】なぜ乃木坂2期生は大失敗したのだろうか?wwwwww
-