次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part135
https://mevius.5ch.net/test/read.cgi/tech/1522495206/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part137
■ このスレッドは過去ログ倉庫に格納されています
2018/07/14(土) 17:53:02.14ID:FOAGvAbs
2018/07/14(土) 17:55:20.65ID:FOAGvAbs
スレ作ってみましたが、これ設定間違ってますか?
ワッチョイほにゃららが出てきてない。
ワッチョイほにゃららが出てきてない。
2018/07/14(土) 18:42:45.47ID:p9pW3bxe
2018/07/14(土) 18:59:13.88ID:tzAF1ivs
ヘタクソかよ
2018/07/14(土) 20:33:07.04
スレ立て苦手か?
2018/07/14(土) 20:48:45.99ID:6fifTYMf
>>1乙
ume
ume
2018/07/14(土) 21:34:02.24ID:xV7EJA5w
前スレの 1N2GRIlb0
ディスクキャッシュに入ってるってずいぶん前からわかってたのに
何でムダな作業をやらせたの?
ディスクキャッシュに入ってるってずいぶん前からわかってたのに
何でムダな作業をやらせたの?
8デフォルトの名無しさん
2018/07/14(土) 21:38:31.07ID:1N2GRIlb このスレの知恵遅れたちが
どんだけ頭悪いのかよおく分かっただろ
同じ計算機で2秒で終わるような読みこみ処理で
数十秒かかるとかいってたワケだからな
相当オツムが弱い
このスレは知恵遅れしかいない
どんだけ頭悪いのかよおく分かっただろ
同じ計算機で2秒で終わるような読みこみ処理で
数十秒かかるとかいってたワケだからな
相当オツムが弱い
このスレは知恵遅れしかいない
9デフォルトの名無しさん
2018/07/14(土) 21:41:09.27ID:1N2GRIlb いまになって
分かってたとかいいだしてるしな
ディスク読む時間に知ったかぶって調子こいてた知恵遅れは
どこいったの?
分かってたとかいいだしてるしな
ディスク読む時間に知ったかぶって調子こいてた知恵遅れは
どこいったの?
2018/07/14(土) 21:42:37.85ID:xV7EJA5w
ん?
何度も指摘してたけど
何度も指摘してたけど
11デフォルトの名無しさん
2018/07/14(土) 21:43:13.23ID:1N2GRIlb 嘘コケ
ハゲ
知恵遅れは前のスレ読んで出直してこいや
ハゲ
知恵遅れは前のスレ読んで出直してこいや
12デフォルトの名無しさん
2018/07/14(土) 21:45:09.81ID:1N2GRIlb ハードディスクの内側読みこんで読みこみ時間がどうとかいってた
バカいる?
バカいる?
2018/07/14(土) 21:45:30.57ID:xV7EJA5w
測らせるならキャッシュに無い状態にしないとアホだろ
2018/07/14(土) 21:46:18.02ID:xV7EJA5w
はじめはキャッシュに入って無いんだから
15デフォルトの名無しさん
2018/07/14(土) 21:46:29.73ID:1N2GRIlb むしろなバカが指南した方法やコードでは
キャッシュのっかても数十秒かかってたってことだぞ
キャッシュのっかても数十秒かかってたってことだぞ
16デフォルトの名無しさん
2018/07/14(土) 21:48:09.38ID:1N2GRIlb このスレで教えを乞うてるヤツは
何度もデバッグで走らせてるハズのに
知恵遅れの方法やコード数十秒かかるってことだ
オレのは2秒かからない
知恵遅れは息してる?
何度もデバッグで走らせてるハズのに
知恵遅れの方法やコード数十秒かかるってことだ
オレのは2秒かからない
知恵遅れは息してる?
2018/07/14(土) 21:48:37.29ID:xV7EJA5w
測定した結果は
fgetsの17秒とreadの1〜2秒しか無い
普通に読むだけで数十秒なんて測定結果は無い
fgetsの17秒とreadの1〜2秒しか無い
普通に読むだけで数十秒なんて測定結果は無い
18デフォルトの名無しさん
2018/07/14(土) 21:49:17.53ID:1N2GRIlb 読み方次第で差は歴然と出る
オレの方法は最適な方法だからな
オレの方法は最適な方法だからな
2018/07/14(土) 21:50:16.06ID:xV7EJA5w
fgetsは速いとか言ってなかった?
今遅いことが証明されてるのはfgetsだけ
今遅いことが証明されてるのはfgetsだけ
20デフォルトの名無しさん
2018/07/14(土) 21:50:39.19ID:1N2GRIlb やっぱり知恵遅れはなにも分かってないわ
まず自分が呼んでる関数がどんな動作してるか分かってないからな
まず自分が呼んでる関数がどんな動作してるか分かってないからな
2018/07/14(土) 21:51:14.96ID:xV7EJA5w
何の工夫もないただのreadで2秒なら、
他の方法も読むだけなら2秒
他の方法も読むだけなら2秒
22デフォルトの名無しさん
2018/07/14(土) 21:51:37.65ID:1N2GRIlb やっぱりこのスレは
相当な知恵遅れしかいない
CもC++も何も分かってない
それ以前の問題
相当な知恵遅れしかいない
CもC++も何も分かってない
それ以前の問題
23デフォルトの名無しさん
2018/07/14(土) 21:53:57.67ID:1N2GRIlb 測定結果ででてるからな
相当な速度で速く読みこみたいのに標準関数のファイルポインタ使う知恵遅れなんか
まずいない
ファイルポインタ使う標準関数は
このスレにいる知恵遅れにでも簡単に使えるように
openやread使って使いやすく作ってあるだけだからな
相当な速度で速く読みこみたいのに標準関数のファイルポインタ使う知恵遅れなんか
まずいない
ファイルポインタ使う標準関数は
このスレにいる知恵遅れにでも簡単に使えるように
openやread使って使いやすく作ってあるだけだからな
2018/07/14(土) 21:54:36.27ID:xV7EJA5w
fgetsが速いとか言ってたアホが
readとfreadの差を強調する
オーバーヘッドのオーダーは1
読み込みバッファが常識的なサイズであれば無視できる
fgetsのオーバーヘッドのオーダーはn
バッファサイズによらずオーバーヘッドは無視できない
readとfreadの差を強調する
オーバーヘッドのオーダーは1
読み込みバッファが常識的なサイズであれば無視できる
fgetsのオーバーヘッドのオーダーはn
バッファサイズによらずオーバーヘッドは無視できない
25デフォルトの名無しさん
2018/07/14(土) 21:55:42.62ID:1N2GRIlb まずfreadもバッファもってるのすら分かってないからな
2018/07/14(土) 21:56:36.36ID:xV7EJA5w
freadで測定させれば証明出来るが
で、
もともと測りたかったディスクアクセスの時間は?
まさかキャッシュに入った状態が普通と考えてるわけではあるまい
で、
もともと測りたかったディスクアクセスの時間は?
まさかキャッシュに入った状態が普通と考えてるわけではあるまい
27デフォルトの名無しさん
2018/07/14(土) 21:56:51.40ID:1N2GRIlb ファイルポインタがもってるバッファから
いちいちこっちのバッファにコピーしてんのに
まずその程度のことすら分かってない
いちいちこっちのバッファにコピーしてんのに
まずその程度のことすら分かってない
28デフォルトの名無しさん
2018/07/14(土) 21:57:27.49ID:1N2GRIlb 相当頭が悪いのが
知ったかぶってるのは分かる
知ったかぶってるのは分かる
2018/07/14(土) 21:58:58.41ID:xV7EJA5w
測って見ればわかるって
で肝心の解析コードはどうした?
糞遅いコードを自信満々にあげてたけど
で肝心の解析コードはどうした?
糞遅いコードを自信満々にあげてたけど
30デフォルトの名無しさん
2018/07/14(土) 22:00:01.80ID:1N2GRIlb クソ遅い?
オレのコードを動かして速度測定したの?
オレより10倍以上低速に作る才能がある知恵遅れのくせに
オレのコードを動かして速度測定したの?
オレより10倍以上低速に作る才能がある知恵遅れのくせに
2018/07/14(土) 22:03:31.04ID:xV7EJA5w
糞遅い
間違い無い
お前の環境で15GBのテキストを作って解析時間を測ってみな
間違い無い
お前の環境で15GBのテキストを作って解析時間を測ってみな
32デフォルトの名無しさん
2018/07/14(土) 22:10:21.76ID:1N2GRIlb とりあえず
知恵遅れはほっといて
テストデータをジェネレートするコードを
前スレの内容読んでテキトーに作った
https://ideone.com/cPZvWL
baka_genでコンパイルすれば大量のテストデータを作ってくれる優れものだ
※ 指定ギガバイト数越えたら、1つのセクション書ききったら停止する
使い方
Usage:baka_gen <fileparh> <GB size>
出力されてる形式に問題がないかみといてくれ
形式が分からないと解析処理を作りようがない
明日からこのテストデータを解析する処理を作る
知恵遅れはほっといて
テストデータをジェネレートするコードを
前スレの内容読んでテキトーに作った
https://ideone.com/cPZvWL
baka_genでコンパイルすれば大量のテストデータを作ってくれる優れものだ
※ 指定ギガバイト数越えたら、1つのセクション書ききったら停止する
使い方
Usage:baka_gen <fileparh> <GB size>
出力されてる形式に問題がないかみといてくれ
形式が分からないと解析処理を作りようがない
明日からこのテストデータを解析する処理を作る
33デフォルトの名無しさん
2018/07/14(土) 22:11:40.89ID:1N2GRIlb まず知恵億れはなにと比較して遅いとか書かないからな
オレは知恵遅れが書いたコードより少なくとも10倍以上速い処理を書いてる
オレは知恵遅れが書いたコードより少なくとも10倍以上速い処理を書いてる
>>32
なんか error がいっぱい出ているようだが…
なんか error がいっぱい出ているようだが…
2018/07/14(土) 22:17:16.55ID:xV7EJA5w
15GBのテキストの解析で8.6秒
これを越えればいい
これを越えればいい
36デフォルトの名無しさん
2018/07/14(土) 22:17:46.97ID:1N2GRIlb なんのエラー書けよ
エラーとかいわれても分かるワケがないだろ
ヴォケ
エラーとかいわれても分かるワケがないだろ
ヴォケ
37デフォルトの名無しさん
2018/07/14(土) 22:18:22.90ID:1N2GRIlb で、そのコードはったのかオマエは
2018/07/14(土) 22:19:29.69ID:xV7EJA5w
40デフォルトの名無しさん
2018/07/14(土) 22:20:14.44ID:1N2GRIlb 8.6秒とかテキトーなことなら
なんとでもいえるからな
どんなファイル読んで
どんなソース作ったわけ?
ファイル形式ちゃんとわかってんの
なんとでもいえるからな
どんなファイル読んで
どんなソース作ったわけ?
ファイル形式ちゃんとわかってんの
41デフォルトの名無しさん
2018/07/14(土) 22:22:08.48ID:1N2GRIlb 適切なインクルードファイルを上に書けば
間違いなく通る
ココで教えを乞うているバカですら
それぐらいのことやってる
オマエはそれ未満だ
間違いなく通る
ココで教えを乞うているバカですら
それぐらいのことやってる
オマエはそれ未満だ
2018/07/14(土) 22:26:38.36ID:xV7EJA5w
テキストのほとんどが数値の行
10%の割合でx, yの行
セクションは全部で100個くらい
数値は乱数で作成した
実際の分布を考えて、
桁数によって出現率を変えてある
異常データでも不正アクセスしない
文字コードはS-JIS
改行はLFのみ
10%の割合でx, yの行
セクションは全部で100個くらい
数値は乱数で作成した
実際の分布を考えて、
桁数によって出現率を変えてある
異常データでも不正アクセスしない
文字コードはS-JIS
改行はLFのみ
2018/07/14(土) 22:29:41.45ID:xV7EJA5w
数値は符号付き32bitに収まる値で
printf("%d", n);
で出力される文字列と同じ書式
printf("%d", n);
で出力される文字列と同じ書式
45デフォルトの名無しさん
2018/07/14(土) 22:31:59.85ID:1N2GRIlb46デフォルトの名無しさん
2018/07/14(土) 22:33:55.81ID:1N2GRIlb なんか知恵遅れがバカみたいなレスをブツブツ書いてるし
ごちゃごちゃいってないでコードあげたらどうだ
ごちゃごちゃいってないでコードあげたらどうだ
2018/07/14(土) 22:35:19.66ID:xV7EJA5w
シングルスレッド、順番に全文字スキャンの処理で
処理時間は1文字平均約2クロック (Haswell)
最適化的にはこれが出発点
さらに高速化する価値がある処理であれば
マルチスレッド,GPU, AVX ...
まだまだ高速化の余地はある
処理時間は1文字平均約2クロック (Haswell)
最適化的にはこれが出発点
さらに高速化する価値がある処理であれば
マルチスレッド,GPU, AVX ...
まだまだ高速化の余地はある
48デフォルトの名無しさん
2018/07/14(土) 22:36:12.81ID:1N2GRIlb また知恵遅れがテキトーなこといってるしな
2018/07/14(土) 23:49:17.06ID:5xFWH4XP
残念ながらクソシンタックスが増えれば増えるほどアホでもテクニカルターム使って
アホと思われない活動が可能になって行くんだよ。
アホと思われない活動が可能になって行くんだよ。
2018/07/15(日) 00:49:14.70ID:p2p9fdhp
>>32,45
サンプルデータ作成コードありがとうございます。
実行してみましたが面白いですねこれ。
完成したら数十ギガのデータ作って遊んでみたい。
サンプルデータができて説明しやすくなったので色々補足させていただきます。
ちょっと細かい内容になるので、今あるサンプルデータ作成コードを
使用されても問題ありません。
文字コードはutf8 or euc-jpの両方を想定しています。
ファイルの1行目に下記行が一度だけ出てきます。
// タイトル、倍率(mag)。(この係数を使ってCの数値から割る、正の整数。unsigned int)
::fprintf(fp, "%s %d\x0a", "TITLE_NAME", 2000);
具体的には ttps://ideone.com/hi8bYd の64行目に上記が入ります。
Aのセクション集計値は個数が0のときがある。その時はテキスト行だけで終わり。
0 0 1 Jul〜
TEXT TEXT TEXT TEXT
Bのテキスト行は日本語(2byte)が来ることがある。
>つづく
サンプルデータ作成コードありがとうございます。
実行してみましたが面白いですねこれ。
完成したら数十ギガのデータ作って遊んでみたい。
サンプルデータができて説明しやすくなったので色々補足させていただきます。
ちょっと細かい内容になるので、今あるサンプルデータ作成コードを
使用されても問題ありません。
文字コードはutf8 or euc-jpの両方を想定しています。
ファイルの1行目に下記行が一度だけ出てきます。
// タイトル、倍率(mag)。(この係数を使ってCの数値から割る、正の整数。unsigned int)
::fprintf(fp, "%s %d\x0a", "TITLE_NAME", 2000);
具体的には ttps://ideone.com/hi8bYd の64行目に上記が入ります。
Aのセクション集計値は個数が0のときがある。その時はテキスト行だけで終わり。
0 0 1 Jul〜
TEXT TEXT TEXT TEXT
Bのテキスト行は日本語(2byte)が来ることがある。
>つづく
2018/07/15(日) 00:54:03.20ID:p2p9fdhp
QQ行の説明
QQ subname -1 0 0 1 -21000000 600000 2
→この行が無いファイルもある。
→7,8カラムは1行目の倍率数字で割る(数値行と同じ計算)
→3〜6カラムは -1, 0, 1, のいずれか。この4つの組み合わせであとで計算に使うことがある。
1 0 0 1 →TYPE_A
0 1 -1 0 →TYPE_B
-1 0 0 -1 →TYPE_C
0 -1 1 0 →TYPE_D
-1 0 0 1 →TYPE_E
0 -1 -1 0 →TYPE_F
1 0 0 -1 →TYPE_G
0 1 1 0 →TYPE_H
→9カラム目は正の整数。(unsigned int)
→下記6つのバリエーションがあります。
QQ subname
QQ subname c
QQ subname -1 0 0 1 -21000000 600000
QQ subname -1 0 0 1 -21000000 600000 2
QQ subname c -1 0 0 1 -21000000 600000
QQ subname c -1 0 0 1 -21000000 600000 2
※cはcという文字列固定
※1つのファイルに存在するのはいずれか1つのフォーマット
そして少し複雑なのが、上記QQ行は先頭のQQがなくなってx, y行に存在することがあります。
1つのファイル内でQQ行とx, yの後ろにくるパターンの両方は存在せず、片方が出てきたらもう片方は出てきません。
x, yと同じ行にくる場合のフォーマットもQQ行の規則と同じです。
x 1 234 subname -1 0 0 1 -21000000 600000 2
y 2 234 subname -1 0 0 1 -21000000 600000 2
>つづく
QQ subname -1 0 0 1 -21000000 600000 2
→この行が無いファイルもある。
→7,8カラムは1行目の倍率数字で割る(数値行と同じ計算)
→3〜6カラムは -1, 0, 1, のいずれか。この4つの組み合わせであとで計算に使うことがある。
1 0 0 1 →TYPE_A
0 1 -1 0 →TYPE_B
-1 0 0 -1 →TYPE_C
0 -1 1 0 →TYPE_D
-1 0 0 1 →TYPE_E
0 -1 -1 0 →TYPE_F
1 0 0 -1 →TYPE_G
0 1 1 0 →TYPE_H
→9カラム目は正の整数。(unsigned int)
→下記6つのバリエーションがあります。
QQ subname
QQ subname c
QQ subname -1 0 0 1 -21000000 600000
QQ subname -1 0 0 1 -21000000 600000 2
QQ subname c -1 0 0 1 -21000000 600000
QQ subname c -1 0 0 1 -21000000 600000 2
※cはcという文字列固定
※1つのファイルに存在するのはいずれか1つのフォーマット
そして少し複雑なのが、上記QQ行は先頭のQQがなくなってx, y行に存在することがあります。
1つのファイル内でQQ行とx, yの後ろにくるパターンの両方は存在せず、片方が出てきたらもう片方は出てきません。
x, yと同じ行にくる場合のフォーマットもQQ行の規則と同じです。
x 1 234 subname -1 0 0 1 -21000000 600000 2
y 2 234 subname -1 0 0 1 -21000000 600000 2
>つづく
2018/07/15(日) 00:58:25.78ID:p2p9fdhp
最後にRR行があります。
これもQQ同様x, yの次の行にあったりなかったりします。
QQとRRが一緒に出てくることは無いと思います。
フォーマットは「RR 正の整数」でQQのようにx,yの後ろに来ることはありません。
x 1 2
RR 3
11 11 11 11
11 11 11 11
↓QQ、RRが一緒に出てくることは無い。
x 1 2
QQ subname c -1 0 0 1 -21000000 600000
RR 3
↓これも無い
x 1 2 RR 3
>つづく
これもQQ同様x, yの次の行にあったりなかったりします。
QQとRRが一緒に出てくることは無いと思います。
フォーマットは「RR 正の整数」でQQのようにx,yの後ろに来ることはありません。
x 1 2
RR 3
11 11 11 11
11 11 11 11
↓QQ、RRが一緒に出てくることは無い。
x 1 2
QQ subname c -1 0 0 1 -21000000 600000
RR 3
↓これも無い
x 1 2 RR 3
>つづく
2018/07/15(日) 01:02:10.59ID:p2p9fdhp
参考として、ファイルを読み込んだら下記のt_all_dbのような構造体にすべて保管しようと考えています。
型や名前は最適なものに変更されて問題ありませんし、他に最適な
格納方法があればそれでも問題ありません。
typedef struct __tag_rr_db {
unsigned int rr_num;
} t_rr_db;
typedef struct __tag_qq_db {
char qq_name; //subname
bool is_c; //cがあるかないか
QQ_TYPE qq_type;
float numbers; // 2つの数字のリスト(vector?)
unsigned int count; //最後尾の数字
} t_qq_db;
typedef struct __tag_elem_db {
ELEM_TYPE elem_type; // x or y
unsigned int no; // x or yの番号
unsigned int num_line_count;
t_qq_db qq_db;
t_rr_db rr_db;
numbers; //数値行のリスト(vector?)
} t_elem_db;
typedef struct __tag_section_db {
unsigned char name;
unsigned int num_1;
unsigned int num_2;
unsigned int text_line_count;
texts; //テキスト行(vector?)
t_elem_db elem_dbs; //elem_dbのリスト
} t_section_db;
typedef struct __tag_all_db {
title_name; mag; section_dbs; //section_dbのリスト
} t_all_db;
型や名前は最適なものに変更されて問題ありませんし、他に最適な
格納方法があればそれでも問題ありません。
typedef struct __tag_rr_db {
unsigned int rr_num;
} t_rr_db;
typedef struct __tag_qq_db {
char qq_name; //subname
bool is_c; //cがあるかないか
QQ_TYPE qq_type;
float numbers; // 2つの数字のリスト(vector?)
unsigned int count; //最後尾の数字
} t_qq_db;
typedef struct __tag_elem_db {
ELEM_TYPE elem_type; // x or y
unsigned int no; // x or yの番号
unsigned int num_line_count;
t_qq_db qq_db;
t_rr_db rr_db;
numbers; //数値行のリスト(vector?)
} t_elem_db;
typedef struct __tag_section_db {
unsigned char name;
unsigned int num_1;
unsigned int num_2;
unsigned int text_line_count;
texts; //テキスト行(vector?)
t_elem_db elem_dbs; //elem_dbのリスト
} t_section_db;
typedef struct __tag_all_db {
title_name; mag; section_dbs; //section_dbのリスト
} t_all_db;
2018/07/15(日) 01:59:33.70ID:lbsq5rUe
そろそろ「ぼくちんのログ解析ソフトを名無しどもに作らせるスレ」でも立ててそっちでやってくれないか
2018/07/15(日) 02:07:19.29ID:eimWnm2X
いい加減にしろよお前
土方コーダに発注する気分でてめえのクソログの仕様ドヤ顔で書いてんじゃねえよ
ありったけスレ私物化して相談しまくったんだからそろそろ自分の手と頭を動かしたらどうだ
土方コーダに発注する気分でてめえのクソログの仕様ドヤ顔で書いてんじゃねえよ
ありったけスレ私物化して相談しまくったんだからそろそろ自分の手と頭を動かしたらどうだ
2018/07/15(日) 02:58:06.76ID:F1eG7opL
ID:p2p9fdhp さん、別のスレに移動を願います。
2018/07/15(日) 04:38:00.97ID:deogSIs/
ume進行だと思えば悪くない
続けて
ていうか徹底的にやれ
ていうかディスクキャッシュのサイズと読込サイズの理想的な関係は微妙なもんじゃわ;
HDD周りのキャッシュには次の3階層ある
(1) 1トラック内のランダムアクセスではHDDだと平均的に1/2回転分の時間待たされるから、
HDD側であらかじめ1トラック分はキャッシュする
(2) シークでは今日日のCPUの速度からみて地質年代レヴェルの遅延が生じるから、
OSにとって都合の良いサイズ(ページサイズとか)を単位とする単位でキャッシュされる
(3) で、その上に標準入出力のバッファがある(setvbuf()で調整できるのはこれ
SSDだと(1)が書き換え回数最適化絡みのキャッシュに置き換わるが、(2)や(3)は同じ
高速化には(3)のバッファリングやアプリ側の処理というものと、(2)と(1)のキャッシングをいかに並行動作させるかがキモすぐる
fgets()とfread()の速度差は、単一ファイルをシーケンシャルアクセスするときは言うほど開きはない(上のしくみから導ける
一方、複数ファイルを交互にアクセスしたりHDDのまちまちな場所をランダムアクセスしだすとたちまち顕在化する(これも上のしくみから導ける
単一ファイルの読込であっても、アプリがファイルの一部を読み込んで考え込む、の繰り返しなパターンならば
アプリ側のマルチスレッド化が有効な「こともある」 今回は該当しないと思うが、、
続けて
ていうか徹底的にやれ
ていうかディスクキャッシュのサイズと読込サイズの理想的な関係は微妙なもんじゃわ;
HDD周りのキャッシュには次の3階層ある
(1) 1トラック内のランダムアクセスではHDDだと平均的に1/2回転分の時間待たされるから、
HDD側であらかじめ1トラック分はキャッシュする
(2) シークでは今日日のCPUの速度からみて地質年代レヴェルの遅延が生じるから、
OSにとって都合の良いサイズ(ページサイズとか)を単位とする単位でキャッシュされる
(3) で、その上に標準入出力のバッファがある(setvbuf()で調整できるのはこれ
SSDだと(1)が書き換え回数最適化絡みのキャッシュに置き換わるが、(2)や(3)は同じ
高速化には(3)のバッファリングやアプリ側の処理というものと、(2)と(1)のキャッシングをいかに並行動作させるかがキモすぐる
fgets()とfread()の速度差は、単一ファイルをシーケンシャルアクセスするときは言うほど開きはない(上のしくみから導ける
一方、複数ファイルを交互にアクセスしたりHDDのまちまちな場所をランダムアクセスしだすとたちまち顕在化する(これも上のしくみから導ける
単一ファイルの読込であっても、アプリがファイルの一部を読み込んで考え込む、の繰り返しなパターンならば
アプリ側のマルチスレッド化が有効な「こともある」 今回は該当しないと思うが、、
2018/07/15(日) 05:01:06.13ID:EFpmUWpC
てな議論はベアメタルでやるならともかく
依存処理系では特定OSの話になるし
抽象化されたハードウエアじゃ特性を仮定すること自体ナンセンス
依存処理系では特定OSの話になるし
抽象化されたハードウエアじゃ特性を仮定すること自体ナンセンス
2018/07/15(日) 06:33:31.92ID:F1eG7opL
60デフォルトの名無しさん
2018/07/15(日) 11:31:30.36ID:Y0/Ay92k unsigned int l = -1;
cout << l << endl;
cout << (signed int)l << endl;
⇒
4294967295
-1
int m = 4294967295;
cout << m << endl;
unsigned int n = 4294967295;
cout << n << endl;
⇒
-1
4294967295
cout << l << endl;
cout << (signed int)l << endl;
⇒
4294967295
-1
int m = 4294967295;
cout << m << endl;
unsigned int n = 4294967295;
cout << n << endl;
⇒
-1
4294967295
61デフォルトの名無しさん
2018/07/15(日) 11:32:24.73ID:Y0/Ay92k62デフォルトの名無しさん
2018/07/15(日) 11:45:15.02ID:Y0/Ay92k http://codepad.org/4odTQaly
↑は、ロベールの本に載っているコードです。
friend class ValueFactory;
//friend Value* ValueFactory::New(int n) const;
↑これを
friend class ValueFactory;
//friend Value* ValueFactory::New(int n) const;
と変更するとなぜコンパイルエラーになってしまうのでしょうか?
ロベールの本には、「不完全型」というのを利用する必要があると書いてあります。
friend class ValueFactory;
↑これはなぜ「不完全型」を使わなくてもOKなのでしょうか?
↑は、ロベールの本に載っているコードです。
friend class ValueFactory;
//friend Value* ValueFactory::New(int n) const;
↑これを
friend class ValueFactory;
//friend Value* ValueFactory::New(int n) const;
と変更するとなぜコンパイルエラーになってしまうのでしょうか?
ロベールの本には、「不完全型」というのを利用する必要があると書いてあります。
friend class ValueFactory;
↑これはなぜ「不完全型」を使わなくてもOKなのでしょうか?
2018/07/15(日) 11:51:25.65ID:kDEFN2k+
解釈が間違ってる
ValueFactoryの実体を作って返すためにはすでに定義が分かってないといけない(完全型でないといけない
対してfriend宣言は名前だけ分かってればいい(定義がまだ無い(=不完全型)でいい
というだけの話
ValueFactoryの実体を作って返すためにはすでに定義が分かってないといけない(完全型でないといけない
対してfriend宣言は名前だけ分かってればいい(定義がまだ無い(=不完全型)でいい
というだけの話
64はちみつ餃子 ◆8X2XSCHEME
2018/07/15(日) 11:59:00.99ID:HERu1+Fl >>61
暗黙のキャストのせい。
整数リテラルに型を表す接尾辞がつかない場合は原則として int として解釈されるけど、
int の範囲より大きい場合はそれを表せる最低限の整数型として解釈されるんだったはず。
整数型の初期化 (代入) の右辺に現れた値が左辺の型で表せるときはそのままの値であることが保証されるが、
そうでないときは一定の規則に従って縮小される。
縮小の仕方は、
左辺が unsigned のときは、左辺の型が表せる最大値に 1 足した数で右辺の modulo を取った値が左辺に入る。
左辺が signed のときは未定義。
なので、 (int が 32 ビットの大きさをもつとき) unsigned int l = -1; が 4294967295 になるのは規格通りだが、
int m = 4294967295; が -1 になるのは保証されない。
規格を確認せずに記憶で書いてるので、
もし間違ってたら誰か指摘よろー。
暗黙のキャストのせい。
整数リテラルに型を表す接尾辞がつかない場合は原則として int として解釈されるけど、
int の範囲より大きい場合はそれを表せる最低限の整数型として解釈されるんだったはず。
整数型の初期化 (代入) の右辺に現れた値が左辺の型で表せるときはそのままの値であることが保証されるが、
そうでないときは一定の規則に従って縮小される。
縮小の仕方は、
左辺が unsigned のときは、左辺の型が表せる最大値に 1 足した数で右辺の modulo を取った値が左辺に入る。
左辺が signed のときは未定義。
なので、 (int が 32 ビットの大きさをもつとき) unsigned int l = -1; が 4294967295 になるのは規格通りだが、
int m = 4294967295; が -1 になるのは保証されない。
規格を確認せずに記憶で書いてるので、
もし間違ってたら誰か指摘よろー。
2018/07/15(日) 12:01:48.69ID:WB6myqsz
c++で文字列のバイナリ読み書きで質問があります
vector<string> moji = {"aaaaaa", "bbbbbb", "ccccccccc"};
ofstream ofs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
for (int i = 0; i <= 2; i++) {
ofs2.write(moji[i].c_str(), strlen(moji[i].c_str()));
}
書き込みは、エラー無くできるのですが
ifstream ifs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
for (int i = 0; i <= 2; i++) {
ifs2.read((char*)&moji[i], strlen(moji[i].c_str()));
cout << "(" << i << ")" << moji[i] << " ";
}
読み込みは、読み込んで表示も出ますが
何かエラーが出ます
どうしてでしょうか
vector<string> moji = {"aaaaaa", "bbbbbb", "ccccccccc"};
ofstream ofs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
for (int i = 0; i <= 2; i++) {
ofs2.write(moji[i].c_str(), strlen(moji[i].c_str()));
}
書き込みは、エラー無くできるのですが
ifstream ifs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
for (int i = 0; i <= 2; i++) {
ifs2.read((char*)&moji[i], strlen(moji[i].c_str()));
cout << "(" << i << ")" << moji[i] << " ";
}
読み込みは、読み込んで表示も出ますが
何かエラーが出ます
どうしてでしょうか
2018/07/15(日) 12:06:41.50ID:lbsq5rUe
書き込んだものに区切り入れてないけどそれでいいの?
67デフォルトの名無しさん
2018/07/15(日) 12:11:00.69ID:Y0/Ay92k2018/07/15(日) 12:12:20.49ID:Y0/Ay92k
69デフォルトの名無しさん
2018/07/15(日) 12:15:07.36ID:Y0/Ay92k コンパイラーについての知識がないと理解しにくい部分でしょうか?
2018/07/15(日) 12:15:22.56ID:WB6myqsz
2018/07/15(日) 12:50:13.08ID:WB6myqsz
とりあえず、区切り入れてgetlineで一行ずつ読み込めました
vector<string> moji = {"aaaaaa", "bbbbbb", "ccccccccc"};
ofstream ofs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
for (int i = 0; i <= 2; i++) {
moji[i] += "\n";
ofs2.write(moji[i].c_str(), strlen(moji[i].c_str()));
}
ifstream ifs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
string temp;
int i = 0;
while (getline(ifs2, temp, '\n')) {
cout << "(" << i << ")" << temp << " ";
i++;
}
これでまたvector<string>に入れたらいいか
c++はHSPとかと違って難しいですね
vector<string> moji = {"aaaaaa", "bbbbbb", "ccccccccc"};
ofstream ofs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
for (int i = 0; i <= 2; i++) {
moji[i] += "\n";
ofs2.write(moji[i].c_str(), strlen(moji[i].c_str()));
}
ifstream ifs2("mojibin.bin", std::ios_base::out | std::ios_base::binary);
string temp;
int i = 0;
while (getline(ifs2, temp, '\n')) {
cout << "(" << i << ")" << temp << " ";
i++;
}
これでまたvector<string>に入れたらいいか
c++はHSPとかと違って難しいですね
2018/07/15(日) 13:00:44.43ID:oGr67yTf
2018/07/15(日) 13:02:49.96ID:oGr67yTf
あとエラー出力は正確に書いてくれないと、コード全部読まないといけないからしんどいです…
2018/07/15(日) 13:18:02.66ID:lbsq5rUe
>>67
C++はそういうコンパイルの仕方しないから
cppごとにオブジェクトファイル(クラスのインスタンスとしてのオブジェクトとかとは別の意味)というのを作ってから
オブジェクトファイル同士のリンクという作業をして目的の実行バイナリを作る
オブジェクトファイルは自分自身で完結してないといけないので、
「ValueFactoryとかいうクラスのポインタ」「ValueFactoryとかいうクラスがfriendだという情報」は持つことが出来るけど
(別のファイルがValueFactoryの実体を持ってると期待して)
ValueFactoryの実体作れとか実体使ってなんかやれ(そういう実行コードを保持しろ)と言われたら困ってしまうってこと
C++はそういうコンパイルの仕方しないから
cppごとにオブジェクトファイル(クラスのインスタンスとしてのオブジェクトとかとは別の意味)というのを作ってから
オブジェクトファイル同士のリンクという作業をして目的の実行バイナリを作る
オブジェクトファイルは自分自身で完結してないといけないので、
「ValueFactoryとかいうクラスのポインタ」「ValueFactoryとかいうクラスがfriendだという情報」は持つことが出来るけど
(別のファイルがValueFactoryの実体を持ってると期待して)
ValueFactoryの実体作れとか実体使ってなんかやれ(そういう実行コードを保持しろ)と言われたら困ってしまうってこと
2018/07/15(日) 13:19:42.19ID:WB6myqsz
2018/07/15(日) 13:42:15.67ID:oGr67yTf
もちろんバイナリ形式でもいいのだけど、その場合は文字列を固定長にするとか、tlv形式で作ってみては?
https://en.m.wikipedia.org/wiki/Type-length-value
https://en.m.wikipedia.org/wiki/Type-length-value
2018/07/15(日) 14:56:48.40ID:p2p9fdhp
大規模ファイルの読み込みについて相談しているものです。
以下調査結果です。
ファイルは上記で13GBのファイル生成したものを使用
https://ideone.com/hi8bYd
@下記コードの結果
https://ideone.com/e9iA5m
512,15 →15秒
1024,7 →7秒
2048,5 →5秒
4096,3 →3秒
8192,2 →2秒
>つづく
以下調査結果です。
ファイルは上記で13GBのファイル生成したものを使用
https://ideone.com/hi8bYd
@下記コードの結果
https://ideone.com/e9iA5m
512,15 →15秒
1024,7 →7秒
2048,5 →5秒
4096,3 →3秒
8192,2 →2秒
>つづく
2018/07/15(日) 14:58:34.48ID:p2p9fdhp
A作成した下記コードでテスト。 →約2秒
https://ideone.com/1YhaLR
(整理できておらず、かなりぐちゃぐちゃなコードですが。。)
内容:freadのみ
B上記Aで、「#define READ_MODE 1」で実行 →約25秒
内容:改行単位にするため、前スレ962の下記Cを対応したつもりのもの
A. 1行全体が連続してバッファに存在しなくてもいい作りにする
B. リングバッファ
C. fseekでファイルポインタを戻してから読み込む
D. あまりをmemcpyでバッファの先頭にコピーしてから読み込む
E. ほか
C上記Aで、「#define READ_MODE 2」で実行 →約60秒
内容:上記B+解析
Dfgetsのみ →約15秒
if((fp=fopen(file_path, "r"))==NULL){
printf("ファイルを開けません。%s",file_path);
return 0;
}
char tdata[10000];
char* data = tdata;
while( fgets(data,10000,fp) != NULL ){
data;
}
上記Aが約2秒なのにBの改行単位のケアで25秒に増加しているので、
まずここの作りがおかしいんだろうなとは思いますが、
何がおかしいのかが、まだわかっていません。
https://ideone.com/1YhaLR
(整理できておらず、かなりぐちゃぐちゃなコードですが。。)
内容:freadのみ
B上記Aで、「#define READ_MODE 1」で実行 →約25秒
内容:改行単位にするため、前スレ962の下記Cを対応したつもりのもの
A. 1行全体が連続してバッファに存在しなくてもいい作りにする
B. リングバッファ
C. fseekでファイルポインタを戻してから読み込む
D. あまりをmemcpyでバッファの先頭にコピーしてから読み込む
E. ほか
C上記Aで、「#define READ_MODE 2」で実行 →約60秒
内容:上記B+解析
Dfgetsのみ →約15秒
if((fp=fopen(file_path, "r"))==NULL){
printf("ファイルを開けません。%s",file_path);
return 0;
}
char tdata[10000];
char* data = tdata;
while( fgets(data,10000,fp) != NULL ){
data;
}
上記Aが約2秒なのにBの改行単位のケアで25秒に増加しているので、
まずここの作りがおかしいんだろうなとは思いますが、
何がおかしいのかが、まだわかっていません。
79デフォルトの名無しさん
2018/07/15(日) 16:27:56.77ID:Y0/Ay92k80デフォルトの名無しさん
2018/07/15(日) 17:27:08.76ID:1ys/w/8R fseekをつかうのなんか絶対ダメだ
fseekされることで標準関数がFILEポインタでもってるバッファも
めんどいことになってるのが容易に想像がつく
そしてさらにlseekもシステムコールも呼ばれる
標準関数の実装のされかたにもよるが
大きな性能劣化は避けられない
Dの方法でひたすら シ リ ア ル に読まないと遅くなるのは当然
そんな標準関数でやってるようなことを、
こっち側でやるならそもそも標準関数使う意味がない
普通にopen、readでこっちが渡したメモリにそのまま読みこむほうがいい
まずFILEポインタ使ってfreadしか使わないなら、はっきりいってfread使うメリットは
まったくない
関係ないようで関係ある話だが
キャッシュがきいてない状態ではposix_fadviceを呼んでおくと
シ リ ア ル に大きなファイルを読み込むときには、計算機の状態によっては
劇的に改善することがある
fseekされることで標準関数がFILEポインタでもってるバッファも
めんどいことになってるのが容易に想像がつく
そしてさらにlseekもシステムコールも呼ばれる
標準関数の実装のされかたにもよるが
大きな性能劣化は避けられない
Dの方法でひたすら シ リ ア ル に読まないと遅くなるのは当然
そんな標準関数でやってるようなことを、
こっち側でやるならそもそも標準関数使う意味がない
普通にopen、readでこっちが渡したメモリにそのまま読みこむほうがいい
まずFILEポインタ使ってfreadしか使わないなら、はっきりいってfread使うメリットは
まったくない
関係ないようで関係ある話だが
キャッシュがきいてない状態ではposix_fadviceを呼んでおくと
シ リ ア ル に大きなファイルを読み込むときには、計算機の状態によっては
劇的に改善することがある
81デフォルトの名無しさん
2018/07/15(日) 17:36:56.10ID:1ys/w/8R ちなみにファイルはUNIXでは
ブロックデバイスだからな
そのブロックデバイスをセクタ単位で
効率的に読み込むためにはどうすればいいか
あとはもう分かるな
このスレにいるサル並の知能しかないようなヤツラ以外なら
わかるハズだからな
ブロックデバイスだからな
そのブロックデバイスをセクタ単位で
効率的に読み込むためにはどうすればいいか
あとはもう分かるな
このスレにいるサル並の知能しかないようなヤツラ以外なら
わかるハズだからな
82デフォルトの名無しさん
2018/07/15(日) 18:02:19.58ID:1ys/w/8R まずストレージというハードウェアが
OSでどうやって抽象化されてるか
わかってないからな
こんな頭悪いヤツラが抽象化とかなんとかいってるワケ
きっとな前スレのソースの注釈で書いたwindowsで、キャッシュなしでReadFile呼ぶ時は
セクタの倍数単位でないと使えないという意味も分かってない
ともかくこのスレに居ついてるヤツラは頭悪い
基本的なことが分かってないからな
まずなバカはこのスレで相談することが
バカな行為であることに気付かないといけない
バカななに聞いてもムダ
的外れなコタエしか返ってこない
OSでどうやって抽象化されてるか
わかってないからな
こんな頭悪いヤツラが抽象化とかなんとかいってるワケ
きっとな前スレのソースの注釈で書いたwindowsで、キャッシュなしでReadFile呼ぶ時は
セクタの倍数単位でないと使えないという意味も分かってない
ともかくこのスレに居ついてるヤツラは頭悪い
基本的なことが分かってないからな
まずなバカはこのスレで相談することが
バカな行為であることに気付かないといけない
バカななに聞いてもムダ
的外れなコタエしか返ってこない
2018/07/15(日) 18:16:38.79ID:F1eG7opL
>>80
> FILEポインタ使ってfreadしか使わないなら、はっきりいってfread使うメリットはまったくない
メリットはあるでしょ。システムコールのreadやReadFile()と違い、
FILE*を使ったfread()はアラインメントを無視した小さいバッファサイズで読み込んでも全体としての速度低下が起きにくい恩恵がある。
> FILEポインタ使ってfreadしか使わないなら、はっきりいってfread使うメリットはまったくない
メリットはあるでしょ。システムコールのreadやReadFile()と違い、
FILE*を使ったfread()はアラインメントを無視した小さいバッファサイズで読み込んでも全体としての速度低下が起きにくい恩恵がある。
2018/07/15(日) 19:07:48.62ID:lbsq5rUe
13Gログ解析野郎と半角野郎が毎度毎度必ずコンビで出てくるのは何なんだろうなー
おっかしいなー
「ぼくちんのログ解析ソフトをぼくちんが考えた最強の名無しが作るスレ」でやってどうぞ
おっかしいなー
「ぼくちんのログ解析ソフトをぼくちんが考えた最強の名無しが作るスレ」でやってどうぞ
85デフォルトの名無しさん
2018/07/15(日) 20:22:05.00ID:1ys/w/8R 低学歴で知能低いのが答えられる質問の範囲なんかたかがしれてる
知恵遅れでも回答できる質問に限定される
こういうヤツラはYahoo知恵遅れがお似合い
もうね2ちゃんねるのクオリティーも著しく低下したもんだわ
著しくレベルの低い質問なら回答できるワケだからな
情報として保存される価値すらない
ゴミ質問とゴミ回答
知恵遅れでも回答できる質問に限定される
こういうヤツラはYahoo知恵遅れがお似合い
もうね2ちゃんねるのクオリティーも著しく低下したもんだわ
著しくレベルの低い質問なら回答できるワケだからな
情報として保存される価値すらない
ゴミ質問とゴミ回答
86デフォルトの名無しさん
2018/07/15(日) 20:27:33.82ID:1ys/w/8R 昔ならググレカスでおわるような質問を
どやがおで低学歴知恵遅れが回答するスレがココだからな
低学歴知恵遅れが活躍できる場所はココしかない
オレのナワバリを荒らすなと低学歴知恵遅れが
主張している
どやがおで低学歴知恵遅れが回答するスレがココだからな
低学歴知恵遅れが活躍できる場所はココしかない
オレのナワバリを荒らすなと低学歴知恵遅れが
主張している
2018/07/15(日) 20:39:19.46ID:oGr67yTf
あぼーん設定推奨
[ヲ-゚]
[ヲ-゚]
88デフォルトの名無しさん
2018/07/15(日) 22:46:04.59ID:GtfCPRC1 POSIXの制限に起因するパフォーマンス低下を回避するためのドライバをさっき見たばかりだな。
ハイパフォーマンスの世界にはそういうのもあるんだな。
ハイパフォーマンスの世界にはそういうのもあるんだな。
2018/07/15(日) 23:08:51.14ID:ugn7dRUi
90デフォルトの名無しさん
2018/07/16(月) 01:21:00.28ID:6luw5g3K とりあえずファイルすべての字句解析と
最低限のデータ取得できるとこまではできた
※ あとはデータを格納するだけ
テストデータのジェネレータを修正した
https://ideone.com/NWdMmL
で、とりあえず作ってみた解析のコードが↓コレ
https://ideone.com/E6QH2r
プリプロセッサにDEBUG_WRITEの定義を追加してやれば
データ取得できてることがダンプして確認できる
※ ダンプする場合は、ファイルにリダイレクトするにしても
※ 物凄い時間かかるし、物凄いディスク容量をとるから小さいテストデータでやるほうが
※ とりあえず無難
ものすごい単純なコードプロトタイプになってるから
バカでもチョンでも簡単に整理や作りかえができるようにはなってる
※ 処理内容はコードみたまんまのハズだ
※ 同じような処理がひたすら書かれてる
※ QQがなくなればめっちゃコード減るハズ
※ コードのほとんどはQQのムダ処理
最低限のデータ取得できるとこまではできた
※ あとはデータを格納するだけ
テストデータのジェネレータを修正した
https://ideone.com/NWdMmL
で、とりあえず作ってみた解析のコードが↓コレ
https://ideone.com/E6QH2r
プリプロセッサにDEBUG_WRITEの定義を追加してやれば
データ取得できてることがダンプして確認できる
※ ダンプする場合は、ファイルにリダイレクトするにしても
※ 物凄い時間かかるし、物凄いディスク容量をとるから小さいテストデータでやるほうが
※ とりあえず無難
ものすごい単純なコードプロトタイプになってるから
バカでもチョンでも簡単に整理や作りかえができるようにはなってる
※ 処理内容はコードみたまんまのハズだ
※ 同じような処理がひたすら書かれてる
※ QQがなくなればめっちゃコード減るハズ
※ コードのほとんどはQQのムダ処理
2018/07/16(月) 01:37:37.27ID:RYaEyvne
うわっ
汚いコード
汚いコード
2018/07/16(月) 10:44:37.38ID:526Z5Rhh
15GBのテキスト解析8.6秒のマシンで
>>90の時間を計ったら54秒でした。
ファイルアクセスの時間は除いた純粋な解析処理です。
これがプロとアマチュアの差ですか。
まあ54秒でも使えるレベルではあると思うんで
これで良いんじゃないですかね?
>>90の時間を計ったら54秒でした。
ファイルアクセスの時間は除いた純粋な解析処理です。
これがプロとアマチュアの差ですか。
まあ54秒でも使えるレベルではあると思うんで
これで良いんじゃないですかね?
2018/07/16(月) 11:29:13.12ID:80hpbb9v
OS のAPI を、直接呼んではいけない。
例えば、1バイト読み込みを千回やれば、千回API が呼ばれる。
ユーザーモードからカーネルモードへの、コンテキストスイッチが千回
一方、バッファリングしている、C のライブラリを使えば、
千バイト1回の読み込みで済む
ライブラリが抽象化している。
buffering stream
ユーザー → (ライブラリ) → API
例えば、1バイト読み込みを千回やれば、千回API が呼ばれる。
ユーザーモードからカーネルモードへの、コンテキストスイッチが千回
一方、バッファリングしている、C のライブラリを使えば、
千バイト1回の読み込みで済む
ライブラリが抽象化している。
buffering stream
ユーザー → (ライブラリ) → API
2018/07/16(月) 11:39:40.02ID:774eW9FT
>>90
今回相談しているものです。
ありがとうございます。
まず >>78 でAが2秒、Bが25秒の違いを調べました。
>>78 のBで実行するため昨日アップした https://ideone.com/1YhaLR に
「#define READ_MODE 1」を設定し25秒かかることを確認。
ここから後ろの処理からコメントアウトしていくと、下記行の前後で
25秒から2秒に変わりました。
88行目: data = real_data;
real_data(char型)のポインタをdata(char型のポインタ)に代入したつもりだったのですが、
もしかして実体がコピーされているのでしょうか?
>つづく
今回相談しているものです。
ありがとうございます。
まず >>78 でAが2秒、Bが25秒の違いを調べました。
>>78 のBで実行するため昨日アップした https://ideone.com/1YhaLR に
「#define READ_MODE 1」を設定し25秒かかることを確認。
ここから後ろの処理からコメントアウトしていくと、下記行の前後で
25秒から2秒に変わりました。
88行目: data = real_data;
real_data(char型)のポインタをdata(char型のポインタ)に代入したつもりだったのですが、
もしかして実体がコピーされているのでしょうか?
>つづく
2018/07/16(月) 11:41:24.00ID:774eW9FT
続けて >>90 のコードを実行してみました。
データ生成の方は、>>51 の最後に説明している、
「1つのファイル内でQQ行とx, yの後ろにくるパターンの両方は存在せず、片方が出てきたらもう片方は出てきません。」
というところで、1つのファイルに両方のフォーマットが生成されていましたが、
両方が読めれていれば特に問題はないと思います。
読み込み用のコードは自分の環境では %"PRIu64" → %" PRIu64 " とスペースを開けないとなぜかエラーになりました。
あとargv[2]がよくわかりませんでしたが実行できたのでとりあえずそのままにしています。
以下結果
## 1GB
time ./a.out aaa_1gb
strat... ./a.out aaa_1gb (null)
done... ./a.out aaa_1gb (null)
4./a.out aaa_1gb 3.69s user 0.14s system 99% cpu 3.839 total
## 5GB
time ./a.out aaa_5gb
strat... ./a.out aaa_5gb (null)
done... ./a.out aaa_5gb (null)
18./a.out aaa_5gb 17.40s user 0.78s system 99% cpu 18.216 total
## 13GB
time ./a.out aaa_13gb
strat... ./a.out aaa_13gb (null)
done... ./a.out aaa_13gb (null)
47./a.out aaa_13gb 44.99s user 1.73s system 99% cpu 46.781 total
みなさんキャッシュの話をされていて、その辺がまだあまり理解できていないのですが、
文字列解析時にはキャッシュから取り出して参照するため時間は増えるということですかね。
データ生成の方は、>>51 の最後に説明している、
「1つのファイル内でQQ行とx, yの後ろにくるパターンの両方は存在せず、片方が出てきたらもう片方は出てきません。」
というところで、1つのファイルに両方のフォーマットが生成されていましたが、
両方が読めれていれば特に問題はないと思います。
読み込み用のコードは自分の環境では %"PRIu64" → %" PRIu64 " とスペースを開けないとなぜかエラーになりました。
あとargv[2]がよくわかりませんでしたが実行できたのでとりあえずそのままにしています。
以下結果
## 1GB
time ./a.out aaa_1gb
strat... ./a.out aaa_1gb (null)
done... ./a.out aaa_1gb (null)
4./a.out aaa_1gb 3.69s user 0.14s system 99% cpu 3.839 total
## 5GB
time ./a.out aaa_5gb
strat... ./a.out aaa_5gb (null)
done... ./a.out aaa_5gb (null)
18./a.out aaa_5gb 17.40s user 0.78s system 99% cpu 18.216 total
## 13GB
time ./a.out aaa_13gb
strat... ./a.out aaa_13gb (null)
done... ./a.out aaa_13gb (null)
47./a.out aaa_13gb 44.99s user 1.73s system 99% cpu 46.781 total
みなさんキャッシュの話をされていて、その辺がまだあまり理解できていないのですが、
文字列解析時にはキャッシュから取り出して参照するため時間は増えるということですかね。
2018/07/16(月) 11:50:33.56ID:774eW9FT
あと、freadだけで2秒のものに、freadの後にからなず fseek(fp, -10000, SEEK_CUR) を実行してみましたが、
処理時間は2秒で変わりはありませんでした。
これらのことから >>94 で書いている
88行目: data = real_data;
のせいで2秒から25秒に増加しているようです。
処理時間は2秒で変わりはありませんでした。
これらのことから >>94 で書いている
88行目: data = real_data;
のせいで2秒から25秒に増加しているようです。
2018/07/16(月) 15:13:00.28ID:774eW9FT
今 >>90 のコードを >>95 と同じ環境で、readをfreadに変えて実行してみたところ下記になりました。
readとfreadで速度に変わりはなさそうです。
## 1GB(fread版)
./a.out aaa_1gb
strat... ./a.out aaa_1gb (null)
done... ./a.out aaa_1gb (null)
4
## 5GB(fread版)
./a.out aaa_5gb
strat... ./a.out aaa_5gb (null)
done... ./a.out aaa_5gb (null)
18
## 13GB(fread版)
./a.out aaa_13gb
strat... ./a.out aaa_13gb (null)
done... ./a.out aaa_13gb (null)
48
readとfreadで速度に変わりはなさそうです。
## 1GB(fread版)
./a.out aaa_1gb
strat... ./a.out aaa_1gb (null)
done... ./a.out aaa_1gb (null)
4
## 5GB(fread版)
./a.out aaa_5gb
strat... ./a.out aaa_5gb (null)
done... ./a.out aaa_5gb (null)
18
## 13GB(fread版)
./a.out aaa_13gb
strat... ./a.out aaa_13gb (null)
done... ./a.out aaa_13gb (null)
48
98デフォルトの名無しさん
2018/07/16(月) 15:37:46.05ID:6luw5g3K かわりがないとか
んなわけがないからな
先にいっておくが
ちなみにオレのコードより
おなじところまで解析できる処理を
速い速度で作れるヤツはまずいないからな
作れるもんなら作ってみればいいわ
んなわけがないからな
先にいっておくが
ちなみにオレのコードより
おなじところまで解析できる処理を
速い速度で作れるヤツはまずいないからな
作れるもんなら作ってみればいいわ
99デフォルトの名無しさん
2018/07/16(月) 15:40:29.53ID:6luw5g3K ちなみにDEBUG_WRITEを定義に追加したら死ぬほど遅いからな
ちゃんとDEBUG_WRITEをとって計測してるのかすら怪しい
バカが書いたコードより間違いないなく速いハズだからな
ちゃんとDEBUG_WRITEをとって計測してるのかすら怪しい
バカが書いたコードより間違いないなく速いハズだからな
100デフォルトの名無しさん
2018/07/16(月) 15:48:01.58ID:80hpbb9v 同じデータで、2回テストしても、
1回目は、HDD からメモリへ読み込むけど、
2回目は、既にメモリ上にデータが存在するから、HDDから読み込まない。
メモリキャッシュから読むから、HDDの読み込み速度とは違う
だから、2回目のテストの前に、
メモリキャッシュをすべて破棄しておいてから、テストをしないといけない
1回目は、HDD からメモリへ読み込むけど、
2回目は、既にメモリ上にデータが存在するから、HDDから読み込まない。
メモリキャッシュから読むから、HDDの読み込み速度とは違う
だから、2回目のテストの前に、
メモリキャッシュをすべて破棄しておいてから、テストをしないといけない
101デフォルトの名無しさん
2018/07/16(月) 15:49:56.51ID:6luw5g3K コレで他のより遅いというなら
オレはもうバカの相談には二度とのらないし
コレ以上のコードは書かない
ほぼ限界まで速度が出るようにチューニングしてるハズだからな
評価のしかたが分かってない
オレはもうバカの相談には二度とのらないし
コレ以上のコードは書かない
ほぼ限界まで速度が出るようにチューニングしてるハズだからな
評価のしかたが分かってない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… [BFU★]
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★2 [BFU★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★4 [Hitzeschleier★]
- 【将棋】福間香奈 女流六冠が会見 妊娠・出産でタイトル戦の事実上不戦敗 「妊娠したら、どちらか一方を諦めないといけない状況」★2 [冬月記者★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 [Hitzeschleier★]
- ホリエモン、「持ち家=幸せという価値観は過去のもの」と断言「快適な住まいが欲しいなら、賃貸住宅を次々に替えていく」 [muffin★]
- 【悲報】大臣も遊んでるソシャゲFGOで全キャラピックアップ決定!!もうこれサ終するんかな!? [904880432]
- 【実況】博衣こよりのえちえち声優楽プロジェクト共同研究発表会🧪
- ほい、高市早苗さんが首相に就任してからの功績がこれね。これでもまだ高市さん叩ける…? [165981677]
- 自民党のヒゲ「日本側の無線でcopyとは言ったが了解という意味ではない」 [834922174]
- 高市早苗と日本政府、意味不明。外国相手もSNS世論工作で乗り切れると思い込んでいた模様。今からでも中国語で工作するべき [517791167]
- ケンモメンってなんでこんなに反日が多いの? [866936191]
