C++相談室 part161

■ このスレッドは過去ログ倉庫に格納されています
2022/05/21(土) 21:23:29.59ID:kYXfaM+5
前スレ
C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
2022/06/11(土) 23:44:48.33ID:/CWj/UNa
粗悪なUPS使って電源破損した事あるから良い印象ないな
2022/06/12(日) 13:55:23.39ID:0uPAg53b
FFTで2^(2^34)-1を計算するやつの倍速化したやつをさらに倍速化したった……!

■ オリジナル
https://ideone.com/xSaa6x
2200秒

■ C++書き換え版
https://ideone.com/oDgjXr
2200秒

■ 倍速化
https://ideone.com/xHSzFD
962秒

■ ブロック6-step algorithm適用
https://ideone.com/rFCMy5
909秒 (倍速化版の94%) --- OpenMP無効、シングルスレッド
596秒 (倍速化版の62%) --- OpenMP有効、8スレッド
2022/06/12(日) 13:55:40.64ID:0uPAg53b
なんかもうCPUの帯域全部使い切ってやったぜ、みたいな
達成感みある、
ただし実行時間の2/3ぐらいはファイルの書き出しに使われている模様orz

OpenMP有効化の条件だと
2^(2^31)-1までは1分以内に出て、
以降はVS2019の分析ツールのCPU時間のグラフを眺める限り、
ファイル出力を覗く正味の計算時間は
2^(2^32)-1: 20秒
2^(2^33)-1: 不明(見てなかった)
2^(2^34)-1: 62秒
だったので、ファイル出力を除く正味の計算時間は多分3分ぐらい、
2022/06/12(日) 14:00:10.22ID:0uPAg53b
OpenMPは昨日始めたのでなんか間違ってるかもしれん……orz
行列の転置が8スレッド使って(2回目以降も)実行時間1/8にならない件について:

https://ideone.com/rFCMy5
のfftb6::transpose()のコードの書き方だと50%ぐらいにしか短縮されなんだ 。n_
2022/06/12(日) 14:02:02.73ID:0uPAg53b
つなみにVS2019でOpenMP有効にするには
「構成プロパティー」→「C/C++」→「言語」→「OpenMP のサポート」
で逝ける、
2022/06/12(日) 14:04:35.42ID:0uPAg53b
>>176
>何がこまめに書くのがファイナルアンサーだよ
NTFSの実装、、、

>突然の電源断で書き込み先のデバイスが壊れる可能性だってあるんだからな
しらそん
それはUPSを買う金もないのに停電とかを引き合いに出してきた香具師に言ってやってくだち
2022/06/12(日) 14:10:01.25ID:6VBjP0iK
8スレッドで4倍くらいになってほしいね
2022/06/13(月) 00:27:41.34ID:HWF8Czmy
もちついて考えたら
#pragma omp parallel for firstprivate(i, n1, n2, nb, JJ)
 for (pow_t j = JJ; j < JJ + nb; j++) {
  const pow_t src_idx = n2 * i + j;
  const pow_t dst_idx = n1 * j + i;
  dst[2 * dst_idx] = src[2 * src_idx];     // 実部
  dst[2 * dst_idx + 1] = src[2 * src_idx + 1];  // 虚部
 }
と書いては見たがこのdst[]やsrc[]は実は生の配列ではなくてstd::vector<double>::iteratorなので
共用変数扱いになってスレッド間で排他がかかっているのかもしれん……orz
firstprivate()指示句が(最適化後はポインタとはいえ)C++のオブジェクトを受け取れるかはわからんので
parallel forの前にポインタに置き換えてポインタをfirstprivate()するのが無難鴨、
(同じことはsinテーブルpriroot::nth_root wについても言える)
2022/06/13(月) 14:39:57.67ID:efPEc9j/
std::complexは使わないの?
2022/06/13(月) 15:28:43.59ID:Wf2qSIvf
びーまいべいべー
2022/06/13(月) 23:36:52.53ID:dm71PatD
並列処理に何でマルチスレッド使ってんだよ
昭和からタイムスリップしてきたのか?
2022/06/14(火) 00:17:42.26ID:SQz7DEKB
omp って単語を見るとおまんぽにしか見えない
2022/06/14(火) 01:23:09.85ID:e+DfEXd1
>>187
この問題でasyncプログラミングがどうやってマルチスレッドに太刀打ちするのか教えて
190デフォルトの名無しさん
垢版 |
2022/06/14(火) 16:46:20.69ID:yDV29Um0
教えてください
C++で書かれたDLLがあります
とあるCエクスポート関数を呼び出すと稀に Access Violation 0xc0000005 が発生することがありプロセスが異常終了してしまいます

幸いなことにこの関数は大した仕事をしておらず結果が得られなければそれで困ることもありません(結果が得られれば少し役に立つ程度です)
なのでこの関数の失敗を握り潰したいのですが、C++ でアクセス違反を try-catch で握り潰すことはできるのでしょうか?
それともアクセス違反は致命的なエラーなので必ずプロセス終了に至るのでしょうか?
2022/06/14(火) 16:54:42.88ID:Vdns4Gf+
またこのネタ掘り起こしたいのか・・・
2022/06/14(火) 17:18:04.76ID:NNc5VmHP
>>190
.NETは使っとらんの?
2022/06/14(火) 17:23:59.58ID:rBU/2bdp
https://docs.microsoft.com/ja-jp/cpp/build/reference/eh-exception-handling-model?view=msvc-170

呼び出し側のコンパイルで /EHa オプションつければ try-catch で握りつぶせるんでね?
2022/06/14(火) 18:22:20.04ID:WigeF4Tr
>>190
> 幸いなことにこの関数は大した仕事をしておらず結果が得られなければそれで困ることもありません(結果が得られれば少し役に立つ程度です)
そんな関数なら空の関数に差し替えればいいんじゃね
195デフォルトの名無しさん
垢版 |
2022/06/14(火) 18:39:01.73ID:yDV29Um0
>>193
ありがとうございます!
/EHa を付けたらキャッチできました!
いままでは /EHsc が指定されてましたのでオプションの意味の違いを調べてみます
196デフォルトの名無しさん
垢版 |
2022/06/14(火) 19:23:09.63ID:bI70PJIL
DLLが例外出してるのをCで握り潰してるのが原因だろ
197デフォルトの名無しさん
垢版 |
2022/06/15(水) 20:40:34.83ID:RdmQ7I01
素人の質問でごめんなさい。(ここが一番関連ありそうだったので)
バイオインフォマティクスをやっているのですが、例えば主にC++で書かれたUnicycler (https://github.com/rrwick/Unicycler)というソフトウェアでは、--threadsオプションで使用するスレッド数を指定できます。
デフォルトだとスレッド数8なのですが、仮にそれを1コアを使って実行した際はどのような挙動になるのでしょうか。
コア数<スレッド数なので失敗するかと思ったのですが、思いの他うまく実行できてしまいます。
一般的にこういう場合、並列 (parallel)処理ではなく並行 (concurrent)処理で、スレッドごとに時間を分けて同一コアで処理している、ということなのでしょうか・・・
2022/06/15(水) 20:45:50.35ID:VY0KZJ3n
>>197
> スレッドごとに時間を分けて同一コアで処理している、ということなのでしょうか

せやで。
OS がスケジューリングしてスレッドを交互に実行しとる。
コア数以上のスレッドに分けても実行速度が上がったりはしないよ。
コンテキスト切り替えのコストの分だけむしろ遅くなると思う。
199デフォルトの名無しさん
垢版 |
2022/06/15(水) 21:02:51.51ID:RdmQ7I01
>>198
なるほど、OS賢いですね。。
つまり1コアでやるときは複数スレッドの処理もできるけど、無難に1スレッドの処理にした方がむしろ速い、ということですね。
勉強になりました!ありがとうございます!
200デフォルトの名無しさん
垢版 |
2022/06/15(水) 21:05:28.34ID:74xVOU49
各スレッドがio待ちしてるかも知れんし、コア数より多くても早くなる場合もあるんじゃね
gcc動かすときもコア数1.5倍位指定してる
201デフォルトの名無しさん
垢版 |
2022/06/15(水) 21:28:42.61ID:RdmQ7I01
調べてみたらコンテキストスイッチにもプロセスコントキストスイッチとスレッドコンテキストスイッチがあって、
後者の方がコストが格段に低いとありました。
この場合は同一プロセス中の複数スレッドで後者なので、
>>200さんの言っていることもありますし、コア数よりスレッド数を少し多めに設定しても速くなるのかもしれませんね。
実験して確かめるのが一番かもですね。
2022/06/15(水) 21:38:32.69ID:vqdnmmaI
まあ今の実装は大抵スレッドといいつつプロセスだったりするけどね
203デフォルトの名無しさん
垢版 |
2022/06/15(水) 22:07:11.11ID:Ltc382Vw
>>202
何の話だ?
2022/06/15(水) 22:21:16.61ID:5/k7QI1P
pythonはそんな感じがする
205デフォルトの名無しさん
垢版 |
2022/06/15(水) 22:28:16.78ID:Ltc382Vw
pythonでもマルチスレッドとマルチプロセッシングは別物だろが
2022/06/15(水) 22:34:39.36ID:Z7kfo4VR
Linuxのスレッドはプロセスだと聞いた
2022/06/15(水) 22:56:22.65ID:VY0KZJ3n
そのへんは色んな論が合って今の主流がどうなってんのかよくわからん。
でも一度はプロセスを軽くする方向 (スレッドの実態をプロセスとする方向) になったというのは私も聞いたことがあるような気がする。
(BSD 系の話と混ざってるような気もする。 だいぶんうろ覚え。)
プロセスを軽くするというよりは段階を分けるというか、
プロセスをスレッド的な範囲で使っている分にはスレッド程度の処理しかしないみたいな感じ。
ただ、それは最終的には管理コストが思ったより大きくてそれほど効果的ではないというオチじゃなかったっけ?
2022/06/15(水) 23:10:10.79ID:vqdnmmaI
>>203
OSのカーネルスレッドの実装の話だ
209デフォルトの名無しさん
垢版 |
2022/06/15(水) 23:14:22.38ID:8Ciw/luQ
forkもCoWがあるからオーバーヘッド大したことないんだっけ?
2022/06/16(木) 06:09:16.40ID:acnLqVz4
>>206
誰に聞いたんだよw
てか、少しは疑うことを覚えた方がいいぞ

>>208
ソース出してみ

>>209
Copy on writeを使わない実装よりは大幅に軽いけどメモリー空間とかを準備しなくて済むスレッドよりは重いよ
2022/06/16(木) 06:36:56.71ID:GA9mXaJg
>>205
そうだった。勘違いしてた。
pythonで流行りの並列処理をやろうとしたらマルチプロセスだった。何を言ってるのか わからねーと思うが(以下略)
2022/06/16(木) 07:01:31.35ID:ilsRfae9
>>199
ユニプロセッサでも例えばI/O待ちやユーザ入力待ちしている間にできることをやっとくんだよ
213デフォルトの名無しさん
垢版 |
2022/06/16(木) 07:17:28.07ID:lg2Mpz7e
例えばシングルスレッドのみを利用のサーバーでも
その中で非同期タスクを1万個動かしてクライアント同時接続1万個の処理が可能
ほとんどがネットワーク待ちとディスク待ちだから非同期ならばそれだけ同時に並行処理(≠並列処理)できる
214デフォルトの名無しさん
垢版 |
2022/06/16(木) 07:30:29.25ID:lg2Mpz7e
もし同期プログラミングしか出来ないと
その多数のクライアントを捌くためにスレッド数を増やすことで対応することになるが
スレッドリソースを喰うため大きいためスレッド数を増やせず
スレッドスイッチングも重いため圧倒的に不利となってしまう
2022/06/16(木) 08:51:16.63ID:ilsRfae9
ネットのサーバーは本質的にマルチタスクで
たとえシングルで力技かましてても外から見て複数のタスクを同時にこなしている
2022/06/16(木) 09:12:07.56ID:LWbVArCN
1対1スレッドがマルチプロセッサ使えて実装が楽で悪いことないよね
217デフォルトの名無しさん
垢版 |
2022/06/16(木) 09:53:32.18ID:JxXqg7BH
>>216
それは初心者まで
普通は非同期に処理する
2022/06/16(木) 10:11:35.67ID:LWbVArCN
>>217
非同期のスレッドってどういうのを指すの?
2022/06/16(木) 11:53:53.45ID:ilsRfae9
マルチスレッドは基本的に非同期だけどな
必要に応じてミューテックスやシグナルで待ち合わせする
2022/06/16(木) 16:20:36.89ID:OqC2jk+r
ノンブロッキング=非同期でいいのかな
2022/06/16(木) 16:31:27.35ID:WGtrzJPY
いいよ違うけど
2022/06/16(木) 17:24:48.01ID:Vxm/sO96
しかしまあどこかにライブラリを作ってる人がいるんだけど、その事実を認識できんプログラマというのはおるよな
2022/06/16(木) 17:38:45.90ID:5Mp0JkOM
ジャップにはOSS読んだり一次情報確認しにいく文化がそもそも無いからな
224デフォルトの名無しさん
垢版 |
2022/06/16(木) 17:39:26.55ID:T9ZCQ85W
非同期プログラミングでは多くの言語でPromiseもしくはFutureと呼ばれる同じ概念の抽象化を用いて行なう
つまりこれから行われることを期待する未来の約束という抽象化したものに次々と託していくことで
プログラムコードの見かけ上の記述順とは異なり並行して非同期に複数のタスクが走ることで非常に効率的に実行
それらは一つのスレッド内で何十も何千も非同期に並行して動かすことが可能であるがマルチスレッドを使えばさらにそのコア数倍を動かせる

>>216
それだと効率が悪すぎてお子様向け
2022/06/17(金) 01:35:07.48ID:UGOae7/Q
プログラマー目指してるんですが、C++やるなら03と11の両方勉強しておいた方がいいですか?
2022/06/17(金) 01:42:46.88ID:OGNvxC9Z
はて?
C++11やればC++03もカバーしたことになるからC++11以降一択だよ
細かいことはコンパイルエラーが出てから考えればいいんだよ
2022/06/17(金) 03:02:19.62ID:2abskYGH
今C++03の案件とかあるんかな
あっても正直関わりたくないな
2022/06/17(金) 05:01:48.39ID:GnlLskBw
autoなしで書きたくない
2022/06/17(金) 05:20:26.86ID:zopwF6/i
何を言うとるか
今憶えるべきはC++20に決まっとろうが
2022/06/17(金) 09:56:39.22ID:UGOae7/Q
C++11を勉強しておけば良さそうですね
独習C++をやります
ありがとうございました
2022/06/17(金) 13:24:12.81ID:SEHo94h9
c++11で書いたコードをC++20でコンパイルしようとしたらエラー出まくりんぐ
教えてエロい人
2022/06/17(金) 13:40:57.68ID:zopwF6/i
実例出してくれれば解説できる・・・かも知れないw
2022/06/17(金) 14:29:06.62ID:sTQyUMOv
ソースを貼らないワカランゴよ
2022/06/17(金) 15:09:02.12ID:SEHo94h9
スマソ、C++11じゃなくてC++14だた

vector<int> unkos;
for each (auto unko in unkos) { }

これがエラー出てコンパイル通らない
環境が壊れてるんかな?
IDEはVS2022 17.2.4
235デフォルトの名無しさん
垢版 |
2022/06/17(金) 15:34:14.31ID:tDJ88+fU
C#かなんかと混ざってない?

vector<int> unkos;
for(auto unko : unkos) { }
2022/06/17(金) 15:55:37.01ID:SEHo94h9
しょっちゅうC++とC#往復するから頭おかしくなるな
でもコードスニペットで自動的にfor each (auto unko in unkos)みたいな構文に補完されるんだよね
てか以前までこれでビルド通ってたし
VSのバグかな?
2022/06/17(金) 16:03:50.87ID:GnCwfahh
拡張子間違ってない?
2022/06/17(金) 16:10:31.33ID:SEHo94h9
確認したけど.cppと.hで試してる
C++17まではビルド通るけどC++20にするとエラーだわ
239デフォルトの名無しさん
垢版 |
2022/06/17(金) 16:18:22.80ID:G79h5Zer
C++11 以前はもう忘れていいとは思うけど
以前と以降の違いは知ってた方が良いとも思う
2022/06/17(金) 16:19:50.60ID:2abskYGH
for each inはmsvcの独自拡張らしいな
241デフォルトの名無しさん
垢版 |
2022/06/17(金) 16:20:08.55ID:G79h5Zer
>C++17まではビルド通るけど

マジか?
2022/06/17(金) 16:38:08.56ID:SEHo94h9
>>240
やっぱVS固有の話だったか
>>241
マジ
ただおま環かも
2022/06/17(金) 17:16:26.61ID:iqIqAnpY
参照&とか、左辺値とか、moveとか、copyとか、体系的に学びたいんだけど、
その辺、いいKindle本ない?
オススメない?
244デフォルトの名無しさん
垢版 |
2022/06/17(金) 17:24:24.76ID:G79h5Zer
その質問が出て来る時点で既に体系的に知ってるだろ
2022/06/17(金) 17:42:51.03ID:2abskYGH
C++の書籍紙の本ばっかだよな
ネット上のドキュメント漁れって事なんだろうけど
246243
垢版 |
2022/06/17(金) 18:07:25.78ID:iqIqAnpY
C++をclassの使えるCとしか使ってなくて(そんなに使ってない)、
んで参照&を使った左辺値?を見よう見真似で使ったんだけと、うまくいかなくて(結局ポインタを使った参照を使いました)

あとRustの本読んだらmove、copyを知って、その概念はC++でもあるとどこかで見て、体系的に知りたいと思いました。

Webだと細切れなのでKindle本で読みたいと思います。
オライリーのEffective modern C++なんか適当でしょうか?
でもKindleないんだよなぁ
2022/06/17(金) 18:20:30.66ID:sBNVv+WO
kindleはないけど
オライリーは公式に電子書籍あるよ
2022/06/17(金) 18:22:00.18ID:OGNvxC9Z
所有や共有の機能が欲しいなら shared_ptr 使えば良いだけだろ
2022/06/17(金) 18:41:26.72ID:sTQyUMOv
>>234
こ、こんな裏技が((( ;゚Д゚)))
2022/06/17(金) 18:48:02.47ID:OGNvxC9Z
それはつまりinが予約語になっているってことでもあるのかな
2022/06/17(金) 18:53:09.50ID:aIhMpcwB
C++/CLIなんじゃないの
2022/06/17(金) 19:29:48.79ID:SEHo94h9
いや、たしかにC++プロジェクトやぞ
数年前から使ってるVSプロジェクトではC++14→ビルド通る、C++17→ビルド通る、C++20→エラー
今新規で作ったVSプロジェクトではC++14→エラー、C++17→エラー、C++20→エラー
意味フすぎて漏れそう

https://docs.microsoft.com/ja-jp/cpp/dotnet/for-each-in?view=msvc-170
調べたらfor each構文は非推奨とは出てきたけど
ほならね、コードスニペットで非推奨の構文出すなやと言いたい
しかもそれでビルド通らねえ

まあVSアプデが原因っぽい感じするし、大人しく推奨の構文使うようにするよ
お騒がせしてスマソ
2022/06/17(金) 19:38:58.95ID:bL392TY5
>>251
多分それが正解
https://docs.microsoft.com/ja-jp/cpp/dotnet/for-each-in
2022/06/17(金) 19:41:36.72ID:bL392TY5
>>252
property String^ MyStringProperty;
みたいな構文見た時点で気づけよ...
2022/06/17(金) 19:48:56.19ID:sTQyUMOv
>>254
両方使えるって書いてあるけど

> この非標準のキーワードは、C++/CLI プロジェクトと C++ ネイティブ プロジェクトの両方で使用できます。 ただし、これを使用することはお勧めしません。
2022/06/17(金) 19:50:56.98ID:Ic1RtTnb
>>246
「江添亮のC++入門」は比較的ハードルが低く基礎を理解できるように書かれてると思う。
(別途学習する前提で継承まわりをごっそりと省いたりしてるけど……)
元になった原稿は無料で公開されてて、 Markdown で書かれているので
適当なツールを使えば Kindle で読める形式にもできるんじゃないかな。
2022/06/17(金) 19:59:43.68ID:SEHo94h9
>>254
コード読めるのに文章読めないの?
258デフォルトの名無しさん
垢版 |
2022/06/17(金) 20:05:32.50ID:wjEVmEJW
C++/CLIはC++20で見捨てられてるので強制的にC++17としてコンパイルされる

昔から使ってるvcxprojなら知らん間に追加のオプションつけてたり、今のVSで規定値が変わったりしてるだろうからビルドが通らないのもありうる。

ちょっとしたプログラムならwandboxとかでgcc/clang試してみてもいいんじゃない?
MSVCは独自拡張とか、標準ライブラリでも新しいバージョンのものを先行実装してたりするよ
2022/06/17(金) 20:06:26.13ID:Ic1RtTnb
MSVC を使ってないからよう知らんけど拡張を抑制するオプションとかないの?
2022/06/17(金) 20:22:45.13ID:k/CpGzsk
C++/CLIはC++ではないのだよ!
2022/06/17(金) 20:37:27.17ID:2abskYGH
日本語読めない奴が多いなしかし
2022/06/17(金) 23:05:28.99ID:nJOnHnXa
C++/CLI捨てられちゃうのか
じゃあ今後C#とかとのグルーには何使えばいいの?
2022/06/17(金) 23:21:00.48ID:cGGfCEhk
漢は黙ってP/Invoke
2022/06/17(金) 23:39:45.06ID:OGNvxC9Z
中国人じゃない人はどうすればいいですか?
265デフォルトの名無しさん
垢版 |
2022/06/17(金) 23:43:23.56ID:+i8GyaaY
中国人に非ずば人に非ず。
2022/06/17(金) 23:57:35.61ID:OGNvxC9Z
PCREやbregonig.dllなどのPerl互換正規表現ライブラリでは、日本の漢字と中国の汉字が同じ\p{Han}に一絡げにされてるから注意しなよ
267デフォルトの名無しさん
垢版 |
2022/06/18(土) 20:22:14.05ID:jYGrUTdl
ユニコードだからってことじゃなくて?
268デフォルトの名無しさん
垢版 |
2022/06/19(日) 08:07:25.77ID:w/1mSXjt
www.mercari.com/jp/search/?keyword=hr400p
こういう安い中古チューナ買って、Coinyをスカパープレミアム放送のICカード化して、
スカパープレミアムのチャンネル全部見れるし、USB HDDに録画フリー。
【avoCADO】 Coiny card Part4【仮想通貨】
https://mevius.5ch.net/test/read.cgi/avi/1640762750/
2022/06/19(日) 09:39:07.73ID:G0R2gGHa
誤爆かな
2022/06/19(日) 15:42:17.20ID:pCkywCXr
夏休みの自由研究の成果を今ここに発表するのぜ、
2^(2^34)-1を計算するプログラムを最終的にオリジナルの9.26倍高速化すた、

↓↓↓先週のやつ↓↓↓
■ V3: ブロック6-step algorithm適用
https://ideone.com/rFCMy5
実行時間全体: 389.157479 sec
計算時間のみ: 185.163833 sec

↓↓↓先週のやつの改良版↓↓↓
■ V3.1: ブロック6-step algorithm適用、parallel for粒度変更(粗くした)+workメモリサイズ調整
https://ideone.com/dFjPXf
実行時間全体: 349.057446 sec
計算時間のみ: 151.493976 sec

計算時間のみ比較でオリジナルの9.26倍速、
2022/06/19(日) 15:42:37.86ID:pCkywCXr
計測条件:
 CPU: Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
 メモリ32 GB
 OS: Windows 10 Pro 64 bit
 コンパイラ: Visual Studio 2019でビルド(x64)
 OpenMP 有効(omp_get_max_threads() == 8)
 計算結果は最後(2^(2^34)-1)のみ出力
 (↑ソースコードのSAVE_ITM_RESULTマクロ定義をコメントアウト。元に戻せば前と同じになる。)
2022/06/19(日) 15:44:13.95ID:pCkywCXr
つなみに同じような調子で時間計測すると、(コードはV3.1のSHOW_CSM_TIMEを参照されたい、
■ V0: オリジナル
https://ideone.com/xSaa6x
実行時間全体: 1586.875607 sec
計算時間のみ: 1403.402228 sec

■ V1: C++書き換え版
https://ideone.com/oDgjXr (※ FIGとRADIXはそれぞれ5と100000に訂正
実行時間全体: 1611.894164 sec
計算時間のみ: 1421.579748 sec

■ V2: 倍速化(バッタフライ演算で書き直したやつ。OpenMP非使用
https://ideone.com/xHSzFD
実行時間全体: 622.790273 sec
計算時間のみ: 435.143622 sec

やったわ;;;
つまりV2はV0より3.23倍速く、V3.2はV0より9.26倍速いから2^8倍を達成したのであった、
2022/06/19(日) 15:57:54.28ID:pCkywCXr
じつはさらにL2キャッシュ利用帯域最大化版というのを作ってみたのやが
どうもV3と同等かやや遅くなるorz

■ V3.2: L2キャッシュ利用帯域最大化版
https://ideone.com/ig7PuU
実行時間全体: 399.591214 sec
計算時間のみ: 191.301385 sec

やっていることは、NをL2キャッシュサイズの1コア割り当て分の半分に収まる複素数の数、として、
巨大桁数のFFTを(2*N×N)桁のFFTに分解して個々の(2*N×N)桁のFFTを6-step algorithmで解いているのですだが
なんかコピーしつつ転置するの回数が増えるので速くならないみたい
あとV3.1が速かったりV3.2がEXPN_L2CHACHE_SZを18からいくら増やしてもそれ以上遅くならないのは
Intel(R) Smart CacheテクノロジーがL2キャッシュとL3キャッシュ間の帯域をうまいぐあいに有効活用してくれているっぽい
ここらになってくると詳細は調べようが無いので漏れもソフトウェアー呪術者にならざるおえない
2022/06/21(火) 20:57:53.90ID:MIxQo51/
そっか頑張ったね
2022/06/21(火) 21:17:43.90ID:EegZBjzo
相変わらず漏れとか加齢臭するスラング使ってんのか
2022/06/21(火) 21:26:26.57ID:5USpVKBQ
初老の漏れ易いジジイなんだろ
察して差し上げろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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