前スレ
C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
探検
C++相談室 part161
■ このスレッドは過去ログ倉庫に格納されています
2022/05/21(土) 21:23:29.59ID:kYXfaM+5
125デフォルトの名無しさん
2022/06/05(日) 18:15:07.18ID:VgN5DVM1 >>124
ブラウザでctrl+f押してみ。
ブラウザでctrl+f押してみ。
126デフォルトの名無しさん
2022/06/05(日) 18:28:12.08ID:dinbGc5/ >>123
手取りで1000万くらいですか?
手取りで1000万くらいですか?
127デフォルトの名無しさん
2022/06/05(日) 19:24:35.36ID:/AT5pgYO htmlは知らんがxmlの読み書きはC++のプログラムで一般的じゃね
128デフォルトの名無しさん
2022/06/05(日) 22:30:48.15ID:n7vwmg3m C言語の基本を学んでC++を勉強を始めました
バッファのフラッシュについて教えてください
プログラムは最後に全てのバッファがフラッシュされると思いますが、
std::flashやstd::endlはどういった時に使えばいいのでしょうか?
また、フラッシュの処理時間を考えるとstd::endlよりも'\n'を使った方が軽くなると思いますが、
あえてstd::endlを使う意味はありますか?
このフラッシュという概念はC言語になかったですよね…?
バッファのフラッシュについて教えてください
プログラムは最後に全てのバッファがフラッシュされると思いますが、
std::flashやstd::endlはどういった時に使えばいいのでしょうか?
また、フラッシュの処理時間を考えるとstd::endlよりも'\n'を使った方が軽くなると思いますが、
あえてstd::endlを使う意味はありますか?
このフラッシュという概念はC言語になかったですよね…?
129デフォルトの名無しさん
2022/06/05(日) 22:41:22.00ID:FJOOY/QK fflush()を知らずにC言語を使ってきたなら気にする必要はない
130デフォルトの名無しさん
2022/06/05(日) 22:53:56.06ID:ypMgugQ8 >>128
キミの疑問の中に答えがあると思うんだが
>プログラムは最後に全てのバッファがフラッシュされると思いますが、
逆に言えばプログラムの途中ではいつバッファの内容がflashされるかわからないってことじゃん
どういった時に使えばいいのか、なんてプログラムの最後ではなく途中でflashしたい時だろ
キミの疑問の中に答えがあると思うんだが
>プログラムは最後に全てのバッファがフラッシュされると思いますが、
逆に言えばプログラムの途中ではいつバッファの内容がflashされるかわからないってことじゃん
どういった時に使えばいいのか、なんてプログラムの最後ではなく途中でflashしたい時だろ
131デフォルトの名無しさん
2022/06/05(日) 22:55:08.26ID:JCaRLrt5 stderr(バッファリング無し)とstdout(デフォルトでバッファリング有り)のリダイレクト先が同じ(コンソール等)のとき、
printf()とfprintf()の実行順にprintf()とfprintf()の出力結果を並ばせたいときに早速ffush(stdout)の出番が、
あとfflush()せずにabort()したらバッファ上のデータが失われることがある
もっともabort()を呼ぶしかない状況とかはどうしようもない状況なので盲目的なfflush()が適切とは言えないケースも
ありえるかもし
れんが
printf()とfprintf()の実行順にprintf()とfprintf()の出力結果を並ばせたいときに早速ffush(stdout)の出番が、
あとfflush()せずにabort()したらバッファ上のデータが失われることがある
もっともabort()を呼ぶしかない状況とかはどうしようもない状況なので盲目的なfflush()が適切とは言えないケースも
ありえるかもし
れんが
132デフォルトの名無しさん
2022/06/05(日) 23:00:34.55ID:JCaRLrt5 んまー通常はファイルのクローズでフラッシュされるから明示的にファイルポインタに対してfflush()する必要に迫られることはなさげ
腸人工的なシチュエーション(でありかあまり良い設計でない例)として、
オープンしたままのファイルA、Bにこの順でデータが追記されることを気体するプロセスが他に居るときに
A、Bの順で追記するとき要る?ぐらい??
腸人工的なシチュエーション(でありかあまり良い設計でない例)として、
オープンしたままのファイルA、Bにこの順でデータが追記されることを気体するプロセスが他に居るときに
A、Bの順で追記するとき要る?ぐらい??
133デフォルトの名無しさん
2022/06/05(日) 23:11:06.10ID:TqTpE262 他のプロセスと通信する時に明示的なバッファフラッシュが必要になることがあるよ
134デフォルトの名無しさん
2022/06/05(日) 23:17:22.56ID:JCaRLrt5 >>133
それは思わないでもなかったが、
1. バッファに入った順で出ていく
2. ほっといてもバッファ内容がどんどん出ていく
3. 通信は送りっぱなしまたはロジカルなハンドシェーク手順
である場合にfflush()が必須というケースが思いつきませなんだ、
それは思わないでもなかったが、
1. バッファに入った順で出ていく
2. ほっといてもバッファ内容がどんどん出ていく
3. 通信は送りっぱなしまたはロジカルなハンドシェーク手順
である場合にfflush()が必須というケースが思いつきませなんだ、
135デフォルトの名無しさん
2022/06/05(日) 23:24:31.44ID:/ywqNijR 1行ごとに結構重い処理をしたり、std::cinが入ってくるタイミングが不定期だったりするときに1行ごとにflushしておくと便利。
C言語でも使うテクニックだけどね
C言語でも使うテクニックだけどね
136デフォルトの名無しさん
2022/06/05(日) 23:25:34.70ID:TqTpE262 送信側(自アプリ)じゃなくて受信側(他アプリ)の都合次第なので
137デフォルトの名無しさん
2022/06/05(日) 23:36:59.90ID:JCaRLrt5 >受信側(他アプリ)の都合次第
どのような都合かkwsk、
fflush()したら動いて、fflush()しないと止まってしまう通信処理とかはなんかおかしいのでは……
ほっといてもバッファ内容がどんどん出ていく 限りfflush()せずとも送信は成立する
受け取れたかどうかはACKかNAKでも返してもらえばワカルから、
受信タイムうアウト検知ぐらいしかタイミングが関係する要素は無さげ、
どのような都合かkwsk、
fflush()したら動いて、fflush()しないと止まってしまう通信処理とかはなんかおかしいのでは……
ほっといてもバッファ内容がどんどん出ていく 限りfflush()せずとも送信は成立する
受け取れたかどうかはACKかNAKでも返してもらえばワカルから、
受信タイムうアウト検知ぐらいしかタイミングが関係する要素は無さげ、
138デフォルトの名無しさん
2022/06/05(日) 23:57:14.80ID:TqTpE262 「受け取れたかどうかはACKかNAKでも返してもらえばワカル」ってのがすでに受信側の都合だろ
139デフォルトの名無しさん
2022/06/06(月) 00:02:59.46ID:NTJIoMOy コンテキストスイッチをきっかけにフラッシュするような仕組みはあるん?
140デフォルトの名無しさん
2022/06/06(月) 00:15:14.95ID:1jBvtBty それがフラッシュしておかないと停電のときデータ全部持ってかれるんだよな
141デフォルトの名無しさん
2022/06/06(月) 00:19:06.76ID:68av+k9D とりあえず言っておくが、水がもったいないからと言って水洗トイレを流さずに退出するのはやめたほうがいい
142デフォルトの名無しさん
2022/06/06(月) 00:21:03.22ID:68av+k9D >>139
小便用トイレだと赤外線で退出を探知して水を流してくれるものもある
小便用トイレだと赤外線で退出を探知して水を流してくれるものもある
143デフォルトの名無しさん
2022/06/06(月) 00:23:36.15ID:1jBvtBty フラッシュってのはハードディスクにどこまでデータ書いたか正規化する目的で行うから、フラッシュしないで停電モードでクラッシュすると、復旧したときに書いてたデータはゼロバイトのままだったりするが、こまめにフラッシュでデータを確定申告してる場合は書いた分がきちんと残ってたりする
144デフォルトの名無しさん
2022/06/06(月) 00:26:15.98ID:Wu7kw3Sh これからは税務署に追徴課税されないように足繁く通うことにします。
145デフォルトの名無しさん
2022/06/06(月) 00:28:00.96ID:1jBvtBty ま、無停電装置つけてたり電源不足などでHDDが頻繁に切断される環境でなければ問題ないけどね
146デフォルトの名無しさん
2022/06/06(月) 00:28:38.87ID:68av+k9D 一休はすでに縄を持って待ち構えてくれているのだから、義満が虎を屏風から追い出せばいいだけ
簡単なことだろ
簡単なことだろ
147デフォルトの名無しさん
2022/06/06(月) 02:46:25.01ID:ETmHHhEk 誤解している人が多そうだけど
fflush()はC標準ライブラリの中のバッファリングデータを全て吐き出すだけであって
システムコールでいえばwriteするだけだよ
一方でカーネルがディスクなどに書き出すのを保証するのはシステムコールではsync/fsyncであってこれはfflush()しても行われない別のもの
fflush()はC標準ライブラリの中のバッファリングデータを全て吐き出すだけであって
システムコールでいえばwriteするだけだよ
一方でカーネルがディスクなどに書き出すのを保証するのはシステムコールではsync/fsyncであってこれはfflush()しても行われない別のもの
14859
2022/06/06(月) 03:12:54.60ID:hkI7oR+t 遅レスすいません。
右辺値参照周りを自分でも見直してきたんですが、
最終的に「vecの要素」に所有権を押し付けるコードは↓で正しいのでしょうか?
void add(vector<int> &&x){
vec.push_back(std::move(x));
};
・std::forwardを使う場合は、型がテンプレートの場合(フォワーディング参照の場合)に使うのが一般的であって、
上では具体的な型(vector<int>)を指定しているので、forwardを使う場合に当てはまらない。
・vector<int> &&xとして引数を受け取っても(右辺値参照として引数を受け取っても)、
右辺値参照自体は左辺値になるので、
vec.push_back(x)としてしまうと、呼ばれるpush_backは push_back(const T&)であり、所有権が移譲されない。
なので、ここでもmoveする必要がある(vec.push_back(std::move(x))
この理解であってますか?
右辺値参照周りを自分でも見直してきたんですが、
最終的に「vecの要素」に所有権を押し付けるコードは↓で正しいのでしょうか?
void add(vector<int> &&x){
vec.push_back(std::move(x));
};
・std::forwardを使う場合は、型がテンプレートの場合(フォワーディング参照の場合)に使うのが一般的であって、
上では具体的な型(vector<int>)を指定しているので、forwardを使う場合に当てはまらない。
・vector<int> &&xとして引数を受け取っても(右辺値参照として引数を受け取っても)、
右辺値参照自体は左辺値になるので、
vec.push_back(x)としてしまうと、呼ばれるpush_backは push_back(const T&)であり、所有権が移譲されない。
なので、ここでもmoveする必要がある(vec.push_back(std::move(x))
この理解であってますか?
149デフォルトの名無しさん
2022/06/06(月) 08:55:53.89ID:Ug3DHjCK150デフォルトの名無しさん
2022/06/06(月) 09:02:16.31ID:Ug3DHjCK151デフォルトの名無しさん
2022/06/06(月) 10:28:12.30ID:x36Ky4fa WinだとFileFlushBuffersだけで完結する
152デフォルトの名無しさん
2022/06/06(月) 10:28:30.66ID:0alNkgKE noexceptの有無で動作が変わるなんてC++ムズすぎィ!
154デフォルトの名無しさん
2022/06/06(月) 11:43:05.77ID:Ug3DHjCK まあ原因と結果が全然離れた別の場所で起こるっていう意味では難易度高いとは思う
155デフォルトの名無しさん
2022/06/06(月) 12:41:54.06ID:jOQJjNZV >>148
あってる
あってる
156デフォルトの名無しさん
2022/06/06(月) 21:20:45.44ID:FY57Ayyt >>126
この国は累進課税なのでそのラインは難しいですね
この国は累進課税なのでそのラインは難しいですね
157デフォルトの名無しさん
2022/06/08(水) 00:14:11.77ID:0qhQo4nk158デフォルトの名無しさん
2022/06/08(水) 00:17:03.29ID:xZpQpCco moveをやれるヤツはmoveをやる勇気があるヤツだけだ
159デフォルトの名無しさん
2022/06/08(水) 22:59:00.34ID:lI0dIi5c >>138
話をそらすでないは;;;
通常のキャラクタ型デバイスならfflush()せずともバッファ内容がどんどん出ていって
受信側(他アプリ)に伝わるやんけ
fflush()全然必須じゃないやんけ
fflush()に関してはやっぱ受信側の都合も糞も無いやんけ;;;
んまー今日日の計算機は速いから、世迷言てんこ盛りの呪術指向プログラミングでも
比較的まともっぽく動くが、
話をそらすでないは;;;
通常のキャラクタ型デバイスならfflush()せずともバッファ内容がどんどん出ていって
受信側(他アプリ)に伝わるやんけ
fflush()全然必須じゃないやんけ
fflush()に関してはやっぱ受信側の都合も糞も無いやんけ;;;
んまー今日日の計算機は速いから、世迷言てんこ盛りの呪術指向プログラミングでも
比較的まともっぽく動くが、
160デフォルトの名無しさん
2022/06/08(水) 23:03:01.67ID:lI0dIi5c fflush()にはフロー制御で止まっている送信を動かす力は無いし、
ブロック型デバイスの書き込みのトリガーになる保証は無いしで
やっぱ使いどころは>>131みたいに多対1の書き込み(dstが同じ)というケースでの論理的な書き込み順序保証ぐらいしか無さげ
ブロック型デバイスの書き込みのトリガーになる保証は無いしで
やっぱ使いどころは>>131みたいに多対1の書き込み(dstが同じ)というケースでの論理的な書き込み順序保証ぐらいしか無さげ
161デフォルトの名無しさん
2022/06/08(水) 23:39:12.93ID:TQgrAlst >>159
水に流せ
水に流せ
162デフォルトの名無しさん
2022/06/09(木) 19:04:36.80ID:d61AFL9R 受信側の都合どうこうの話は知らんが
>通常のキャラクタ型デバイスならfflush()せずともバッファ内容がどんどん出ていって
それは送信側がどんどん送り出している場合でしょ
>通常のキャラクタ型デバイスならfflush()せずともバッファ内容がどんどん出ていって
それは送信側がどんどん送り出している場合でしょ
163デフォルトの名無しさん
2022/06/09(木) 19:12:48.98ID:6LGi7Ubo 高機能トイレしか使ったことない人は、何もしなくても離席したら勝手に排泄物が流されていくと思っているからね
164デフォルトの名無しさん
2022/06/09(木) 19:16:36.26ID:ftpPDZQh 停電おこったことないんだろうね
165デフォルトの名無しさん
2022/06/09(木) 21:05:58.36ID:Y+xZp6wU トイレの水流すのもflushだったなwww
166デフォルトの名無しさん
2022/06/09(木) 21:14:08.39ID:0SCWcBb2 むしろコンピュータ用語のflushの方がトイレからの連想
167デフォルトの名無しさん
2022/06/10(金) 18:08:30.15ID:PT4Yy0z8 flushつったらズリセンだろ
168デフォルトの名無しさん
2022/06/10(金) 18:15:06.01ID:q3uEdydr 長時間ストリーミング書き込み時にFileFlushBuffersコールしてなかった停電時の悲劇
169128
2022/06/11(土) 13:05:09.88ID:qY+svW4r なんとなく分かりましたが、C言語でfflush()を使っていなかったので困ることもなさそうです
改行は'\n'を使ってもう少し勉強を進めてから改めて皆さんのレスを読み返そうと思います
返事が遅くなりました、ありがとうございました
改行は'\n'を使ってもう少し勉強を進めてから改めて皆さんのレスを読み返そうと思います
返事が遅くなりました、ありがとうございました
170デフォルトの名無しさん
2022/06/11(土) 15:25:15.53ID:b1p/w9+9 https://ideone.com/P9fDXn
コンパイル通らねー。
コンパイル通らねー。
171デフォルトの名無しさん
2022/06/11(土) 21:16:14.33ID:ZeuO2q0P172デフォルトの名無しさん
2022/06/11(土) 21:25:33.69ID:ZeuO2q0P >>168
左様停電に対して備えたいならI/Oストリームのバッファ階層の操作で満足するのではなくて
ioctlレヴェルの働きかけで掃き出し操作を保証を行うべき、(デバイスによってやるべきことが違う
というわけで論理的思考う能力に乏しい香具師がfflush()万能教にはまっている悪寒、
左様停電に対して備えたいならI/Oストリームのバッファ階層の操作で満足するのではなくて
ioctlレヴェルの働きかけで掃き出し操作を保証を行うべき、(デバイスによってやるべきことが違う
というわけで論理的思考う能力に乏しい香具師がfflush()万能教にはまっている悪寒、
173デフォルトの名無しさん
2022/06/11(土) 21:47:10.33ID:ZeuO2q0P ていうかそもそも馬鹿でかいバッファを用意しておいてから停電を恐れるというのはアレな発想でありまして、
真に停電に備えたいなら馬鹿でかいバッファを備えたデータのストリームとは別に、
どこまで書き込みが終わったかというだけの小さいサイズのジャーナル情報を
こまめに書くというのがファイナルアンサーであって
停電の際はジャーナル情報だけ保証して停電の瞬間に馬鹿でかいバッファ上にあったデータは諦めるのが正しいシステム
停電による処理中データの喪失がどうしても嫌ということなら速度の方を諦めてアンバッファーにするかバッファを小さくしてくだち、
真に停電に備えたいなら馬鹿でかいバッファを備えたデータのストリームとは別に、
どこまで書き込みが終わったかというだけの小さいサイズのジャーナル情報を
こまめに書くというのがファイナルアンサーであって
停電の際はジャーナル情報だけ保証して停電の瞬間に馬鹿でかいバッファ上にあったデータは諦めるのが正しいシステム
停電による処理中データの喪失がどうしても嫌ということなら速度の方を諦めてアンバッファーにするかバッファを小さくしてくだち、
174デフォルトの名無しさん
2022/06/11(土) 21:56:10.36ID:ZeuO2q0P まとめ:
この地球上のどこを探しても停電への備えがこまめなfflush()(笑)ということはありえない
この地球上のどこを探しても停電への備えがこまめなfflush()(笑)ということはありえない
175デフォルトの名無しさん
2022/06/11(土) 22:48:11.94ID:fc6R3/Uh まだ言うか!
176デフォルトの名無しさん
2022/06/11(土) 23:31:57.10ID:pfxnOy19 小さいサイズでもそれが即座に反映だれるとは限らないけどな
停電に備えるならUPSだろ
何がこまめに書くのがファイナルアンサーだよ
突然の電源断で書き込み先のデバイスが壊れる可能性だってあるんだからな
停電に備えるならUPSだろ
何がこまめに書くのがファイナルアンサーだよ
突然の電源断で書き込み先のデバイスが壊れる可能性だってあるんだからな
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
それだと効率が悪すぎてお子様向け
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 戦争は無くならないし殺人は起きるし女はレイプされるし子供は餓死するし
- 女性検診なんでオナニーしてグチョグチョで行ってやる
- 日経時間外、5万円割れ 垂直落下始まる [402859164]
- ( ´・ω・` )朝ですぞー
- 【悲報】男性人気アイドルグループJO1、中国公演中止wwwwwwwwwwwwwwwwwwwwwwwwwww
