【C++】高速化手法【SSE】2 [転載禁止]©2ch.net

1デフォルトの名無しさん2015/05/21(木) 01:53:58.15ID:ZhKmhhGS
C++やインラインアセンブラ、SSEなどによる高速化の手法
について語りましょう。

前スレ
【C++】高速化手法【SSE】
http://peace.2ch.net/test/read.cgi/tech/1130349336/

205デフォルトの名無しさん2015/12/02(水) 23:16:28.02ID:rypJABRF
>>203
命令レベルの並列化にしろマルチプロセッサでの並列化にしろ
クリティカルパスじゃない部分を見つけて並列化してるという点では一緒で
並列化のアプローチの仕方が違ってるだけなのは理解してるんでしょ?
命令レベルの並列化であるOoOの方が直接的にクリティカルパスの影響を受けて
並列化が並列化が制限されるようになったからハイパースレッディングが投入されたのに
メイニーコアでクリティカルパスが問題になるって言い方は引っかかるんだよ

206デフォルトの名無しさん2015/12/03(木) 05:09:10.56ID:Yx1WEMuy
【 オンラインTCGエディター 】 >>1

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーロー、シャーマン・キングなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。

エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。

遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。

各社TCGを再現するテストプレイ ⇒ 更に改良や修正。

機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。

下位版の改造および商用利用には、別途で当社との契約が必要。

さ〜て、製作ベンダー見つけよっと!ww(クス
http://wc2014.2ch.net/test/read.cgi/entrance2/1449039272/-18

207,,・´∀`・,,)っ-○○○2015/12/03(木) 19:46:04.23ID:uwlB9z0+
メイニーってどこの田舎訛りだよ

208,,・´∀`・,,)っ-○○○2015/12/03(木) 19:53:16.18ID:uwlB9z0+
さすがに[?]をエイと発音するのは苦しいぞ
実はmainie coreという架空世界のCPUの話をしているという可能性もあるけどな

学の無い語るに値しない人間なんだろう

209デフォルトの名無しさん2015/12/04(金) 00:10:19.06ID:/PT96VDb
>>207
そうそう、気になって仕方なかったんだよ。

210デフォルトの名無しさん2015/12/04(金) 00:26:47.97ID:lgJQm9VI
世界で唯一の稀有な存在かもしれねえぜ…

211デフォルトの名無しさん2015/12/04(金) 00:59:55.26ID:vTE6A8P6
煽りじゃなくてぐうの音もでないような真実を突きつけてこそじゃねえかな

212デフォルトの名無しさん2015/12/04(金) 09:21:04.02ID:2jROh0Ef
メイニーコアってなんぞw

213デフォルトの名無しさん2015/12/04(金) 09:31:38.80ID:4C4dhHoE
逝ってるさん マンセー

214デフォルトの名無しさん2015/12/04(金) 10:37:56.49ID:yGPPr8Zs
母国語英語、第二母国語C++と日本語な俺からするとMulti-をマルチって言うのも違和感あるけどな

215デフォルトの名無しさん2015/12/04(金) 18:14:24.01ID:3WaVS3Ju
やっぱりこの板の住民は英語でレスする方が楽な感じですか?
苦手過ぎる…

216デフォルトの名無しさん2015/12/04(金) 19:14:07.09ID:yphLFvrP
どこに英語のレスがあるんだ

217デフォルトの名無しさん2015/12/04(金) 22:00:51.54ID:Wf0OQ3ZI
だからメイニーコアってなんだよw

218デフォルトの名無しさん2015/12/04(金) 22:03:30.55ID:YEfoDPnk
メニイコアならよかったのにな

219デフォルトの名無しさん2016/05/01(日) 15:00:17.83ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません

220デフォルトの名無しさん2016/09/28(水) 13:29:19.39ID:8+L+QwLt
書いて

221デフォルトの名無しさん2016/11/10(木) 01:32:20.10ID:OAKAAmWh
書いて

222デフォルトの名無しさん2017/01/21(土) 13:23:31.22ID:dThE4/1u
なんかない?

223デフォルトの名無しさん2017/05/07(日) 23:05:11.98ID:8v4hzv7f
1次キャッシュに収まるスレッドを沢山作りたいとき、SSEやらAVX
のレジスタをメモリ代わりに使うのとメモリ直でアクセスするのとどっちが
キャッシュ乱さずに動くかな。
3次キャッシュは使いたくないし、2次キャッシュもスレッド切り替えだけに
消費させたいし。

224デフォルトの名無しさん2017/05/08(月) 00:55:10.37ID:BlZJ1Ed5
>>223
理論的にはレジスタを使うほうが乱さないだろうけど、
コンパイラやプロセッサがどうするかは動かしてみないと分からないだろうね。

225デフォルトの名無しさん2017/08/09(水) 20:46:58.02ID:+5xcelsT
レジスタに収まるならレジスタの方が良いに決まってる

226デフォルトの名無しさん2017/08/09(水) 20:56:25.64ID:+5xcelsT
1次キャッシュに収まるなら他のキャッシュなんて気にする必要は無いと思うんだが
普通のOSで普通のコードを動かすなら、スレッド切り替えによるオーバーヘッドなんて無視できるレベルだし

そんなことを心配するよりも、肝心なコードを気にしようよ
いろんなテクニックを知ってるからコードをアップしてくれれば、小さいループならお役にたてるかも知れない

227デフォルトの名無しさん2017/08/09(水) 20:57:28.26ID:+5xcelsT
ロングパスだったorz

228デフォルトの名無しさん2017/08/16(水) 16:38:15.04ID:caDabzDZ
最近ニコニコ動画に上がってる経済シミュ、生態シミュ動画の人の高速化手法がすごい

229デフォルトの名無しさん2017/08/17(木) 03:34:48.76ID:6E9r52D/
どんな高速化手法なんだい?

230デフォルトの名無しさん2017/09/13(水) 01:32:53.89ID:8Q2gNSiE
std::copyってsimd化などの最適化って既にされてるのかな?
sse_copy()とか自作したとして
効果は期待出来る?

231デフォルトの名無しさん2017/09/13(水) 02:02:50.51ID:S8v0D06m
sse_copyとやらはmemcpy、memmoveと何が違うの?

232デフォルトの名無しさん2017/09/13(水) 02:20:34.07ID:TvE1YB9H
名前的に、SSEの128bitレジスタを使ってのコピーだろう

memcpyとmemmoveの違いはぐぐればすぐわかる

233デフォルトの名無しさん2017/09/13(水) 02:25:23.48ID:S8v0D06m
じゃなくて、自作しようとしているSSEでコピーするであろう「sse_copy」と
標準で用意されている「memcpy、memmove」←両方合わせて、とで
何が違うの?という話
当たり前だがmemcpyはCPUがSIMDに対応していれば使うし
カリカリにチューニングしてあるわけだが
sse_copyなど要るの?

234デフォルトの名無しさん2017/09/13(水) 02:48:41.88ID:8Q2gNSiE
memcpyはC言語の関数だったか
存在を忘れてた
こいつは最適化入ってるのね
これ使えば良さそうだ
そうする、どうもです

235デフォルトの名無しさん2017/09/13(水) 05:53:18.22ID:akrdcF0B
条件にもよるがmemcpyあたりはコンパイラ自身がインライン展開したりする

236デフォルトの名無しさん2017/09/13(水) 11:25:41.68ID:RHwHks/k
std::copy使っておけばPODならmemcpyかmemmove使うんじゃないの
VS2017のやつはmemmove使ってるな

237デフォルトの名無しさん2017/09/13(水) 15:04:16.35ID:xDYBj2Vm
copyrect

238デフォルトの名無しさん2017/09/13(水) 18:53:59.90ID:GrxKOJ+a
謎の速度低下で悩んでいたが、キャッシュレイアウトって重要だな。
AVX512で一部分だけ値更新したい時、16バイト読み込んでその位置に64バイト書き戻すようなケース。
そのまま16バイト読み込みで実装すると、読み込み時に16バイト分しかキャッシュがないので、書き込む時に64バイトに拡張というか再配置されて遅くなる。
最初から64バイトで読み出すと、サイズが変化しないので遅くならない。
ついつい、読み出し量が少ない方が速いに違いないと思い込んでしまう罠。

239デフォルトの名無しさん2017/09/13(水) 20:49:54.25ID:zEWQVEHs
パーシャルライトって奴だな
キャッシュにも有効なのか

昔のPenProの頃の8/16bitレジスタへの書き込み後の32bit読み出しとか
HDDが2T超える頃の4Kセクタのパーティションでの位置ずれとか
信じられないほど遅くなる要因になるもんな

240デフォルトの名無しさん2017/09/13(水) 21:31:13.89ID:y458W+jL
え、memcpy()とかstd::copy()ってSIMD使うん??
vectorのコピー遅いから困ってて、カリカリとSIMDで書こうかと思ってたんやけど、手間省けるわ。

241デフォルトの名無しさん2017/09/13(水) 21:45:57.88ID:FrHUdEqr
コピーが遅いから困っててと言うけれど
どうやって遅いと結論づけたのですか?
本来なら16ms完了するはずなのに29msもかかってしまっている!
とかわかるんですか?

242デフォルトの名無しさん2017/09/13(水) 21:55:49.49ID:y458W+jL
ああ、いえいえ、言い方が悪かったですが、
処理時間に占めるコピーの割合が増えてきたので、高速化したいなぁ、と思っただけです。

243デフォルトの名無しさん2017/09/14(木) 20:07:50.27ID:l0W4QyGB
rep movsbが糞速い
https://srad.jp/~miyuri/journal/569822/
>>REP MOVSはマイクロコードで実装されていて、最初にコピーサイズを見て適するコピーアルゴリズムを決めるセットアップ処理を行なってから
>>実際のコピー処理を始めるようになっている。そのため小さいサイズのコピーではセットアップ時間のオーバーヘッドが無視できないが
>>コピーサイズ(適度に大きいサイズ)とアラインメントの要件とプロセッサの世代の条件を満たすとそこそこの性能が出る。

>>プロセッサの世代によって展開されるマイクロプログラムが変わり最適化の度合いも変わってくると。
>>第1世代Core i以降のプロセッサのREP MOVSのマイクロコードは比較的速い。
デコード済みの命令をキャッシュ出来るようになったから、マイクロコード展開命令でも最適化が行われるようになってるみたいだよ。

244デフォルトの名無しさん2017/09/14(木) 21:12:13.74ID:AvPBQe63
メモリのレイテンシ、スループットやキャッシュサイズに依存するんだから
ブロック転送命令の最適化は無駄な努力だとインテルは思ってんだろう。

245デフォルトの名無しさん2017/09/14(木) 21:41:42.21ID:vjSz//mI
Visual Studio 2017 で
memcpyを調べてみた

x86は rep movs
x64は vmovups 128bit 2パラ16アンロール

オプションでAVX2命令を使うようにしてもかわらず

vmovaps 256bit/512bitの方が速いから
頻繁に使うなら自作した方が良い

246デフォルトの名無しさん2017/09/14(木) 23:27:05.22ID:l0W4QyGB
>>238
キャッシュ可な領域はキャッシュライン単位でDRAMの読み書きが行われるはずだから
キャッシュは関係ないでしょ。

247デフォルトの名無しさん2017/09/15(金) 00:42:48.43ID:SH+3EPbt
>>246
アライメントのほうだったかも。
境界跨いで更新する時、あらかじめ更新サイズで読み出しておけば、全領域使用可能状態になるが、読み出し半分だと残り分キャッシュ要求発生して遅くなると。

248デフォルトの名無しさん2017/09/16(土) 02:31:32.38ID:Y9EbWhOv
>>247
一定のストライドで読み込んでいれば自動プリフェッチで早めにキャッシュに取り込まれる可能性もあるけど、
DRAMの帯域を圧迫しないようにページ境界をまたいでは機能しないようになってるはずだったので、
AVX512のベクタ長だと、何サイクルか先のループで使うデータをプリフェッチで要求した方がいいかも。

249デフォルトの名無しさん2017/09/16(土) 11:37:46.61ID:7TcGYGsR
>>248
ありがとう。すでに別件でPrefetchもやってみてるけど、AVX512だとかなり効果があった。

250デフォルトの名無しさん2017/09/16(土) 17:07:26.32ID:EqmVZpne
>>249
一時は自動プリフェッチの性能が向上してあまりprefetchの意味がない状態が続いていたけど、
AVX512ともなると1ページ分のデータをループ64回で消費しちゃうんだよな…
DRAMのCASレイテンシをCPUクロックで換算すると結構長いからね。

251デフォルトの名無しさん2017/09/17(日) 15:21:48.39ID:ZiTBR472
え?AVX512は手書きprefetchのほうが性能出る?
これまではハードウェアプリフェッチが超優秀で、手書きprefetchはむしろオーバーヘッドになって遅くなる感じだったんだけど。

252デフォルトの名無しさん2017/12/10(日) 20:33:52.61ID:M5Qtf5Qu
prefetchはハードウェアにまかせて手書きでclflush入れるのが一番いい感じなんだけど。こんなケースは少数派なのかな。

253デフォルトの名無しさん2018/02/01(木) 08:35:26.88ID:VuVCHSR9
xeonでavx命令使うと過熱防止のため1ms間、動作クロック下げるなんて聞いてないよ〜(>∀<)

254デフォルトの名無しさん2018/02/02(金) 00:44:37.85ID:cppyUN4V
>>253
本末転倒やなw

255デフォルトの名無しさん2018/02/16(金) 06:35:40.61ID:W1XJdyx1
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

新着レスの表示
レスを投稿する