X



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

■ このスレッドは過去ログ倉庫に格納されています
0294デフォルトの名無しさん
垢版 |
2019/11/12(火) 13:18:01.61ID:TlWEsNqa
>>292
アセンブラを使わなくても速度チューニングネタはたくさんあるが
当然最後の手段としてはアセンブラは有効

小さいループに処理が集中してるような処理は
特に効果的

下手くそがアセンブラに手を出すと逆に遅くなったりもするけど
0296デフォルトの名無しさん
垢版 |
2019/11/13(水) 00:56:22.92ID:AZXdI1I6
>>295
>>286
>コンパイラの最適化なんぞ知れてる
>その辺を最適化したければガシガシアセンブラだが
とか書いてたから
この人10年くらい時間が止まってるよね
64bitと32bitじゃレジスタの数も違うし、SIMDの新命令に対応させるたびに
レジスタ割り付けが全く変わってしまうこともあるのにアセンブラって…
AVXなら3オペランドも使えるから、コンパイラに任せてもコードの質は低下しにくくなってるはず
0297デフォルトの名無しさん
垢版 |
2019/11/13(水) 10:22:08.98ID:EqcpRCSG
費用対効果を考えればIntrinsicsでも良いけど

究極の最適化はアセンブラしか無い
IACAを使ったり実測したりしながらパズルする

処理が非常に単純で速度の求められる小規模DSPなんかでも
いまだにそういう開発をする
0300デフォルトの名無しさん
垢版 |
2019/11/13(水) 13:05:36.17ID:EqcpRCSG
SIMDを覚えたての初心者はこんなコードを書きやすい
典型的な糞コード

ループ {
sum = _mm_add_ps(sum, data[i]);
}

>>299
そうです
0302デフォルトの名無しさん
垢版 |
2019/11/13(水) 13:21:58.53ID:FP2h74Sh
GPUユニットはCPUに乗っけたのだから後はFPGAも乗っけるだけ。
アルテラは既に買収済みだしな。
0304デフォルトの名無しさん
垢版 |
2019/11/13(水) 16:48:11.25ID:FP2h74Sh
スパコン分野じゃ固定の計算式はFPGAが一番効率的。そういう意味で地球シミュレータや京はゴミ。
スパコンが必要な分野でCPUのような汎用性などいらない。
0305デフォルトの名無しさん
垢版 |
2019/11/13(水) 17:02:40.99ID:EqcpRCSG
今度はスパコンが出て来たか
関わったこともないだろうに

スーパーコンピューターこそ汎用性が必要
ベクトルコンピューターが消えたのも
より汎用性を重視するから

スーパーコンピューターの世界でFPGAが求められてるなら
当然スーパーFPGAが流行ってないと辻褄が合わないわけだけど
流行ってないね
0306デフォルトの名無しさん
垢版 |
2019/11/13(水) 17:18:55.90ID:FP2h74Sh
何を言ってるからよく分からないなぁ。
特定の式を大量に速く計算したいという要望に対してなんで汎用性が出てくるの?
汎用性スパコンが1億なら同じ性能で1000万で達成できるんだよ。
しかも汎用性のために可用性が落ちるとか話にならないよ。京見れば分かるでしょ。
0307デフォルトの名無しさん
垢版 |
2019/11/13(水) 17:37:57.46ID:OceCV+VL
自分専用ならTSSにする必要もないしな
0308デフォルトの名無しさん
垢版 |
2019/11/13(水) 18:11:35.42ID:nB9KorLn
FPGAとかスーパーコンピューターとか自分専用とか
具体的な処理を何も語ってないのによくもまあ勝手に前提を作るよなあ

ここはソフトの最適化のスレなんだけど
0310デフォルトの名無しさん
垢版 |
2019/11/13(水) 18:26:47.86ID:FP2h74Sh
FPGAだってプログラムでコーディングするんだが・・・。勝手な前提作ってるのはおまえじゃん。
というかSSEでの高速化がOKなら、GPGPU、FPGAもOKだろう。
0312デフォルトの名無しさん
垢版 |
2019/11/13(水) 19:23:44.45ID:FP2h74Sh
1年もレスが無かった過疎スレになんでこんな必死な自治厨がいるのだろうw
前スレも10年かけて1スレ消費したんだぞw

おまえは何者だw
0315デフォルトの名無しさん
垢版 |
2019/11/13(水) 19:51:20.51ID:AZXdI1I6
>>312
前に64bitで絶対アドレス使えって書いて突っ込み受けたらファビョってたのいたでしょ
あれと同一人物っぽいんだよなあ
>究極の最適化はアセンブラしか無い
とか書くところとか

午後のこ〜だの開発者たちが動画コーデックの開発しなかったのだって、
MMXは除外しても、SSE2、SSE3、SSSE3、SSE4、SSE4.1、AVX、AVX2、AVX512に加えて、
64bitでは一気に種類が2倍と、次々と登場する新命令ごとに最速のルーチン用意していく手間と、
コードが異なるために特定のCPUでしか発現しないバグがでるリスクが増すこと考えたら、
最速に拘るのが現実的ではなくなったんだよ
彼らとしては妥協したコード書く気はなかっただろうし、興味が失せるのも仕方ないのかもね

AVISynthもインラインアセンブラ使ったプラグインだらけで64bit化に対応できずに放置されてたのが
相当あったけど、自分も64bit化やった経験からも、今更初心者にアセンブラ使えなんて教えんなと言いたい
0316デフォルトの名無しさん
垢版 |
2019/11/13(水) 20:53:55.20ID:Fqkv69gY
初心者ならIntrinsicsなんか使わないで素直に汎用性のあるC++で書くかライブラリを使えばいいよ

ここは高速化手法スレだから高速なコードであることは重要
Intrinsicsよりアセンブラの方が高速に書けるのは自明なのでアセンブラの話題は当然出てくる
0318デフォルトの名無しさん
垢版 |
2019/11/13(水) 21:12:18.74ID:Fqkv69gY
Intrinsicsで32bit/64bitの共通化は出来ても
新命令がでたらどうせ作り直しだよ

新命令に最適化しないならそのままでいいよ
「新命令対応」て謳うのが目的じゃなければ

SSEからAVXの移植もレーン縛りで苦労しただろ?
単純に置き換えなんて出来ない
128bitのまま単に3オペとレジスタ数だけなら簡単だけど

AVX512も同じ
マスクレジスタや新命令を使うなら書き直し
0319デフォルトの名無しさん
垢版 |
2019/11/13(水) 21:13:39.13ID:Fqkv69gY
アセンブラ狂信者じゃない
Intrinsicsも使う

極限な最適化にはアセンブラが必要ってだけ
まあ当然だ
0320デフォルトの名無しさん
垢版 |
2019/11/13(水) 21:19:04.07ID:Fqkv69gY
どうせ今後は32bit向けの最適化なんかやらんだろ
だとすると手間の差はレジスタ管理くらい
0321デフォルトの名無しさん
垢版 |
2019/11/13(水) 21:42:54.67ID:AZXdI1I6
>>320
>だとすると手間の差はレジスタ管理くらい
こんなこと書くようだと大したコードは書けないな
レジスタ割り付けの妙味と面倒さを知らないのなら、別に組み込み関数で書いても構わないだろ
0322デフォルトの名無しさん
垢版 |
2019/11/13(水) 22:04:42.12ID:RzCRvdkP
>>321
レジスタ割り付けの妙味www
さほど時間をかけなくてもコンパイラよりマシなのは作れるよ
そもそもIntrinsicsの時点でもレジスタ数削減は考えるべきであって
何も考えなきゃIntrinsicsだろうがアセンブラだろうが遅い
0324デフォルトの名無しさん
垢版 |
2019/11/13(水) 22:09:21.49ID:RzCRvdkP
SIMDの一番簡単とも思えるこんなコードでも
最適化に関して語れることは山ほどある
0325デフォルトの名無しさん
垢版 |
2019/11/13(水) 22:22:02.11ID:AZXdI1I6
>>322
やっぱこいつ絶対アドレス君だw
妙味の部分に草生やすってことは大したコード書いてない証拠みたいなもんだよ
コンパイラより1%速くなっただけでもドヤ顔するタイプだろ
0326デフォルトの名無しさん
垢版 |
2019/11/13(水) 22:38:51.61ID:RzCRvdkP
絶対アドレス?

一番アクセスが速いのはスタック
ほぼ確実にL1キャッシュにある
一等地
0329デフォルトの名無しさん
垢版 |
2019/11/14(木) 12:00:59.24ID:Owl20mAs
300 みたいなことはこのスレの本来の住民なら誰でも知ってるから
いちいち講釈垂れるのはスレの無駄遣いだからやらないだけ

FPGA だって互換性気にしなければオリジナルの CPU の IP 書けば済む話で
少なくともこの板でやる話ではない
0332デフォルトの名無しさん
垢版 |
2019/11/14(木) 16:17:09.42ID:23v5U+5B
>>315
>MMXは除外しても、SSE2、SSE3、SSSE3、SSE4、SSE4.1、AVX、AVX2、AVX512に加えて、
>64bitでは一気に種類が2倍と、次々と登場する新命令ごとに最速のルーチン用意していく手間と、

知らなくてもいいことかもしれないけど、これはアセンブラ作者泣かせでもあったりする。
命令数が多すぎるので手作業での入力は例えテーブル方式を採用していても無理が有り、
インストラクションセットの表を自動的にテーブルに変換するようなプログラムをしなくては
ならなくなってきている。
0333デフォルトの名無しさん
垢版 |
2019/11/14(木) 18:28:43.14ID:wXs4N2j2
>>300は非常に良い教材だよ
これだけで語れることは山ほどある
「誰でも知ってる」なんて言う人は
ほとんど何も知らない初心者だけ

>>332
全てのCPUに対して最適化したコードを書く人なんていないだろ
せいぜい128bit, 256bit, 512bit の3バージョンくらい
32bit 512bit なんていらんだろうし
マーケティング上の理由で作らされてる人がいるのか?
それなら御愁傷様

本当に最適化するなら対応命令だけじゃダメ
IceLakeはAVX512が遅いし
AMDも昔はAVXがとても遅い
0335デフォルトの名無しさん
垢版 |
2019/11/14(木) 19:18:18.01ID:wXs4N2j2
前半からアセンブリ言語での記述の話だと思ってしまった

命令数めちゃくちゃ多いよね
多いだけじゃなくて複雑にもなってる
{k1} とか {z} とか

まあそれでも(高級言語の)コンパイラを作るよりははるかに楽だろうけど
0336デフォルトの名無しさん
垢版 |
2019/11/14(木) 20:19:51.75ID:86Xe+wXL
>>326
前にアセンブラスレでこんなこと書いてた変なのがいたんだよ
>実際には問題がある。なぜなら、そんなにアドレスが大きいと、さっきから話題の
>mov   al, my_mojiretu[rbx]
>という命令が使えなくなるからだ。
とか、
>RIP相対32bitdispだとアクセスできない場合が出てくる
>シンボルがRIP相対2GBに制限されるなどはあくまでCコンパイラの制限であって
>アセンブラはその制限を受けない

ちょっと考えれば64bitなのに2GB制限するオプションとか使ってDLLも作れなくなるような
記法が推奨されてるはずないよな
それで複数の人から突っ込まれたら、誤りを認めて引っ込めばいいものを、
ファビョって連投しまくるから、皆呆れて無視したってことがあったんだよ

挙句にこんなことまで言い出したり
>自分は 64BIT 用C/C++コンパイラをインストールして無いので、試せません。
>>326だってこいつの言ってることはおかしいと思うだろ?
0340デフォルトの名無しさん
垢版 |
2019/11/14(木) 23:52:36.80ID:uioYVx5f
>>339
MSの人より頭が言いなんて、当たり前じゃない。
日本人をなめてはいけない。
0341デフォルトの名無しさん
垢版 |
2019/11/14(木) 23:54:38.25ID:uioYVx5f
純粋に技術競争になったら、日本は絶対にアメリカに勝つ。
いつもそうだったし、IT分野でもそう。
問題はアメリカ人は自分が負けそうになると、圧力をかけて壊してくることだ。
0343デフォルトの名無しさん
垢版 |
2019/11/15(金) 06:20:01.64ID:/dDy1LQy
>>336
そこだけ抜き出しても何が言いたいのかわかりません

スレタイとは関係なく
ただ人をバカにするためだけの書き込みなら
感心しない
0344デフォルトの名無しさん
垢版 |
2019/11/15(金) 07:39:37.60ID:6uJ1WeVS
>>342
そうそう
40〜50行程度の32bitSSEの自慢のコード片を晒せば大体の実力は判るんじゃないかな

でもね、自分が本気で最適化する時は、IACAの分析結果じゃいい加減すぎて役に立たないから
人力で計算してたんだよね
社外に秘密にしたいパイプラインの実装の詳細を気前よくツールに実装するはずないよね
だから、IACAを使って最適化してるのを自慢してる辺り、あまり期待はしてないけどね
0346デフォルトの名無しさん
垢版 |
2019/11/15(金) 08:13:55.97ID:pd2oXw5y
IACAの使い方間違ってないか?
自力で計算するための情報を手っ取り早く得る為の物だぞ
0348デフォルトの名無しさん
垢版 |
2019/11/15(金) 08:41:09.49ID:pd2oXw5y
>>344
40〜50行程度になる題材があればコードを書くよ

今更32bit SSEってのも
時代についていってない感じでイマイチだけど
最適化はその時代のCPU向けでいいのかな?
0351デフォルトの名無しさん
垢版 |
2019/11/15(金) 08:47:47.96ID:/yBuhf/V
量子コンピューターに日本人の名前がクレジットされる可能性は高い。
一方、○○互換のソフトウェアはほぼ100%が中国発。
一見欧州製のように見えてもほぼほぼ中国。
人工知能に中国人の名前がクレジットされる可能性は相当高い。
0353デフォルトの名無しさん
垢版 |
2019/11/15(金) 08:51:56.44ID:/yBuhf/V
おそらく世界最初の人工知能は春麗とかいう名前になる。
0354デフォルトの名無しさん
垢版 |
2019/11/15(金) 08:52:04.36ID:LE7NfU10
>>352
日本の平均レベルが低いからといって、このスレに来ている人全員のレベルが
低いことにはならないということだよ。
0355デフォルトの名無しさん
垢版 |
2019/11/15(金) 08:53:57.40ID:pd2oXw5y
日本とアメリカの技術力の比較の話から
なんで個人の能力に話をすり替える?
0356デフォルトの名無しさん
垢版 |
2019/11/15(金) 08:55:36.81ID:LE7NfU10
>>355
日本では、かつては半導体業界に優秀な人が集まっていた。
その当時、日本を引っ張っていたのは平均レベルの人達ではなかったんだよ。
自分の周りの平均以下のプログラマを見て、それが日本を代表するプログラマの
レベルだと思ってもらっては困る。
0357デフォルトの名無しさん
垢版 |
2019/11/15(金) 08:56:48.41ID:pd2oXw5y
しかも
勝てる人もいる
って

アメリカのトップに勝つ人がいるって言うなら多少の意味はあるけど
0358デフォルトの名無しさん
垢版 |
2019/11/15(金) 08:57:04.71ID:LE7NfU10
様は、生まれつきのIQや理解力や記憶力の話だ。
努力とかじゃない。純粋のそういうものを比較すれば、日本のTOP層は
MSのTOP層と互角に戦える。
0361デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:00:00.74ID:pd2oXw5y
>>359
想像じゃなくて具体的に示してください

数学オリンピックって
俺も出たけどね

そんな高校生の遊びと技術力を同一視しないで
0362デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:11:49.17ID:LE7NfU10
>>361
あなたは数学ヲタクなだけでプログラミングが出来ないから
生意気なことを言ってるのか?
0364デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:13:29.93ID:LE7NfU10
本当に地数学オリンピックに出られるなら、プログラミングなんてアホみたいに
簡単なはずだ。嘘なんじゃないか。
0365デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:14:45.79ID:LE7NfU10
>>363
プログラミングは勝負の世界ではなく、お金の世界だ。
金儲けの手段。数学がそんなに出来りゃ学者にでもなればいい。
コンピュータ系の教授なら簡単になれるはずだ。
0366デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:17:17.89ID:LE7NfU10
勘違いしてる人がいるようだが、本当に数学オリンピックに出るような人は、
いろいろなことが出来て、プログラミングなんて簡単に出来てしまう。
実例で行けば語学も堪能で13ヶ国語がぺらぺら立ったりする人までいる。
実際、数学オリンピックに出られるような人は、自分でもそれが分かる。
何もかも簡単に理解できるのだ。
0367デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:19:48.94ID:pd2oXw5y
単なる局所的な最適化、高速化

コーディング

ソフト開発

は全然違うから

>>365
じゃあ収入で勝負するか?
0370デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:29:06.33ID:pd2oXw5y
数学の天才が本気で高速化したコード
興味があるなら素直にそういえば良いのに
0375デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:41:11.47ID:LE7NfU10
>>374
掲示板書き込みは、頭を使わないので簡単に出来るので全然違う。
他の人が思ってるように検索して調べることもしてない。
記憶に頼って書いてるだけなので簡単。一人には高度に見えるかも
しれないが、頭は停止状態で書いている。掲示板書き込みは頭の休憩。
プログラミングの勝負などは脳のフル活動が必要になるので
絶対にしたくない。特に天才の脳はフル活動すると疲れる。凡人とは違う
かも知れない。
0376デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:43:30.90ID:LE7NfU10
>>375
誤:記憶に頼って書いてるだけなので簡単。一人には高度に見えるかも
正:記憶に頼って書いてるだけなので簡単。一般人には高度に見えるかも

ちなみに誤字脱字が多いのも、頭を休めながらテキトーに書いているからだ。
長文だから必死に書いている事は無い。キーボードはスラスラ打てるから。
一般人には分からないだろう。
0377デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:44:13.05ID:pd2oXw5y
数オリに幻想を抱いてるようじゃ
能力も知れてる

でもびっくりするくらい数学を知らない人もいるよね
自信満々でアップした行列の掛け算のコード
実は行列の掛け算を知らなくて掛け算になってないとか
0378デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:48:27.12ID:LE7NfU10
>>377
数学オリンピックは、出るだけでも少なくとも東大や、東大の大学院に入るより
ずっと難しい。マイクロソフトに入社するよりも難しい。
ハーバードやMITよりもずっと難しい。
工学系の教授になるよりも難しい。
0381デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:52:16.79ID:LE7NfU10
>>380
本当にそんなに頭がいいなら、どっかの教授にでもなったらいいでしょう。
こんなところで人を馬鹿にしてはいけません。
0383デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:56:05.40ID:pd2oXw5y
まあなんでもいいや
話をスレタイに戻そうぜ

とりあえず天才の>>381
>>300のコードの問題点と修正コードをよろしくね
0384デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:56:57.67ID:LE7NfU10
>>382
俺は虚言ではない。
俺が嘘をついていると思ってるから、嘘で対抗しているの?
それは間違い。
0385デフォルトの名無しさん
垢版 |
2019/11/15(金) 09:58:10.18ID:LE7NfU10
>>383
SIMD命令には詳しく無いので、検索して調べないといけないのでやりません。
ここは頭を休める場所として使っているので、頭を使うことは出来ないのです。
0386デフォルトの名無しさん
垢版 |
2019/11/15(金) 10:00:55.84ID:LE7NfU10
実は、高IQ者が休憩時間に簡単なおしゃべりのつもりで言っていることが、
一般人には、高度すぎて勝負をしてきていると思ったりする可能性があります。
こういうことでギフテッドは一般の学校でトラブルになり易いのです。
本人は勝負のつもりではなく、とても簡単に言っているのです。一般人は、
勝負だと受け止めます。これが軋轢になるのです。
0387デフォルトの名無しさん
垢版 |
2019/11/15(金) 10:02:08.40ID:pd2oXw5y
じゃあ何に詳しいんだ?

別に頭を使うようなコードでもないけどねえ
単なる知識の問題
考慮すべき内容は大きく分けて5個
0390デフォルトの名無しさん
垢版 |
2019/11/15(金) 20:23:52.61ID:lI+7MgeJ
マウンティング合戦で過疎スレを伸ばさないでくれよ。
質問攻めして相手の揚げ足取りって馬鹿左翼みたいだし。

ループ {
sum = _mm_add_ps(sum, data[i]);
}

について語れるなら結論だけ書いてOKだよ。
0392デフォルトの名無しさん
垢版 |
2019/11/16(土) 11:20:10.45ID:lV5RucvD
・レイテンシとスループット
・メモリ帯域
・CPUと搭載命令
・演算の順番と精度
・処理の構成

SIMDの一番簡単とも思えるこのコードで
このくらい語れることはある
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況