generated from puzzlef/vector-sum-openmp
-
Notifications
You must be signed in to change notification settings - Fork 1
/
process.js
107 lines (79 loc) · 1.85 KB
/
process.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
const fs = require('fs');
const os = require('os');
const path = require('path');
const RRESLT = /^\[(.+?) ms; (.+?) elems\.\] \[(.+?)\] (.+)/m;
// *-FILE
// ------
function readFile(pth) {
var d = fs.readFileSync(pth, 'utf8');
return d.replace(/\r?\n/g, '\n');
}
function writeFile(pth, d) {
d = d.replace(/\r?\n/g, os.EOL);
fs.writeFileSync(pth, d);
}
// *-CSV
// -----
function writeCsv(pth, rows) {
var cols = Object.keys(rows[0]);
var a = cols.join()+'\n';
for (var r of rows)
a += [...Object.values(r)].map(v => `"${v}"`).join()+'\n';
writeFile(pth, a);
}
// *-LOG
// -----
function readLogLine(ln, data, state) {
if (state==null) {
var group = 'all';
if (!data.has(group)) data.set(group, []);
state = {group};
}
if (RRESLT.test(ln)) {
var [, time, elements, total, technique] = RRESLT.exec(ln);
data.get(state.group).push(Object.assign({}, state, {
time: parseFloat(time),
elements: parseFloat(elements),
total: parseFloat(total),
technique
}));
}
return state;
}
function readLog(pth) {
var text = readFile(pth);
var lines = text.split('\n');
var data = new Map();
var state = null;
for (var ln of lines)
state = readLogLine(ln, data, state);
return data;
}
// PROCESS-*
// ---------
function processCsv(data) {
var a = [];
for (var rows of data.values())
a.push(...rows);
return a;
}
// MAIN
// ----
function main(cmd, log, out) {
var data = readLog(log);
if (path.extname(out)==='') cmd += '-dir';
switch (cmd) {
case 'csv':
var rows = processCsv(data);
writeCsv(out, rows);
break;
case 'csv-dir':
for (var [group, rows] of data)
writeCsv(path.join(out, group+'.csv'), rows);
break;
default:
console.error(`error: "${cmd}"?`);
break;
}
}
main(...process.argv.slice(2));