- 1 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 20:20:06.25 ID:o3PNwIlC0.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part134 mevius.5ch.net/test/read.cgi/tech/1516406742/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1509780815/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 192 名前:デフォルトの名無しさん mailto:sage [2018/04/18(水) 02:18:47.96 ID:whM0Cl8U0.net]
- Windowsのネットワーク関係APIはkernel内に実装されていない
後は判るな?
- 193 名前:デフォルトの名無しさん mailto:sage [2018/04/18(水) 07:02:39.34 ID:bX/oR0u10.net]
- ネットワーク関係に限らずAPIはすべてサブシステムだね
- 194 名前:デフォルトの名無しさん mailto:sage [2018/04/20(金) 23:48:17.59 ID:MBksKo4b0.net]
- class Sample{
private: const double val{0.0} public: void set(double v){ static_cast<double>(this->val) = v; } }; VS2015での話なのですが、こんな感じのコードを先日見かけまして static_castでメンバ変数のconst外しができているように見えるのですけど、この動作は合法なものなのでしょうか? 試しにwandboxのclang 7.0で試して見た所当然のようにコンパイルエラーになったのですが・・・
- 195 名前:はちみつ餃子 mailto:sage [2018/04/21(土) 00:23:55.79 ID:7j/Wt31X0.net]
- >>191
const を外すのは const_cast じゃなきゃ出来ないことになっている。 だいぶん昔からそう。 でなきゃわざわざ分けている甲斐がない。
- 196 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 00:37:31.88 ID:WobodGQW0.net]
- const char *a = "hoge";
const char *b = "hoge"; この2つのポインタがa == bになることは保障されていますか?
- 197 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 00:42:18.95 ID:F9SE4HSu0.net]
- ない
- 198 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 00:47:40.36 ID:5uFute1E0.net]
- >>192
やっぱりそうですよね、何か特別な動作かとも思ったのですがVC++のバグか仕様なんですね・・・
- 199 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 06:06:21.46 ID:pETeS31u0.net]
- >>191
VS2017では警告されるぞ(おそらくVS2015でも) cl 191.cpp /c /W4 Microsoft(R) C/C++ Optimizing Compiler Version 19.13.26129 for x86 Copyright (C) Microsoft Corporation. All rights reserved. 191.cpp 191.cpp(7): warning C4213: 非標準の拡張機能が使用されています: 左辺値でキャストしました。 後はわかるな?
- 200 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 06:22:18.02 ID:wsxrLs1Z0.net]
- ポインタや参照のconst外しは合法だが
なぜ合法なのか(合法にせざるを得なかったのか)というとmemory aliasing状況下での最適化の限界に関する ラクダ本ばりに長い議論を要する 悪寒、 プログラミング言語C++か何かでは古いライブラリのconst付け忘れにコード修正無しで対応できるYO!みたいな簡単な説明しかないが しかし左辺値のキャストというのはどうなの?
- 201 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 08:02:29.99 ID:POwjcYl50.net]
- static_cast<double>(this->val)自体は合法でしょ
this->valと同じ値のdouble一時オブジェクトができるだけ おかしいのはそれに代入してること
- 202 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 11:34:19.85 ID:pETeS31u0.net]
- int x;
(float&)x = 1;
- 203 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 11:34:55.76 ID:pETeS31u0.net]
- 途中で書き込まれてしまった
int x; (float&)x = 1; //well-formed (float )x = 1; //ill-formed
- 204 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 17:24:24.80 ID:RLzEBpTGa.net]
- std:stringを引数や戻り値で使う場合、値渡しでも大丈夫ですか?
- 205 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 17:29:11.38 ID:xCJicIF50.net]
- 大丈夫
- 206 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 18:29:08.58 ID:i5tL4+9s0.net]
- stringは内部に参照カウンタを保持した共有リファレンサを持っているから&&使用せずに直で渡しても特に副作用もなく何の問題もないよ
- 207 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 18:53:47.99 ID:cFbiqY2T0.net]
- 今どきのstringはヒープじゃなくスタックを使ったりもするね
鬼のように最適化されている
- 208 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 19:26:19.72 ID:xCJicIF50.net]
- >>203
おじいちゃんそれ大昔の話ですよ
- 209 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 19:52:27.54 ID:i5tL4+9s0.net]
- >>205
貴様は過去を否定するのか? 温故知新という言葉を知らないのか? 青二才
- 210 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 20:00:35.45 ID:pGMCB93ha.net]
- ありがとうございます
勝手にデストラクタでdeleteされるとか色々考えていましたがそこは先人たちが考慮して作られているのですね
- 211 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 20:19:16.41 ID:5qvptAAaM.net]
- いやいや老害に騙されちゃだめですよ。
参照カウントなstringは大昔に禁止されているので、ちゃんと参照や右辺値渡等を使いましょう
- 212 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 20:23:51.32 ID:M8qmSLCN0.net]
- >>208
何言ってんだおまえ 頭悪すぎるにもほどがあるだろ
- 213 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 20:58:25.32 ID:ltJDDxzZ0.net]
- COWなstringは効率が悪くてマルチスレッドとの相性が最悪なのでとっくの昔に打ち捨てられました
規格のCOW実装許容するための記述はC++11でバッサリ捨てられました 今はCOWは規格違反です
- 214 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 21:39:50.50 ID:M8qmSLCN0.net]
- なん…だと!?
- 215 名前:デフォルトの名無しさん [2018/04/22(日) 21:51:37.63 .net]
- おじいちゃんw
- 216 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 21:54:34.58 ID:w7SgV4Bf0.net]
- 値渡しや戻り値で戻せることと、
std::string内部での(ヒープ)メモリ管理の詳細は関係なくね?? 引数や戻り値としてスタックに構造体を積めるようになった時点で値渡しや戻り値で戻せることとはほぼ自明 (よほど変なコピコンを定義してコピーをわざと不首尾に終わらせない限りそれはできる
- 217 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 23:24:42.33 ID:xCJicIF50.net]
- >>213
まあそうだけれど無駄なコピーはなるべく避けましょうということで
- 218 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 23:50:24.01 ID:usC+gOtq0.net]
- 今時のコンパイラは、そこらの人間よりよっぽど高度な最適化をするから、素直で単純なコードを書くと速くなる。
効率化するつもりで余計なことをすると、コンパイラの最適化を妨げて、かえって効率が落ちたりする。 本当に重要な部分は実測しながら試行錯誤、それ以外はできるだけ素直なコードを書く、ってあたりが基本。
- 219 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 01:28:01.46 ID:C1tu+nEe0.net]
- stringを値渡しせずにconst参照等々で渡すことはc++の基本なので、素直で単純なコードの部類に入ると思うが。
- 220 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 01:32:17.81 ID:Lxhtz3Yj0.net]
- って、あたりが基本(`・ω・´)キリッ
道化かw
- 221 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 01:37:49.36 ID:voecBiJS0.net]
- 先生!OpenMPへの展開も自動でやってくれるんですか?
- 222 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 01:46:26.60 ID:Lxhtz3Yj0.net]
- 値渡しを素直なコードとか言う人って他人の書いたコード読まないんだろうな
宿題以外で何か書いたことあるのか
- 223 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 02:04:07.25 ID:SgzxVTg+0.net]
- const type &
- 224 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 04:33:47.47 ID:WjBjSqCj0.net]
- const参照渡しが基本だったのって C++11 以前の世界の話だよね…
幸い、近頃はそんなコードをあまり読まずに済んでるけど。 余計なことをしない、ってのが大事なんだよ。 参照でなきゃいけない理由がなければ、参照を使うべきじゃないんだ。
- 225 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 06:33:47.30 ID:awXEdMZR0.net]
- どこの世界に生きてる人?
- 226 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 07:20:47.54 ID:voecBiJS0.net]
- どんな作品を作っているのかなぁ?
- 227 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 08:32:33.12 ID:EDVnvY5w0.net]
- 初心者です。
今書いてるプログラムをコンパイルして実行すると、エラーが出たり出なかったり謎の挙動を起こします 最初はエラーが出て、その後数回、コードを一切変えずコンパイルしなおして実行すると急にエラーが出ず上手く行ったりします。 これって何が原因なのでしょうか… こういう事ってよくあるのですか?
- 228 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 08:34:14.27 ID:Lxhtz3Yj0.net]
- キチガイ発言はツイッターかブログでどうぞ
- 229 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 08:35:11.51 ID:Lxhtz3Yj0.net]
- >>224
よくあることです デバッグしましょう
- 230 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 10:17:10.24 ID:Hh6TN2Aq0.net]
- >>224
そのエラーとやら、もしかして警告か? エラーは直すまで何度コンパイルしても絶対に通らない 警告はコンパイルが完了しオブジェクトファイルができる そのコンパイルとやら、もしかしてビルドか? それともmakeか? ビルドやmakeはオブジェクトファイルとソースファイルの日付を比較して ソースファイルのほうが古いとコンパイルを省く だから警告が出てからもう一度ビルドしても同じ警告は出ない おそらく、こういうことだと見受ける
- 231 名前:デフォルトの名無しさん [2018/04/23(月) 10:24:23.61 ID:48PNhEnX0.net]
- 変数を初期化してないんだろ
- 232 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 12:27:19.92 ID:8odlZZv8M.net]
- >>227
日本語読めないのかよ... > 実行すると、エラーが出たり出なかったり謎の挙動を起こします
- 233 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 13:44:26.09 ID:Hh6TN2Aq0.net]
- >>229
日本語でしゃべってくれ
- 234 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 13:58:46.97 ID:1JtTwXqR0.net]
- 実行してるということはコンパイルは通ってるということだと思う
つまりコンパイルの問題ではなく、コンパイルエラーではないだろうという推測
- 235 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 13:58:59.41 ID:Lxhtz3Yj0.net]
- >>230
「実行すると」 ビルド時のコンパイラなどからのエラーではなく、 プログラムを実行したときの挙動についての質問のようですよ
- 236 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 14:45:37.00 ID:Hh6TN2Aq0.net]
- 初心者つってるから
どこまでがコンパイルで どこからが実行なのかの 区別からあやしいと見ている 実行時エラーにしても stopダイアログなのか 結果がおかしいのか あの質問では言ってない
- 237 名前:デフォルトの名無しさん [2018/04/23(月) 14:53:14.79 ID:48PNhEnX0.net]
- すげーみっともない奴だな
- 238 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 14:56:19.11 ID:Hh6TN2Aq0.net]
- 嘘は言っていない
- 239 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 15:52:04.86 ID:mDBTWEJod.net]
- 言論の自由を行使し過ぎw
- 240 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 16:27:46.06 ID:So2OBlKcd.net]
- コンパイルして(リンクを)実行すると
だったりして
- 241 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 17:14:12.91 ID:VArh9qU+0.net]
- 初心者がいちいちobjからリンクしてるのか
- 242 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 17:15:44.11 ID:Hh6TN2Aq0.net]
- しつけえな
ここはプログラム技術板 技術的な内容が皆無のレスでひっ絡んでくるなカス
- 243 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 17:30:01.10 ID:orIXCmni0.net]
- >>224
何を実行するのか目的語をはっきりさせろ プロ意識が欠けている
- 244 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 17:32:39.31 ID:orIXCmni0.net]
- あ、初心者だったのか…
- 245 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 17:34:51.03 ID:vGDXyrLu0.net]
- >>224
ソースを公開することは可能ですか? https://ideone.com
- 246 名前:デフォルトの名無しさん [2018/04/23(月) 21:12:48.39 ID:7US5BnQm0.net]
- pthread を使ってループ処理をマルチスレッド化したのですが、シングルスレッドと同じスピードしか出ませんでした。
pthread でこういう事やっても無駄なんでしょうか?
- 247 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 22:04:36.67 ID:C1tu+nEe0.net]
- 流石に情報が少なすぎて
このままだと下手糞としか言いようがない。 ソースコード貼り付けれ
- 248 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 22:09:13.69 ID:oFP/MhUD0.net]
- シングルコアのPCかも
- 249 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 22:17:20.63 ID:1ikED9ud0.net]
- pthread使うとひとつの処理が倍速にでもなると思ったのだろうか
- 250 名前:片山博文MZ mailto:sage [2018/04/23(月) 22:21:51.35 ID:ATy8dQXfd.net]
- 不完全な質問はスルーすっと
- 251 名前:デフォルトの名無しさん [2018/04/23(月) 22:42:58.69 ID:7US5BnQm0.net]
- 舌足らずですみません。コードはこんな感じです。
threadFunctionは単なる加算値、joinFunctionは集計処理です。 コアは物理2論理4です。 template< class ArgType > void Reduce( std::vector< ArgType >& threadArgs, void* (*threadFunction)(void*), void (*joinFunction)(std::vector< ArgType >&) ) { const size_t threadCount = threadArgs.size(); threads.resize( threadCount ); std::vector< void* > voidPtrArgs = CastArgsToVoidPtrs( threadArgs ); for ( int threadIndex = 0; threadIndex < threadCount; ++threadIndex ) { sched_param schedParam; schedParam.sched_priority = sched_get_priority_max( SCHED_FIFO ); pthread_attr_t threadAttribute; pthread_attr_init( & threadAttribute ); pthread_attr_setschedpolicy( & threadAttribute, schedPolicy ); pthread_attr_setinheritsched( & threadAttribute, PTHREAD_EXPLICIT_SCHED ); pthread_t& thread = threads[ threadIndex ]; pthread_setschedparam( thread, schedPolicy, & schedParam ); pthread_create( & thread, & threadAttribute, threadFunction, voidPtrArgs[ threadIndex ] ); } for ( int threadIndex = 0; threadIndex < threadCount; ++threadIndex ) { pthread_t thread = threads[ threadIndex ]; pthread_join( thread, NULL ); } joinFunction( threadArgs ); }
- 252 名前:デフォルトの名無しさん [2018/04/23(月) 22:45:44.01 ID:reOPAGg30.net]
- >>243
この世界では、何かやって思い描いてたようにならなかった場合 まず自分の能力不足を疑うのが鉄則
- 253 名前:デフォルトの名無しさん [2018/04/23(月) 22:51:38.20 ID:reOPAGg30.net]
- >>248
アハハハハ!ジョークのつもりかなんか? そうじゃないならjoinの動きを勉強しろ
- 254 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 22:53:42.39 ID:voecBiJS0.net]
- 釣り針デカいな
- 255 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:14:39.42 ID:gZ/aKTVF0.net]
- いまだに関数ポインタ使ってるのか。野蛮人。
std::functionってスレッドセーフじゃないの?
- 256 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:18:02.49 ID:YIxEn5Qs0.net]
- いまだ関数ポインタが使いこなせないんだけどやばいかな?
- 257 名前:デフォルトの名無しさん [2018/04/23(月) 23:20:18.71 ID:reOPAGg30.net]
- 考えたらjoinの問題じゃないか
もし「単なる加算処理」が1スレッドでメモリ帯域使い潰していたらマルチスレッドにしてもどうしようもないのは明らかだよ
- 258 名前:デフォルトの名無しさん [2018/04/23(月) 23:21:31.95 ID:reOPAGg30.net]
- >>253
未だに関数ポインタなんて使ってるほうがやばい
- 259 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:30:05.62 ID:1JtTwXqR0.net]
- 画像処理で合成処理をパラメータでもらう場合があるんだが
その場合内部処理と対応させるために関数ポインタは使うが そういうのもダメ?
- 260 名前:デフォルトの名無しさん [2018/04/23(月) 23:35:26.41 ID:reOPAGg30.net]
- ダメってわけじゃないけどさあw
C++ならもっと柔軟性のあるやりかたが幾らでもあるってこと
- 261 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:36:21.76 ID:lnjW6wzS0.net]
- virtual関数もラムダ式も関数ポインタ
- 262 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:40:33.42 ID:awXEdMZR0.net]
- std::byteが邪魔すぎるんですけどg++で無効にするオプションってありますかね?
- 263 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:50:59.76 ID:9sQDUnnSM.net]
- >>257
あんた昨日のおじいちゃんだろ。 functionの時代もとっくに終わってるぞ。 autoとlambdaで関数ポインタを使うべき。
- 264 名前:デフォルトの名無しさん mailto:sage [2018/04/23(月) 23:51:42.53 ID:gZ/aKTVF0.net]
- >>258
ライブラリ制作者でもなければ関数ポインタなんぞ触らんよ。 よほどCとの兼ね合いが無いと。
- 265 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:06:39.75 ID:qFc5rpEV0.net]
- >>248
threadcountいくつになってるの?
- 266 名前:はちみつ餃子 mailto:sage [2018/04/24(火) 00:06:56.48 ID:VhsA5JFS0.net]
- 忘れがちなことだが std::function は実行時の型を扱う。
画像処理などのようにヘビーな繰返しがあるような場面では関数ポインタを使った場合との間に深刻な速度差が生じることもなくはない。
- 267 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:16:24.07 ID:qFc5rpEV0.net]
- >>248
関数名からして、一度のreduce処理量は大したことなくて、何度も繰り返し呼んでない? thread処理に必要な処理量が相対的に無視できなくなってるんじゃね? スレッドは4本に制限して、各スレッドが処理する量を増やすかスレッドプール式にしては?
- 268 名前:デフォルトの名無しさん [2018/04/24(火) 00:17:16.38 .net]
- C++だから関数ポインタ使わないとか頭おかしい
関数ポインタのほうが高速かつシンプルに書けるならそちらを選択すべき
- 269 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:20:31.80 ID:N5/L/OXI0.net]
- 皆富豪ばかりではない
- 270 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:26:04.88 ID:RoXKv00p0.net]
- 富豪かどうかはおま環だろ
だから自己申告しないヤツが悪い なんでこっちがエスパーみたいなことしなきゃいけないんだ わたくしは教えないがあなたがわたしの環境を忖度しろってか? ヴァカじゃねえの? アフォに対してちゃあんと「テメーのスペックはいかほどですか」と尋ねろクズ 富豪かどうかはわからない、それを言わない人間がまず間違い、 それを逆手にとって相手をマウンティングするアフォがいるから話が進まない
- 271 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:38:30.68 ID:Sy+ZRJzm0.net]
- 関数ポインタの構文の方がかっこいいだろ!
- 272 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 00:47:04.42 ID:hfyVIq8IM.net]
- どんなスペックだろうと他のソフトがどれだけメモリや処理時間を喰い潰していようと自分の処理はサクッと終わらせたいといつも思う
- 273 名前:デフォルトの名無しさん [2018/04/24(火) 01:40:17.33 ID:2n4xWLsG0.net]
- >>260
へんてこりんなマウンティングするやつだなあ ちなみに昨日なんて俺書き込んでないからw
- 274 名前:デフォルトの名無しさん [2018/04/24(火) 03:16:15.83 ID:CsMI0xmD0.net]
- >>248
調べてみたけどさっぱり判りません。 pthread_joinで各スレッドの終了を待って、その後、集計処理をするというのはごく渡り前の処理に見えるのですが、 何が行けないのでしょうか? 別の方法でスレッドの終了を待たねばならないのでしょうか? 自分勝手デスミア線が、具体的に問題点、改善点を指摘して下さいm(_ _)m。
- 275 名前:デフォルトの名無しさん [2018/04/24(火) 03:31:10.06 ID:2n4xWLsG0.net]
- いいから「単なる加算処理」全部見せろよこの包茎野郎
- 276 名前:デフォルトの名無しさん [2018/04/24(火) 03:56:33.85 ID:CsMI0xmD0.net]
- threadFunctionが、
void* CalcBasicStatics( void* threadArg ) { BasicStaticsThreadArg* arg = reinterpret_cast< BasicStaticsThreadArg* >( threadArg ); double interva
- 277 名前:lOfX = arg->intervalOfX;
double x = arg->dividedRangeOfX.start; double sumOfY = 0.0; double sampleCount = 0; const sc::Sampler& f = arg->f; while ( x <= arg->dividedRangeOfX.end ){ double y = f( x ); sumOfY += y; sampleCount++; x += intervalOfX; } arg->sumOfY = sumOfY; arg->sampleCount = sampleCount; return nullptr; } joinFunctionが、 void CalcBasicStaticsJoin( std::vector< BasicStaticsThreadArg >& args ) { double sampleCount = 0.0; double sumOfY = 0.0; for ( int i = 0; i < args.size(); ++I ) { sumOfY += args[ i ].sumOfY; sampleCount += args[ i ].sampleCount; } for ( int i = 0; i < args.size(); ++i ) { // 結果を書き込み BasicStaticsThreadArg& arg = args[ i ]; arg.average = sumOfY / sampleCount; } } です。細々すみません。 [] - [ここ壊れてます]
- 278 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 05:46:22.80 ID:vHj8ybNt0.net]
- そのコード見ても
並列度もスレッドあたりのサンプル数も 1サンプルあたりのコスト(f)もわからないので まるで意味がない 2または4並列で、1スレッドあたり1〜10Mサンプルくらい処理するようにすれば 速くなるか少なくともスレッドを使わない場合より遅くならないと思う 同じ速度ということはメモリ帯域が律速なのかもね
- 279 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 05:46:49.67 ID:vHj8ybNt0.net]
- 同じ速度
↓ スレッドを使わない場合と同じ速度
- 280 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 05:55:18.81 ID:vHj8ybNt0.net]
- fでメモリのどっかから数値を読んでいるんだと思うけど、
これがなるべく連続したアクセス(局所化を謀る)になるようにループを構成できれば速くなるかもしれない。 この辺りはググれば色々参考になるページがあると思うが いまググッたらそれらしいページがあったので書いておく myoga.web.fc2.com/prog/cpp/opti02.htm 仕様として外からfが与えられるなら無理な話かもしれない。 もちろん interval が 1 で f(x) が { return v[x]; } のような最適なケースよりは速くならないので その辺りは無駄な努力をしないよう測っておきましょう。
- 281 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 06:54:08.05 ID:RDzdLFpT0.net]
- fの中身が公開出来るなら公開して
複数あるならそのうちの1個でいいから あと、 1回のthreadFunctionで何個くらいfを計算する?
- 282 名前:デフォルトの名無しさん [2018/04/24(火) 09:24:50.43 ID:jHZYDUEYd.net]
- >>250
joinについて勉強しろとか偉そうに言ってたのは何だったの
- 283 名前:デフォルトの名無しさん [2018/04/24(火) 18:12:35.67 ID:2n4xWLsG0.net]
- >>278
こりゃ「多分」joinの問題じゃないなと判断して>>254を書いたんだが これくらいのコンテキスト読めないとマルチスレッドは無理だよ
- 284 名前:デフォルトの名無しさん [2018/04/24(火) 18:15:41.14 ID:2n4xWLsG0.net]
- fやら具体的なargsの内容やら処理時間測定のやりかたも記述されてないし
んなもの誰も答えられるかよ
- 285 名前:デフォルトの名無しさん [2018/04/24(火) 18:32:28.83 ID:6+u8wIQpd.net]
- >>279
違う違う なんで明らかに間違えてる事を偉そうに述べられるのかと聞いてんだけど 読解力もスキルもないのか
- 286 名前:デフォルトの名無しさん [2018/04/24(火) 18:41:27.90 ID:2n4xWLsG0.net]
- >>281
本当に「明らかに」だと思ってるの?バカですか?
- 287 名前:デフォルトの名無しさん [2018/04/24(火) 18:45:24.94 ID:cOEBcXkN0.net]
- サンプルレベルのJoinの使い方をみて
「アハハハハ!ジョークのつもりかなんか?そうじゃないならjoinの動きを勉強しろ」 は流石に笑ってしまう
- 288 名前:デフォルトの名無しさん [2018/04/24(火) 18:47:53.38 ID:2n4xWLsG0.net]
- 勝手に笑ってればw
- 289 名前:デフォルトの名無しさん [2018/04/24(火) 18:49:15.43 ID:Z9G2Fq/Ha.net]
- cin で、個数の決まっていない整数たちを読み込みたいのですが、どうすればいいでしょうか?
整数たちの個数 n が分かっていれば、以下のように読み込めばいいですが。。。 vector<int> v; int i; for (int i = 0; i < n; ++i) { cin >> i v.push_back(i) }
- 290 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 18:59:54.20 ID:lGEjd9Z7M.net]
- >>282
明らかにだろどう見ても。 何をどう勘違いしたのか
- 291 名前:説明してくれよ。 []
- [ここ壊れてます]
- 292 名前:デフォルトの名無しさん mailto:sage [2018/04/24(火) 19:02:18.64 ID:of0BgjlM0.net]
- >>285
他に入力がないなら cin.eof() で入力の終了を検出できるよ。 cin のブール演算を使ってもいいけど、どうにも慣れなくてね(個人の見解)。
|

|