前スレ
C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
C++相談室 part161
■ このスレッドは過去ログ倉庫に格納されています
2022/05/21(土) 21:23:29.59ID:kYXfaM+5
177デフォルトの名無しさん
2022/06/11(土) 23:44:48.33ID:/CWj/UNa 粗悪なUPS使って電源破損した事あるから良い印象ないな
178デフォルトの名無しさん
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スレッド
■ オリジナル
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スレッド
179デフォルトの名無しさん
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分ぐらい、
達成感みある、
ただし実行時間の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分ぐらい、
180デフォルトの名無しさん
2022/06/12(日) 14:00:10.22ID:0uPAg53b OpenMPは昨日始めたのでなんか間違ってるかもしれん……orz
行列の転置が8スレッド使って(2回目以降も)実行時間1/8にならない件について:
https://ideone.com/rFCMy5
のfftb6::transpose()のコードの書き方だと50%ぐらいにしか短縮されなんだ 。n_
行列の転置が8スレッド使って(2回目以降も)実行時間1/8にならない件について:
https://ideone.com/rFCMy5
のfftb6::transpose()のコードの書き方だと50%ぐらいにしか短縮されなんだ 。n_
181デフォルトの名無しさん
2022/06/12(日) 14:02:02.73ID:0uPAg53b つなみにVS2019でOpenMP有効にするには
「構成プロパティー」→「C/C++」→「言語」→「OpenMP のサポート」
で逝ける、
「構成プロパティー」→「C/C++」→「言語」→「OpenMP のサポート」
で逝ける、
182デフォルトの名無しさん
2022/06/12(日) 14:04:35.42ID:0uPAg53b >>176
>何がこまめに書くのがファイナルアンサーだよ
NTFSの実装、、、
>突然の電源断で書き込み先のデバイスが壊れる可能性だってあるんだからな
しらそん
それはUPSを買う金もないのに停電とかを引き合いに出してきた香具師に言ってやってくだち
>何がこまめに書くのがファイナルアンサーだよ
NTFSの実装、、、
>突然の電源断で書き込み先のデバイスが壊れる可能性だってあるんだからな
しらそん
それはUPSを買う金もないのに停電とかを引き合いに出してきた香具師に言ってやってくだち
183デフォルトの名無しさん
2022/06/12(日) 14:10:01.25ID:6VBjP0iK 8スレッドで4倍くらいになってほしいね
184デフォルトの名無しさん
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についても言える)
#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についても言える)
185デフォルトの名無しさん
2022/06/13(月) 14:39:57.67ID:efPEc9j/ std::complexは使わないの?
186デフォルトの名無しさん
2022/06/13(月) 15:28:43.59ID:Wf2qSIvf びーまいべいべー
187デフォルトの名無しさん
2022/06/13(月) 23:36:52.53ID:dm71PatD 並列処理に何でマルチスレッド使ってんだよ
昭和からタイムスリップしてきたのか?
昭和からタイムスリップしてきたのか?
188デフォルトの名無しさん
2022/06/14(火) 00:17:42.26ID:SQz7DEKB omp って単語を見るとおまんぽにしか見えない
189デフォルトの名無しさん
2022/06/14(火) 01:23:09.85ID:e+DfEXd1 >>187
この問題でasyncプログラミングがどうやってマルチスレッドに太刀打ちするのか教えて
この問題でasyncプログラミングがどうやってマルチスレッドに太刀打ちするのか教えて
190デフォルトの名無しさん
2022/06/14(火) 16:46:20.69ID:yDV29Um0 教えてください
C++で書かれたDLLがあります
とあるCエクスポート関数を呼び出すと稀に Access Violation 0xc0000005 が発生することがありプロセスが異常終了してしまいます
幸いなことにこの関数は大した仕事をしておらず結果が得られなければそれで困ることもありません(結果が得られれば少し役に立つ程度です)
なのでこの関数の失敗を握り潰したいのですが、C++ でアクセス違反を try-catch で握り潰すことはできるのでしょうか?
それともアクセス違反は致命的なエラーなので必ずプロセス終了に至るのでしょうか?
C++で書かれたDLLがあります
とあるCエクスポート関数を呼び出すと稀に Access Violation 0xc0000005 が発生することがありプロセスが異常終了してしまいます
幸いなことにこの関数は大した仕事をしておらず結果が得られなければそれで困ることもありません(結果が得られれば少し役に立つ程度です)
なのでこの関数の失敗を握り潰したいのですが、C++ でアクセス違反を try-catch で握り潰すことはできるのでしょうか?
それともアクセス違反は致命的なエラーなので必ずプロセス終了に至るのでしょうか?
191デフォルトの名無しさん
2022/06/14(火) 16:54:42.88ID:Vdns4Gf+ またこのネタ掘り起こしたいのか・・・
192デフォルトの名無しさん
2022/06/14(火) 17:18:04.76ID:NNc5VmHP >>190
.NETは使っとらんの?
.NETは使っとらんの?
193デフォルトの名無しさん
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 で握りつぶせるんでね?
呼び出し側のコンパイルで /EHa オプションつければ try-catch で握りつぶせるんでね?
194デフォルトの名無しさん
2022/06/14(火) 18:22:20.04ID:WigeF4Tr195デフォルトの名無しさん
2022/06/14(火) 18:39:01.73ID:yDV29Um0196デフォルトの名無しさん
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)処理で、スレッドごとに時間を分けて同一コアで処理している、ということなのでしょうか・・・
バイオインフォマティクスをやっているのですが、例えば主にC++で書かれたUnicycler (https://github.com/rrwick/Unicycler)というソフトウェアでは、--threadsオプションで使用するスレッド数を指定できます。
デフォルトだとスレッド数8なのですが、仮にそれを1コアを使って実行した際はどのような挙動になるのでしょうか。
コア数<スレッド数なので失敗するかと思ったのですが、思いの他うまく実行できてしまいます。
一般的にこういう場合、並列 (parallel)処理ではなく並行 (concurrent)処理で、スレッドごとに時間を分けて同一コアで処理している、ということなのでしょうか・・・
198はちみつ餃子 ◆8X2XSCHEME
2022/06/15(水) 20:45:50.35ID:VY0KZJ3n >>197
> スレッドごとに時間を分けて同一コアで処理している、ということなのでしょうか
せやで。
OS がスケジューリングしてスレッドを交互に実行しとる。
コア数以上のスレッドに分けても実行速度が上がったりはしないよ。
コンテキスト切り替えのコストの分だけむしろ遅くなると思う。
> スレッドごとに時間を分けて同一コアで処理している、ということなのでしょうか
せやで。
OS がスケジューリングしてスレッドを交互に実行しとる。
コア数以上のスレッドに分けても実行速度が上がったりはしないよ。
コンテキスト切り替えのコストの分だけむしろ遅くなると思う。
199デフォルトの名無しさん
2022/06/15(水) 21:02:51.51ID:RdmQ7I01 >>198
なるほど、OS賢いですね。。
つまり1コアでやるときは複数スレッドの処理もできるけど、無難に1スレッドの処理にした方がむしろ速い、ということですね。
勉強になりました!ありがとうございます!
なるほど、OS賢いですね。。
つまり1コアでやるときは複数スレッドの処理もできるけど、無難に1スレッドの処理にした方がむしろ速い、ということですね。
勉強になりました!ありがとうございます!
200デフォルトの名無しさん
2022/06/15(水) 21:05:28.34ID:74xVOU49 各スレッドがio待ちしてるかも知れんし、コア数より多くても早くなる場合もあるんじゃね
gcc動かすときもコア数1.5倍位指定してる
gcc動かすときもコア数1.5倍位指定してる
201デフォルトの名無しさん
2022/06/15(水) 21:28:42.61ID:RdmQ7I01 調べてみたらコンテキストスイッチにもプロセスコントキストスイッチとスレッドコンテキストスイッチがあって、
後者の方がコストが格段に低いとありました。
この場合は同一プロセス中の複数スレッドで後者なので、
>>200さんの言っていることもありますし、コア数よりスレッド数を少し多めに設定しても速くなるのかもしれませんね。
実験して確かめるのが一番かもですね。
後者の方がコストが格段に低いとありました。
この場合は同一プロセス中の複数スレッドで後者なので、
>>200さんの言っていることもありますし、コア数よりスレッド数を少し多めに設定しても速くなるのかもしれませんね。
実験して確かめるのが一番かもですね。
202デフォルトの名無しさん
2022/06/15(水) 21:38:32.69ID:vqdnmmaI まあ今の実装は大抵スレッドといいつつプロセスだったりするけどね
203デフォルトの名無しさん
2022/06/15(水) 22:07:11.11ID:Ltc382Vw >>202
何の話だ?
何の話だ?
204デフォルトの名無しさん
2022/06/15(水) 22:21:16.61ID:5/k7QI1P pythonはそんな感じがする
205デフォルトの名無しさん
2022/06/15(水) 22:28:16.78ID:Ltc382Vw pythonでもマルチスレッドとマルチプロセッシングは別物だろが
206デフォルトの名無しさん
2022/06/15(水) 22:34:39.36ID:Z7kfo4VR Linuxのスレッドはプロセスだと聞いた
207はちみつ餃子 ◆8X2XSCHEME
2022/06/15(水) 22:56:22.65ID:VY0KZJ3n そのへんは色んな論が合って今の主流がどうなってんのかよくわからん。
でも一度はプロセスを軽くする方向 (スレッドの実態をプロセスとする方向) になったというのは私も聞いたことがあるような気がする。
(BSD 系の話と混ざってるような気もする。 だいぶんうろ覚え。)
プロセスを軽くするというよりは段階を分けるというか、
プロセスをスレッド的な範囲で使っている分にはスレッド程度の処理しかしないみたいな感じ。
ただ、それは最終的には管理コストが思ったより大きくてそれほど効果的ではないというオチじゃなかったっけ?
でも一度はプロセスを軽くする方向 (スレッドの実態をプロセスとする方向) になったというのは私も聞いたことがあるような気がする。
(BSD 系の話と混ざってるような気もする。 だいぶんうろ覚え。)
プロセスを軽くするというよりは段階を分けるというか、
プロセスをスレッド的な範囲で使っている分にはスレッド程度の処理しかしないみたいな感じ。
ただ、それは最終的には管理コストが思ったより大きくてそれほど効果的ではないというオチじゃなかったっけ?
208デフォルトの名無しさん
2022/06/15(水) 23:10:10.79ID:vqdnmmaI >>203
OSのカーネルスレッドの実装の話だ
OSのカーネルスレッドの実装の話だ
209デフォルトの名無しさん
2022/06/15(水) 23:14:22.38ID:8Ciw/luQ forkもCoWがあるからオーバーヘッド大したことないんだっけ?
210デフォルトの名無しさん
2022/06/16(木) 06:09:16.40ID:acnLqVz4211デフォルトの名無しさん
2022/06/16(木) 06:36:56.71ID:GA9mXaJg212デフォルトの名無しさん
2022/06/16(木) 07:01:31.35ID:ilsRfae9 >>199
ユニプロセッサでも例えばI/O待ちやユーザ入力待ちしている間にできることをやっとくんだよ
ユニプロセッサでも例えばI/O待ちやユーザ入力待ちしている間にできることをやっとくんだよ
213デフォルトの名無しさん
2022/06/16(木) 07:17:28.07ID:lg2Mpz7e 例えばシングルスレッドのみを利用のサーバーでも
その中で非同期タスクを1万個動かしてクライアント同時接続1万個の処理が可能
ほとんどがネットワーク待ちとディスク待ちだから非同期ならばそれだけ同時に並行処理(≠並列処理)できる
その中で非同期タスクを1万個動かしてクライアント同時接続1万個の処理が可能
ほとんどがネットワーク待ちとディスク待ちだから非同期ならばそれだけ同時に並行処理(≠並列処理)できる
214デフォルトの名無しさん
2022/06/16(木) 07:30:29.25ID:lg2Mpz7e もし同期プログラミングしか出来ないと
その多数のクライアントを捌くためにスレッド数を増やすことで対応することになるが
スレッドリソースを喰うため大きいためスレッド数を増やせず
スレッドスイッチングも重いため圧倒的に不利となってしまう
その多数のクライアントを捌くためにスレッド数を増やすことで対応することになるが
スレッドリソースを喰うため大きいためスレッド数を増やせず
スレッドスイッチングも重いため圧倒的に不利となってしまう
215デフォルトの名無しさん
2022/06/16(木) 08:51:16.63ID:ilsRfae9 ネットのサーバーは本質的にマルチタスクで
たとえシングルで力技かましてても外から見て複数のタスクを同時にこなしている
たとえシングルで力技かましてても外から見て複数のタスクを同時にこなしている
216デフォルトの名無しさん
2022/06/16(木) 09:12:07.56ID:LWbVArCN 1対1スレッドがマルチプロセッサ使えて実装が楽で悪いことないよね
217デフォルトの名無しさん
2022/06/16(木) 09:53:32.18ID:JxXqg7BH218デフォルトの名無しさん
2022/06/16(木) 10:11:35.67ID:LWbVArCN >>217
非同期のスレッドってどういうのを指すの?
非同期のスレッドってどういうのを指すの?
219デフォルトの名無しさん
2022/06/16(木) 11:53:53.45ID:ilsRfae9 マルチスレッドは基本的に非同期だけどな
必要に応じてミューテックスやシグナルで待ち合わせする
必要に応じてミューテックスやシグナルで待ち合わせする
220デフォルトの名無しさん
2022/06/16(木) 16:20:36.89ID:OqC2jk+r ノンブロッキング=非同期でいいのかな
221デフォルトの名無しさん
2022/06/16(木) 16:31:27.35ID:WGtrzJPY いいよ違うけど
222デフォルトの名無しさん
2022/06/16(木) 17:24:48.01ID:Vxm/sO96 しかしまあどこかにライブラリを作ってる人がいるんだけど、その事実を認識できんプログラマというのはおるよな
223デフォルトの名無しさん
2022/06/16(木) 17:38:45.90ID:5Mp0JkOM ジャップにはOSS読んだり一次情報確認しにいく文化がそもそも無いからな
224デフォルトの名無しさん
2022/06/16(木) 17:39:26.55ID:T9ZCQ85W 非同期プログラミングでは多くの言語でPromiseもしくはFutureと呼ばれる同じ概念の抽象化を用いて行なう
つまりこれから行われることを期待する未来の約束という抽象化したものに次々と託していくことで
プログラムコードの見かけ上の記述順とは異なり並行して非同期に複数のタスクが走ることで非常に効率的に実行
それらは一つのスレッド内で何十も何千も非同期に並行して動かすことが可能であるがマルチスレッドを使えばさらにそのコア数倍を動かせる
>>216
それだと効率が悪すぎてお子様向け
つまりこれから行われることを期待する未来の約束という抽象化したものに次々と託していくことで
プログラムコードの見かけ上の記述順とは異なり並行して非同期に複数のタスクが走ることで非常に効率的に実行
それらは一つのスレッド内で何十も何千も非同期に並行して動かすことが可能であるがマルチスレッドを使えばさらにそのコア数倍を動かせる
>>216
それだと効率が悪すぎてお子様向け
225デフォルトの名無しさん
2022/06/17(金) 01:35:07.48ID:UGOae7/Q プログラマー目指してるんですが、C++やるなら03と11の両方勉強しておいた方がいいですか?
226デフォルトの名無しさん
2022/06/17(金) 01:42:46.88ID:OGNvxC9Z はて?
C++11やればC++03もカバーしたことになるからC++11以降一択だよ
細かいことはコンパイルエラーが出てから考えればいいんだよ
C++11やればC++03もカバーしたことになるからC++11以降一択だよ
細かいことはコンパイルエラーが出てから考えればいいんだよ
227デフォルトの名無しさん
2022/06/17(金) 03:02:19.62ID:2abskYGH 今C++03の案件とかあるんかな
あっても正直関わりたくないな
あっても正直関わりたくないな
228デフォルトの名無しさん
2022/06/17(金) 05:01:48.39ID:GnlLskBw autoなしで書きたくない
229デフォルトの名無しさん
2022/06/17(金) 05:20:26.86ID:zopwF6/i 何を言うとるか
今憶えるべきはC++20に決まっとろうが
今憶えるべきはC++20に決まっとろうが
230デフォルトの名無しさん
2022/06/17(金) 09:56:39.22ID:UGOae7/Q C++11を勉強しておけば良さそうですね
独習C++をやります
ありがとうございました
独習C++をやります
ありがとうございました
231デフォルトの名無しさん
2022/06/17(金) 13:24:12.81ID:SEHo94h9 c++11で書いたコードをC++20でコンパイルしようとしたらエラー出まくりんぐ
教えてエロい人
教えてエロい人
232デフォルトの名無しさん
2022/06/17(金) 13:40:57.68ID:zopwF6/i 実例出してくれれば解説できる・・・かも知れないw
233デフォルトの名無しさん
2022/06/17(金) 14:29:06.62ID:sTQyUMOv ソースを貼らないワカランゴよ
234デフォルトの名無しさん
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
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) { }
vector<int> unkos;
for(auto unko : unkos) { }
236デフォルトの名無しさん
2022/06/17(金) 15:55:37.01ID:SEHo94h9 しょっちゅうC++とC#往復するから頭おかしくなるな
でもコードスニペットで自動的にfor each (auto unko in unkos)みたいな構文に補完されるんだよね
てか以前までこれでビルド通ってたし
VSのバグかな?
でもコードスニペットで自動的にfor each (auto unko in unkos)みたいな構文に補完されるんだよね
てか以前までこれでビルド通ってたし
VSのバグかな?
237蟻人間 ◆T6xkBnTXz7B0
2022/06/17(金) 16:03:50.87ID:GnCwfahh 拡張子間違ってない?
238デフォルトの名無しさん
2022/06/17(金) 16:10:31.33ID:SEHo94h9 確認したけど.cppと.hで試してる
C++17まではビルド通るけどC++20にするとエラーだわ
C++17まではビルド通るけどC++20にするとエラーだわ
239デフォルトの名無しさん
2022/06/17(金) 16:18:22.80ID:G79h5Zer C++11 以前はもう忘れていいとは思うけど
以前と以降の違いは知ってた方が良いとも思う
以前と以降の違いは知ってた方が良いとも思う
240デフォルトの名無しさん
2022/06/17(金) 16:19:50.60ID:2abskYGH for each inはmsvcの独自拡張らしいな
241デフォルトの名無しさん
2022/06/17(金) 16:20:08.55ID:G79h5Zer >C++17まではビルド通るけど
マジか?
マジか?
242デフォルトの名無しさん
2022/06/17(金) 16:38:08.56ID:SEHo94h9243デフォルトの名無しさん
2022/06/17(金) 17:16:26.61ID:iqIqAnpY 参照&とか、左辺値とか、moveとか、copyとか、体系的に学びたいんだけど、
その辺、いいKindle本ない?
オススメない?
その辺、いいKindle本ない?
オススメない?
244デフォルトの名無しさん
2022/06/17(金) 17:24:24.76ID:G79h5Zer その質問が出て来る時点で既に体系的に知ってるだろ
245デフォルトの名無しさん
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ないんだよなぁ
んで参照&を使った左辺値?を見よう見真似で使ったんだけと、うまくいかなくて(結局ポインタを使った参照を使いました)
あとRustの本読んだらmove、copyを知って、その概念はC++でもあるとどこかで見て、体系的に知りたいと思いました。
Webだと細切れなのでKindle本で読みたいと思います。
オライリーのEffective modern C++なんか適当でしょうか?
でもKindleないんだよなぁ
247デフォルトの名無しさん
2022/06/17(金) 18:20:30.66ID:sBNVv+WO kindleはないけど
オライリーは公式に電子書籍あるよ
オライリーは公式に電子書籍あるよ
248デフォルトの名無しさん
2022/06/17(金) 18:22:00.18ID:OGNvxC9Z 所有や共有の機能が欲しいなら shared_ptr 使えば良いだけだろ
249デフォルトの名無しさん
2022/06/17(金) 18:41:26.72ID:sTQyUMOv >>234
こ、こんな裏技が((( ;゚Д゚)))
こ、こんな裏技が((( ;゚Д゚)))
250デフォルトの名無しさん
2022/06/17(金) 18:48:02.47ID:OGNvxC9Z それはつまりinが予約語になっているってことでもあるのかな
251デフォルトの名無しさん
2022/06/17(金) 18:53:09.50ID:aIhMpcwB C++/CLIなんじゃないの
252デフォルトの名無しさん
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アプデが原因っぽい感じするし、大人しく推奨の構文使うようにするよ
お騒がせしてスマソ
数年前から使ってる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アプデが原因っぽい感じするし、大人しく推奨の構文使うようにするよ
お騒がせしてスマソ
253デフォルトの名無しさん
2022/06/17(金) 19:38:58.95ID:bL392TY5254デフォルトの名無しさん
2022/06/17(金) 19:41:36.72ID:bL392TY5255デフォルトの名無しさん
2022/06/17(金) 19:48:56.19ID:sTQyUMOv >>254
両方使えるって書いてあるけど
> この非標準のキーワードは、C++/CLI プロジェクトと C++ ネイティブ プロジェクトの両方で使用できます。 ただし、これを使用することはお勧めしません。
両方使えるって書いてあるけど
> この非標準のキーワードは、C++/CLI プロジェクトと C++ ネイティブ プロジェクトの両方で使用できます。 ただし、これを使用することはお勧めしません。
256はちみつ餃子 ◆8X2XSCHEME
2022/06/17(金) 19:50:56.98ID:Ic1RtTnb >>246
「江添亮のC++入門」は比較的ハードルが低く基礎を理解できるように書かれてると思う。
(別途学習する前提で継承まわりをごっそりと省いたりしてるけど……)
元になった原稿は無料で公開されてて、 Markdown で書かれているので
適当なツールを使えば Kindle で読める形式にもできるんじゃないかな。
「江添亮のC++入門」は比較的ハードルが低く基礎を理解できるように書かれてると思う。
(別途学習する前提で継承まわりをごっそりと省いたりしてるけど……)
元になった原稿は無料で公開されてて、 Markdown で書かれているので
適当なツールを使えば Kindle で読める形式にもできるんじゃないかな。
257デフォルトの名無しさん
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は独自拡張とか、標準ライブラリでも新しいバージョンのものを先行実装してたりするよ
昔から使ってるvcxprojなら知らん間に追加のオプションつけてたり、今のVSで規定値が変わったりしてるだろうからビルドが通らないのもありうる。
ちょっとしたプログラムならwandboxとかでgcc/clang試してみてもいいんじゃない?
MSVCは独自拡張とか、標準ライブラリでも新しいバージョンのものを先行実装してたりするよ
259はちみつ餃子 ◆8X2XSCHEME
2022/06/17(金) 20:06:26.13ID:Ic1RtTnb MSVC を使ってないからよう知らんけど拡張を抑制するオプションとかないの?
260デフォルトの名無しさん
2022/06/17(金) 20:22:45.13ID:k/CpGzsk C++/CLIはC++ではないのだよ!
261デフォルトの名無しさん
2022/06/17(金) 20:37:27.17ID:2abskYGH 日本語読めない奴が多いなしかし
262デフォルトの名無しさん
2022/06/17(金) 23:05:28.99ID:nJOnHnXa C++/CLI捨てられちゃうのか
じゃあ今後C#とかとのグルーには何使えばいいの?
じゃあ今後C#とかとのグルーには何使えばいいの?
263デフォルトの名無しさん
2022/06/17(金) 23:21:00.48ID:cGGfCEhk 漢は黙ってP/Invoke
264デフォルトの名無しさん
2022/06/17(金) 23:39:45.06ID:OGNvxC9Z 中国人じゃない人はどうすればいいですか?
265デフォルトの名無しさん
2022/06/17(金) 23:43:23.56ID:+i8GyaaY 中国人に非ずば人に非ず。
266デフォルトの名無しさん
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/
こういう安い中古チューナ買って、Coinyをスカパープレミアム放送のICカード化して、
スカパープレミアムのチャンネル全部見れるし、USB HDDに録画フリー。
【avoCADO】 Coiny card Part4【仮想通貨】
https://mevius.5ch.net/test/read.cgi/avi/1640762750/
269デフォルトの名無しさん
2022/06/19(日) 09:39:07.73ID:G0R2gGHa 誤爆かな
270デフォルトの名無しさん
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倍速、
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倍速、
271デフォルトの名無しさん
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マクロ定義をコメントアウト。元に戻せば前と同じになる。)
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マクロ定義をコメントアウト。元に戻せば前と同じになる。)
272デフォルトの名無しさん
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倍を達成したのであった、
■ 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倍を達成したのであった、
273デフォルトの名無しさん
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キャッシュ間の帯域をうまいぐあいに有効活用してくれているっぽい
ここらになってくると詳細は調べようが無いので漏れもソフトウェアー呪術者にならざるおえない
どうも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キャッシュ間の帯域をうまいぐあいに有効活用してくれているっぽい
ここらになってくると詳細は調べようが無いので漏れもソフトウェアー呪術者にならざるおえない
274デフォルトの名無しさん
2022/06/21(火) 20:57:53.90ID:MIxQo51/ そっか頑張ったね
275デフォルトの名無しさん
2022/06/21(火) 21:17:43.90ID:EegZBjzo 相変わらず漏れとか加齢臭するスラング使ってんのか
276デフォルトの名無しさん
2022/06/21(火) 21:26:26.57ID:5USpVKBQ 初老の漏れ易いジジイなんだろ
察して差し上げろ
察して差し上げろ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★10 [ぐれ★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【朗報】愛国烈士ほんこん、高市首相のために長文を投稿wwwwwwwwwwwww [834922174]
- ニートしかいない時間ってマジでつまんないよな
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 千速は誰とのカップリングがエロいのか
- 高市コイン、155円突破wwwwwwwwww [246620176]
- おじゃる丸をまったり待機するスレ🏡
