X



【C++】高速化手法【SSE】2 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0459デフォルトの名無しさん
垢版 |
2020/09/07(月) 18:25:16.84ID:b75Xf7nO
SIMDなんて-O3付けとけば自動で行われるじゃん。
それ以上は考えるだけ無駄でしょ。
0460デフォルトの名無しさん
垢版 |
2020/09/13(日) 20:11:59.25ID:zYAXQUsK
>>435、ディレクティブ(#pragma omp〜)、コンパイラバージョン、環境変数OMP_NUM_THREADS、実行環境のCore/Threadsはどんなの?
0461デフォルトの名無しさん
垢版 |
2020/09/14(月) 01:56:59.78ID:5Y5z53c+
>>460
g++ (GCC) 10.2.0
OpenMP_CXX: -fopenmp (found version "4.5")
物理コア数2, 論理コア数4

コードは大体こんなイメージ↓

--- RayTracer.hpp
static int y = 0;
#pragma omp parallel_for num_threads(3)
for (int x = 0; x < W; ++x) {
render(result, x, y); // 重い処理(毎行0.8秒程度かかる)
}
++y;

--- Window.hpp(SDL2のメインループ)
while (!stop) {
raytracer->render(result);
applyResult(result);
}
0462デフォルトの名無しさん
垢版 |
2020/09/14(月) 02:02:22.29ID:5Y5z53c+
parallel_for: 誤
parallel for: 正
0463デフォルトの名無しさん
垢版 |
2020/09/14(月) 02:42:30.59ID:5Y5z53c+
スレッド数も1〜4でいろいろ変えてみたら
1スレッド:一番早い
2スレッド:最悪
3スレッド:2スレよりマシ
4スレッド:3スレよりマシだけど1スレより遅い。CPU使用率100%に張り付く。
みたいな感じだった
0465デフォルトの名無しさん
垢版 |
2020/09/14(月) 07:57:55.59ID:Psg3/81m
もしスレッドプールが使われていないんだったら外側のyループで並列化するのがいいんだろうな。
0466デフォルトの名無しさん
垢版 |
2020/09/14(月) 11:24:08.29ID:5Y5z53c+
L1キャッシュヒット率が低すぎかな?
[1 thread]
233,710,687 cache-references:u (57.13%)
170,103,633 cache-misses:u # 72.784 % of all cache refs (57.15%)
107,023,099,494 L1-dcache-loads:u (57.12%)
172,491,811 L1-dcache-load-misses:u # 0.16% of all L1-dcache hits (57.14%)
29,286,128,938 L1-dcache-stores:u (57.11%)
<not supported> L1-dcache-store-misses:u
107,114,953,718 dTLB-loads:u (57.21%)
1,665,512 dTLB-load-misses:u # 0.00% of all dTLB cache hits (57.14%)

71.532926647 seconds time elapsed
68.955555000 seconds user
0.410194000 seconds sys

[3 thread]
2,821,811,091 cache-references:u (57.15%)
158,279,338 cache-misses:u # 5.609 % of all cache refs (57.13%)
107,538,202,753 L1-dcache-loads:u (57.13%)
1,355,563,439 L1-dcache-load-misses:u # 1.26% of all L1-dcache hits (57.16%)
29,423,932,980 L1-dcache-stores:u (57.15%)
<not supported> L1-dcache-store-misses:u
107,129,155,399 dTLB-loads:u (57.15%)
2,350,280 dTLB-load-misses:u # 0.00% of all dTLB cache hits (57.12%)

151.557505458 seconds time elapsed
253.433918000 seconds user
119.253409000 seconds sys
0467デフォルトの名無しさん
垢版 |
2020/09/14(月) 12:11:30.32ID:tgbt1xqp
実行時のコアの負荷どうなってるのかと
コンパイルオプションでopenmp有効にしてるの?
してるんだったらループ内の排他制御周りで時間食ってんじゃないの
0468デフォルトの名無しさん
垢版 |
2020/09/14(月) 12:20:38.35ID:tgbt1xqp
あとマルチスレッドにしてる部分で大量のメモリ確保とかファイルの読み書きとかしてないよね?
0469デフォルトの名無しさん
垢版 |
2020/09/14(月) 12:23:55.08ID:5Y5z53c+
スレッド数に応じてCPU使用率は上がってる
排他制御は不要だからしてない
0470デフォルトの名無しさん
垢版 |
2020/09/14(月) 12:32:30.05ID:5Y5z53c+
マルチスレッドにしてる部分は純粋な計算のみで結果を配列に書き込んでるだけ
0471デフォルトの名無しさん
垢版 |
2020/09/14(月) 12:44:52.40ID:tgbt1xqp
あとはxじゃなくてyのループをpararellにするぐらいしかないんじゃね
スレッド呼び出しの回数多くなってるでしょそれ
1行0.8秒もかかるならスレッドのコストあんま関係ないような気もするけど
俺に思いつくのはApplyresultがなにかしてんのかなってぐらい
0473デフォルトの名無しさん
垢版 |
2020/09/14(月) 12:55:20.98ID:5Y5z53c+
もともと外側ループに#pragma ompつけてたけどそれも遅かった(1スレッドに比べて)
Applyresultは画面に結果を表示させる(バッファ入れ替え)だけで
処理時間は0.01秒もかからない
0474デフォルトの名無しさん
垢版 |
2020/09/14(月) 13:00:39.33ID:tgbt1xqp
画面表示は別スレッドにすべきだと思うが
バッファ入れ替えのみで別スレッドで描画させてるなら多分問題ないけど
あとは暗黙のコピーでもどっか発生してるのかね
vsのopen mpだとデフォでスレッドプールしてるっぽいけどgccどうなんだろ
0475デフォルトの名無しさん
垢版 |
2020/09/14(月) 13:04:20.42ID:5Y5z53c+
あーコピーは有り得そうだなぁ
0476デフォルトの名無しさん
垢版 |
2020/09/14(月) 13:41:47.43ID:5Y5z53c+
ラムダ式にthisをキャプチャしても単なるポインタのコピーだけだよね
うーんもうあきらめようかな
0478デフォルトの名無しさん
垢版 |
2020/09/14(月) 14:31:35.53ID:lDodbDrd
> 1スレッド:一番早い
> 2スレッド:最悪
> 3スレッド:2スレよりマシ
> 4スレッド:3スレよりマシだけど1スレより遅い。CPU使用率100%に張り付く。

これで結論は出てる。同期コストを見積もれない馬鹿は並列化すんなってこと。
0479デフォルトの名無しさん
垢版 |
2020/09/14(月) 14:31:55.00ID:5Y5z53c+
スレッドで動かすタスクの単位がデカすぎてキャッシュに乗りきらなかった可能性ですかね
ありえそう
0480デフォルトの名無しさん
垢版 |
2020/09/14(月) 14:50:37.02ID:5Y5z53c+
同期コストに目をつけるのが的外れってことはわかる
0481デフォルトの名無しさん
垢版 |
2020/09/14(月) 15:07:54.11ID:lDodbDrd
まだその小学生の理科の実験みたいな分析を続けるのはいかがなものか。ここはム板である。
答えはコードに書いてある。夏休みの宿題じゃないから答えを見ていい。
結果とコードがあるから後はそれを理解する脳みそが足りてるかどうかだけ。

>>480
結論は出たな。キミにはこのスレはまだ早い。並列化=同期。基礎知識が全く足りてない。
コードを見てコストが読めない人が一体なにを最適化するのだ。
キミのやってることはPCパーツをとっかえひっかえしてベンチ走らす自作マニアと同じだ。
0482デフォルトの名無しさん
垢版 |
2020/09/14(月) 15:24:00.24ID:5Y5z53c+
よくしゃべる無能だな
0484デフォルトの名無しさん
垢版 |
2020/09/14(月) 15:32:26.78ID:5Y5z53c+
同期コストもなにも共有するリソースないし
お前みたいな雑魚に話しかけてねえよ
0485デフォルトの名無しさん
垢版 |
2020/09/14(月) 15:39:22.64ID:5Y5z53c+
メモリは余裕ありますね
>>477
に載ってる内容で今週末くらいに確認してみます
0486デフォルトの名無しさん
垢版 |
2020/09/14(月) 20:40:46.18ID:WpcYzJ76
>>466、prefのここ、一桁も違う、2C/4Tってキャッシュサイズどれくらい?orCPUの型番なに?

1T:  233,710,687 cache-references:u (57.13%)
3T: 2,821,811,091 cache-references:u (57.15%)

1T:  172,491,811 L1-dcache-load-misses:u # 0.16% of all L1-dcache hits (57.14%)
3T: 1,355,563,439 L1-dcache-load-misses:u # 1.26% of all L1-dcache hits (57.16%)
0489デフォルトの名無しさん
垢版 |
2020/09/15(火) 07:39:41.08ID:AdrM302u
ここは昔から機械語レベルの最適化スレなんだが、
そういう丸投げ系の上流の話はスレ分けたほうがよくないか。バイナリは見る気ないんだろ?
0491デフォルトの名無しさん
垢版 |
2020/09/18(金) 14:56:14.26ID:O98b4bbM
       ,、‐ " ̄:::゙:丶、
    ,r::::l3゙::::::::/ハヽ:ヽ::::、:ヽ
    {::://:::::::// ヽ\ト、:::::::!
    ヾ l:::::::/ 丶   `ヾ ィ、:::|
     |;:r::|  O`  'O ゙ハ|   < ここ初心者がくるところじゃないから
      ヽハ :.:.    :.: レ
        ´\ r‐--‐、,ノ
 r、     r、/ヾ ̄下ヘ
 ヽヾ 三 |:l1、_ヽ/__ .ィヽ
  \>ヽ/ |` }    n_n| |
   ヘ lノ `'ソ     l゚ω゚| |
    /´  /      ̄|. |
0493デフォルトの名無しさん
垢版 |
2020/10/02(金) 14:52:54.88ID:R9hS5H3t
>>492
そう思うなら思い当たる原因とか教えてあげたら?
一言言うだけだよ
0494デフォルトの名無しさん
垢版 |
2020/10/02(金) 15:13:27.56ID:R9hS5H3t
それすらできないと本当に馬鹿なのがどっちか疑われても仕方ない
0500デフォルトの名無しさん
垢版 |
2020/10/02(金) 18:21:05.73ID:OFlYu8W1
>>493
何の切り分けもしてない頓珍漢な結果ではなく全コード出しなよ。ここム板だよ?
アセンブラわかりませんとか、自分で書いたC++コードがどういうバイナリ吐くか想像もできないとか、
最適化、高速化スレでは話にならないんだけど初心者プログラマ君。
0502デフォルトの名無しさん
垢版 |
2020/10/03(土) 09:40:53.11ID:F7oAx4CC
餓鬼に餌を与えないでください
0503デフォルトの名無しさん
垢版 |
2020/10/09(金) 19:32:19.84ID:6ayaX4HS
>>488
コア内のキャッシュがコンフリクトしまくっていると予想
ハイパースレッディングをoffにして2スレッドにしたらいいと予想
0504デフォルトの名無しさん
垢版 |
2020/10/09(金) 19:56:21.81ID:zHpvTSgq
HTが何か分かってないレベルでマルチスレッドにしたら遅くなったとか入門者スレでやれよ。
0507デフォルトの名無しさん
垢版 |
2022/04/21(木) 11:21:49.16ID:uYH/mfeQ
基本無料やぞ
というかvtune使わずに最適化なんぞ出来る訳が無い
■ このスレッドは過去ログ倉庫に格納されています

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