-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathncat.js
68 lines (57 loc) · 1.47 KB
/
ncat.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
'use strict';
const dbl = require('./double');
const tst = require('./test_help');
let a1 = tst.randMat([2,3,3]);
let a2 = tst.randMat([2,1,3]);
let a3 = tst.randMat([2,5,3]);
let dim = 1;
let dp = [a1,a2,a3];
let maxdims = 0;
for (let d of dp) {
maxdims = Math.max(d.dims.length,maxdims);
}
console.log("maxdims " + maxdims);
for (let d of dp) {
for (let ndx=0;ndx < maxdims;ndx++)
if ((ndx !== dim) && ((d.dims[ndx]|0) !== (dp[0].dims[ndx]|0)))
throw "Dimension mismatch";
}
let outputSize = dp[0].dims.slice(0);
let aggregated_size = 0;
for (let d of dp) {
aggregated_size += d.dims[dim];
}
outputSize[dim] = aggregated_size;
console.log(outputSize);
// Calculate the page sizes
let pagesize = [];
let offsets = [];
for (let ndx=0;ndx<dp.length;ndx++) {
let pagesze = 1;
for (let j=0;j<=dim;j++) {
pagesze *= dp[ndx].dims[j];
console.log(` ${ndx} ${j} ${dp[ndx].dims[j]} ${dp[ndx].dims} ${pagesze}`);
}
pagesize[ndx] = pagesze;
offsets[ndx] = 0;
}
console.log("page sizes " + pagesize);
let op = dbl.make_array(outputSize);
let outputOffset = 0;
let outputCount = op.length;
let k=0;
while (outputOffset < outputCount) {
for (let ndx=0;ndx<pagesize[k];ndx++) {
op.real[outputOffset+ndx] = dp[k].real[ndx+offsets[k]];
}
outputOffset += pagesize[k];
offsets[k] += pagesize[k];
k = (k+1) % dp.length;
}
console.log(dp);
for (let k of dp) {
console.log("Element");
tst.mat_print(k);
}
console.log("Result:");
tst.mat_print(op);