TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
OpenMPプログラミング
オブジェクト指向は愚かな考え。この世は計算式 ★3
開発工数を大幅削減できた言語は存在しない
Vue vs React vs Angular Part.2
Cygwin + MinGW + GCC 相談室 Part 8
C++相談室 part143
【wasm】ブラウザでC++。Emscriptenを語ろう
PHPがいかに駄目言語であるかをちゃんと説明 Part.2
逆コンパイラCodeReverseを作る

C++相談室 part137


1 :2018/07/14 〜 最終レス :
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part135
https://mevius.2ch.sc/test/read.cgi/tech/1522495206/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.2ch.sc/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

2 :
スレ作ってみましたが、これ設定間違ってますか?
ワッチョイほにゃららが出てきてない。

3 :
>>1
スレの立て方は一番上に書いてある。
前スレや関連スレへのリンクも間違ってるぞ。

4 :
ヘタクソかよ

5 :
スレ立て苦手か?

6 :
>>1
ume

7 :
前スレの 1N2GRIlb0
ディスクキャッシュに入ってるってずいぶん前からわかってたのに
何でムダな作業をやらせたの?

8 :
このスレの知恵遅れたちが
どんだけ頭悪いのかよおく分かっただろ

同じ計算機で2秒で終わるような読みこみ処理で
数十秒かかるとかいってたワケだからな

相当オツムが弱い
このスレは知恵遅れしかいない

9 :
いまになって
分かってたとかいいだしてるしな

ディスク読む時間に知ったかぶって調子こいてた知恵遅れは
どこいったの?

10 :
ん?
何度も指摘してたけど

11 :
嘘コケ
ハゲ

知恵遅れは前のスレ読んで出直してこいや

12 :
ハードディスクの内側読みこんで読みこみ時間がどうとかいってた
バカいる?

13 :
測らせるならキャッシュに無い状態にしないとアホだろ

14 :
はじめはキャッシュに入って無いんだから

15 :
むしろなバカが指南した方法やコードでは
キャッシュのっかても数十秒かかってたってことだぞ

16 :
このスレで教えを乞うてるヤツは
何度もデバッグで走らせてるハズのに
知恵遅れの方法やコード数十秒かかるってことだ

オレのは2秒かからない
知恵遅れは息してる?

17 :
測定した結果は
fgetsの17秒とreadの1〜2秒しか無い

普通に読むだけで数十秒なんて測定結果は無い

18 :
読み方次第で差は歴然と出る
オレの方法は最適な方法だからな

19 :
fgetsは速いとか言ってなかった?
今遅いことが証明されてるのはfgetsだけ

20 :
やっぱり知恵遅れはなにも分かってないわ
まず自分が呼んでる関数がどんな動作してるか分かってないからな

21 :
何の工夫もないただのreadで2秒なら、
他の方法も読むだけなら2秒

22 :
やっぱりこのスレは
相当な知恵遅れしかいない
CもC++も何も分かってない

それ以前の問題

23 :
測定結果ででてるからな
相当な速度で速く読みこみたいのに標準関数のファイルポインタ使う知恵遅れなんか
まずいない

ファイルポインタ使う標準関数は
このスレにいる知恵遅れにでも簡単に使えるように
openやread使って使いやすく作ってあるだけだからな

24 :
fgetsが速いとか言ってたアホが
readとfreadの差を強調する

オーバーヘッドのオーダーは1
読み込みバッファが常識的なサイズであれば無視できる
fgetsのオーバーヘッドのオーダーはn
バッファサイズによらずオーバーヘッドは無視できない

25 :
まずfreadもバッファもってるのすら分かってないからな

26 :
freadで測定させれば証明出来るが

で、
もともと測りたかったディスクアクセスの時間は?
まさかキャッシュに入った状態が普通と考えてるわけではあるまい

27 :
ファイルポインタがもってるバッファから
いちいちこっちのバッファにコピーしてんのに

まずその程度のことすら分かってない

28 :
相当頭が悪いのが
知ったかぶってるのは分かる

29 :
測って見ればわかるって

で肝心の解析コードはどうした?
糞遅いコードを自信満々にあげてたけど

30 :
クソ遅い?
オレのコードを動かして速度測定したの?

オレより10倍以上低速に作る才能がある知恵遅れのくせに

31 :
糞遅い
間違い無い

お前の環境で15GBのテキストを作って解析時間を測ってみな

32 :
とりあえず
知恵遅れはほっといて

テストデータをジェネレートするコードを
前スレの内容読んでテキトーに作った

 https://ideone.com/cPZvWL

baka_genでコンパイルすれば大量のテストデータを作ってくれる優れものだ
※ 指定ギガバイト数越えたら、1つのセクション書ききったら停止する

 使い方
  Usage:baka_gen <fileparh> <GB size>

出力されてる形式に問題がないかみといてくれ
形式が分からないと解析処理を作りようがない

明日からこのテストデータを解析する処理を作る

33 :
まず知恵億れはなにと比較して遅いとか書かないからな
オレは知恵遅れが書いたコードより少なくとも10倍以上速い処理を書いてる

34 :
>>32
なんか error がいっぱい出ているようだが…

35 :
15GBのテキストの解析で8.6秒
これを越えればいい

36 :
なんのエラー書けよ
エラーとかいわれても分かるワケがないだろ

ヴォケ

37 :
で、そのコードはったのかオマエは

38 :
>>33
fgets 17秒
これは俺じゃない

キャッシュに入ったデータの読み込み時間

ディスクからの読み込み時間
とを比べて10倍とか言ってるの?

39 :
>>36
>>32 https://ideone.com/cPZvWL
の下の方にいっぱい書いてあるぞ?本当にコンパイルの通るコードなのか?

40 :
8.6秒とかテキトーなことなら
なんとでもいえるからな

どんなファイル読んで
どんなソース作ったわけ?

ファイル形式ちゃんとわかってんの

41 :
適切なインクルードファイルを上に書けば
間違いなく通る

ココで教えを乞うているバカですら
それぐらいのことやってる

オマエはそれ未満だ

42 :
テキストのほとんどが数値の行
10%の割合でx, yの行
セクションは全部で100個くらい

数値は乱数で作成した
実際の分布を考えて、
桁数によって出現率を変えてある

異常データでも不正アクセスしない

文字コードはS-JIS
改行はLFのみ

43 :
>>41
「unknown type name ‘size_t’」がインクルードファイルで直る問題なのか?
ideone に怒られないコードが書けないのか?

44 :
数値は符号付き32bitに収まる値で
printf("%d", n);
で出力される文字列と同じ書式

45 :
https://ideone.com/hi8bYd

ヘッダファイルを適切にインクルードしたら
普通にエラーメッセージ消えたぞ

バカはなにをいってるのか意味が分からないワケ

46 :
なんか知恵遅れがバカみたいなレスをブツブツ書いてるし
ごちゃごちゃいってないでコードあげたらどうだ

47 :
シングルスレッド、順番に全文字スキャンの処理で
処理時間は1文字平均約2クロック (Haswell)

最適化的にはこれが出発点
さらに高速化する価値がある処理であれば
マルチスレッド,GPU, AVX ...
まだまだ高速化の余地はある

48 :
また知恵遅れがテキトーなこといってるしな

49 :
残念ながらクソシンタックスが増えれば増えるほどアホでもテクニカルターム使って
アホと思われない活動が可能になって行くんだよ。

50 :
>>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)が来ることがある。

>つづく

51 :
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

>つづく

52 :
最後に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

>つづく

53 :
参考として、ファイルを読み込んだら下記の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;

54 :
そろそろ「ぼくちんのログ解析ソフトを名無しどもに作らせるスレ」でも立ててそっちでやってくれないか

55 :
いい加減にしろよお前
土方コーダに発注する気分でてめえのクソログの仕様ドヤ顔で書いてんじゃねえよ
ありったけスレ私物化して相談しまくったんだからそろそろ自分の手と頭を動かしたらどうだ

56 :
ID:p2p9fdhp さん、別のスレに移動を願います。

57 :
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のまちまちな場所をランダムアクセスしだすとたちまち顕在化する(これも上のしくみから導ける
単一ファイルの読込であっても、アプリがファイルの一部を読み込んで考え込む、の繰り返しなパターンならば
アプリ側のマルチスレッド化が有効な「こともある」 今回は該当しないと思うが、、

58 :
てな議論はベアメタルでやるならともかく
依存処理系では特定OSの話になるし
抽象化されたハードウエアじゃ特性を仮定すること自体ナンセンス

59 :
>>57
申し訳ありませんが、C++と関係がない話は、他のスレでやってください。よろしくお願いします。
お気を悪くなされませんよう。

60 :
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

61 :
>>60

unsigned int l = -1;
int m = 4294967295;

がエラーにならないのはなぜでしょうか?

62 :
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なのでしょうか?

63 :
解釈が間違ってる
ValueFactoryの実体を作って返すためにはすでに定義が分かってないといけない(完全型でないといけない
対してfriend宣言は名前だけ分かってればいい(定義がまだ無い(=不完全型)でいい

というだけの話

64 :
>>61
暗黙のキャストのせい。

整数リテラルに型を表す接尾辞がつかない場合は原則として int として解釈されるけど、
int の範囲より大きい場合はそれを表せる最低限の整数型として解釈されるんだったはず。

整数型の初期化 (代入) の右辺に現れた値が左辺の型で表せるときはそのままの値であることが保証されるが、
そうでないときは一定の規則に従って縮小される。

縮小の仕方は、
左辺が unsigned のときは、左辺の型が表せる最大値に 1 足した数で右辺の modulo を取った値が左辺に入る。
左辺が signed のときは未定義。
なので、 (int が 32 ビットの大きさをもつとき) unsigned int l = -1; が 4294967295 になるのは規格通りだが、
int m = 4294967295; が -1 になるのは保証されない。

規格を確認せずに記憶で書いてるので、
もし間違ってたら誰か指摘よろー。

65 :
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] << " ";
}

読み込みは、読み込んで表示も出ますが
何かエラーが出ます
どうしてでしょうか

66 :
書き込んだものに区切り入れてないけどそれでいいの?

67 :
>>63

ありがとうございます。

ソースコード全体をコンパイラがみれば定義も分かるのに、なぜコンパイルエラーにするのでしょうか?

>>64

ありがとうございました。

68 :
>>63

例えば、 Python では、相互に参照していてもOKです。

69 :
コンパイラーについての知識がないと理解しにくい部分でしょうか?

70 :
>>66
なにか、ヌル文字を読み込もうとしてるエラーのようで
なるほど、区切り文字というのを入れて
getlineとかを使用して読み込んでいくべきなのかな・・・・

71 :
とりあえず、区切り入れて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とかと違って難しいですね

72 :
>>70
&moji[i]はstringインスタンスの格納先アドレスであって、中に格納されている文字列データの先頭ではないよ。
無理やりやるなら
ifs2.read(const_cast<char*>(&moji[i].data()), moji[i].length());
とかすれば動くと思うけど

>>71
文字列以外も書き込みだしたら\nと競合するけどいいの?
getline使うならbinaryモードは使うべきでないと思うし、そもそも文字列しか書き込まないならbinayモードにする必要ある?

73 :
あとエラー出力は正確に書いてくれないと、コード全部読まないといけないからしんどいです…

74 :
>>67
C++はそういうコンパイルの仕方しないから
cppごとにオブジェクトファイル(クラスのインスタンスとしてのオブジェクトとかとは別の意味)というのを作ってから
オブジェクトファイル同士のリンクという作業をして目的の実行バイナリを作る
オブジェクトファイルは自分自身で完結してないといけないので、
「ValueFactoryとかいうクラスのポインタ」「ValueFactoryとかいうクラスがfriendだという情報」は持つことが出来るけど
(別のファイルがValueFactoryの実体を持ってると期待して)
ValueFactoryの実体作れとか実体使ってなんかやれ(そういう実行コードを保持しろ)と言われたら困ってしまうってこと

75 :
>>72
数字の配列はバイナリでエラー無いので
やはり、文字列はテキストに出力したほうがいいんかな
>>73
今度からはそうします
すみませんでした

76 :
もちろんバイナリ形式でもいいのだけど、その場合は文字列を固定長にするとか、tlv形式で作ってみては?
https://en.m.wikipedia.org/wiki/Type-length-value

77 :
大規模ファイルの読み込みについて相談しているものです。

以下調査結果です。
ファイルは上記で13GBのファイル生成したものを使用
https://ideone.com/hi8bYd

@下記コードの結果
https://ideone.com/e9iA5m
512,15 →15秒
1024,7 →7秒
2048,5 →5秒
4096,3 →3秒
8192,2 →2秒

>つづく

78 :
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秒に増加しているので、
まずここの作りがおかしいんだろうなとは思いますが、
何がおかしいのかが、まだわかっていません。

79 :
>>74

ありがとうございました。

80 :
fseekをつかうのなんか絶対ダメだ

fseekされることで標準関数がFILEポインタでもってるバッファも
めんどいことになってるのが容易に想像がつく
そしてさらにlseekもシステムコールも呼ばれる

標準関数の実装のされかたにもよるが
大きな性能劣化は避けられない

Dの方法でひたすら シ リ ア ル に読まないと遅くなるのは当然
そんな標準関数でやってるようなことを、
こっち側でやるならそもそも標準関数使う意味がない

普通にopen、readでこっちが渡したメモリにそのまま読みこむほうがいい
まずFILEポインタ使ってfreadしか使わないなら、はっきりいってfread使うメリットは
まったくない

関係ないようで関係ある話だが
キャッシュがきいてない状態ではposix_fadviceを呼んでおくと
シ リ ア ル に大きなファイルを読み込むときには、計算機の状態によっては
劇的に改善することがある

81 :
ちなみにファイルはUNIXでは
ブロックデバイスだからな

そのブロックデバイスをセクタ単位で
効率的に読み込むためにはどうすればいいか

あとはもう分かるな

このスレにいるサル並の知能しかないようなヤツラ以外なら
わかるハズだからな

82 :
まずストレージというハードウェアが
OSでどうやって抽象化されてるか
わかってないからな

こんな頭悪いヤツラが抽象化とかなんとかいってるワケ
きっとな前スレのソースの注釈で書いたwindowsで、キャッシュなしでReadFile呼ぶ時は
セクタの倍数単位でないと使えないという意味も分かってない

ともかくこのスレに居ついてるヤツラは頭悪い
基本的なことが分かってないからな

まずなバカはこのスレで相談することが
バカな行為であることに気付かないといけない
バカななに聞いてもムダ
的外れなコタエしか返ってこない

83 :
>>80
> FILEポインタ使ってfreadしか使わないなら、はっきりいってfread使うメリットはまったくない

メリットはあるでしょ。システムコールのreadやReadFile()と違い、
FILE*を使ったfread()はアラインメントを無視した小さいバッファサイズで読み込んでも全体としての速度低下が起きにくい恩恵がある。

84 :
13Gログ解析野郎と半角野郎が毎度毎度必ずコンビで出てくるのは何なんだろうなー
おっかしいなー

「ぼくちんのログ解析ソフトをぼくちんが考えた最強の名無しが作るスレ」でやってどうぞ

85 :
低学歴で知能低いのが答えられる質問の範囲なんかたかがしれてる
知恵遅れでも回答できる質問に限定される

こういうヤツラはYahoo知恵遅れがお似合い
もうね2ちゃんねるのクオリティーも著しく低下したもんだわ

著しくレベルの低い質問なら回答できるワケだからな
情報として保存される価値すらない
ゴミ質問とゴミ回答

86 :
昔ならググレカスでおわるような質問を
どやがおで低学歴知恵遅れが回答するスレがココだからな

低学歴知恵遅れが活躍できる場所はココしかない

オレのナワバリを荒らすなと低学歴知恵遅れが
主張している

87 :
あぼーん設定推奨
[ヲ-゚]

88 :
POSIXの制限に起因するパフォーマンス低下を回避するためのドライバをさっき見たばかりだな。
ハイパフォーマンスの世界にはそういうのもあるんだな。

89 :
>>85
解析のコード書けたの?
お前が全部作ってアップすればそれで終わる

90 :
とりあえずファイルすべての字句解析と
最低限のデータ取得できるとこまではできた
※ あとはデータを格納するだけ

テストデータのジェネレータを修正した
https://ideone.com/NWdMmL

で、とりあえず作ってみた解析のコードが↓コレ

https://ideone.com/E6QH2r

プリプロセッサにDEBUG_WRITEの定義を追加してやれば
データ取得できてることがダンプして確認できる

※ ダンプする場合は、ファイルにリダイレクトするにしても
※ 物凄い時間かかるし、物凄いディスク容量をとるから小さいテストデータでやるほうが
※ とりあえず無難

ものすごい単純なコードプロトタイプになってるから
バカでもチョンでも簡単に整理や作りかえができるようにはなってる

※ 処理内容はコードみたまんまのハズだ
※ 同じような処理がひたすら書かれてる
※ QQがなくなればめっちゃコード減るハズ
※ コードのほとんどはQQのムダ処理

91 :
うわっ
汚いコード

92 :
15GBのテキスト解析8.6秒のマシンで
>>90の時間を計ったら54秒でした。
ファイルアクセスの時間は除いた純粋な解析処理です。

これがプロとアマチュアの差ですか。
まあ54秒でも使えるレベルではあると思うんで
これで良いんじゃないですかね?

93 :
OS のAPI を、直接呼んではいけない。
例えば、1バイト読み込みを千回やれば、千回API が呼ばれる。
ユーザーモードからカーネルモードへの、コンテキストスイッチが千回

一方、バッファリングしている、C のライブラリを使えば、
千バイト1回の読み込みで済む

ライブラリが抽象化している。
buffering stream

ユーザー → (ライブラリ) → API

94 :
>>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型のポインタ)に代入したつもりだったのですが、
もしかして実体がコピーされているのでしょうか?

>つづく

95 :
続けて >>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

みなさんキャッシュの話をされていて、その辺がまだあまり理解できていないのですが、
文字列解析時にはキャッシュから取り出して参照するため時間は増えるということですかね。

96 :
あと、freadだけで2秒のものに、freadの後にからなず fseek(fp, -10000, SEEK_CUR) を実行してみましたが、
処理時間は2秒で変わりはありませんでした。

これらのことから >>94 で書いている

88行目: data = real_data;

のせいで2秒から25秒に増加しているようです。

97 :
>>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

98 :
かわりがないとか
んなわけがないからな

先にいっておくが
ちなみにオレのコードより
おなじところまで解析できる処理を
速い速度で作れるヤツはまずいないからな

作れるもんなら作ってみればいいわ

99 :
ちなみにDEBUG_WRITEを定義に追加したら死ぬほど遅いからな
ちゃんとDEBUG_WRITEをとって計測してるのかすら怪しい

バカが書いたコードより間違いないなく速いハズだからな

100 :
同じデータで、2回テストしても、

1回目は、HDD からメモリへ読み込むけど、
2回目は、既にメモリ上にデータが存在するから、HDDから読み込まない。
メモリキャッシュから読むから、HDDの読み込み速度とは違う

だから、2回目のテストの前に、
メモリキャッシュをすべて破棄しておいてから、テストをしないといけない


100〜のスレッドの続きを読む
人工知能ディープラーニング機械学習の数学 ★2
【アンチ】関数型言語は使えない【玩具】 2
C/C++以外の推薦図書/必読書のためのスレッド
WPF(.NET4.x, .NET Core) GUIプログラミング Part24
Excel VBA 質問スレ Part66
Python の宿題ここで答えます Part 2
【PHP】下らねぇ質問はここに 9
【Lua】組み込み系言語総合 その7【Squirrel】
monazilla Part 6
Pythonのお勉強 Part63
--------------------
横浜から大阪へ行くと誰もが気付く事実
【3DS】ロロナのアトリエ part3
【トランプ訪英】トランプ夫妻、エリザベス女王に面会 ウィンザー城内でお茶ともに
横アリアーティスト鈴木愛理さんのラクーアイベントがこぶし以下のガラガラだった件wwwwww
【依存症】スロットやめようぜ。157人目【治療】
堀江由衣応援スレ517
大学ラグビー総合スレ
一人一日一手で碁を打つスレ Part6
知的障害者との恋愛
今日は某所で「ちかチャットOFF」
食虫植物 22株目
日大アメフト部、タックル問題で解体の危機 監督続投なら選手ボイコットも
BIC SIM (ビックシム) 32枚目
【サッカー】「スポーツブラ試着して」 女子中学生らに追及され、警察署に自ら出頭 盗撮容疑でコーチ再逮捕
別館★羽生結弦&オタオチスレ14189
これはとっておけってコスパの良い資格 part19
【韓国】韓国企業に知事激怒「泥棒の開き直りだ」韓国船が港の施設“破壊” 修理費払わず血税投入の事態に
帝京大学スレッド part20
大相撲の十両力士とタイマンで喧嘩して勝てる自信ある?
ネトウヨに聞きたいんだがもし日本がヤバくなってみんな日本から出ていってもお前らは日本に残るの?
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼