Skip to content

Commit a8d5d02

Browse files
Minor fix for 3d kernel maps and test
1 parent 01a18ac commit a8d5d02

File tree

8 files changed

+148
-37
lines changed

8 files changed

+148
-37
lines changed

bin/gpu-core.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*
55
* GPU Accelerated JavaScript
66
*
7-
* @version 1.4.12
8-
* @date Wed Jul 11 2018 15:20:52 GMT-0400 (EDT)
7+
* @version 1.4.13
8+
* @date Wed Jul 11 2018 18:51:55 GMT-0400 (EDT)
99
*
1010
* @license MIT
1111
* The MIT License

bin/gpu-core.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bin/gpu.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*
55
* GPU Accelerated JavaScript
66
*
7-
* @version 1.4.12
8-
* @date Wed Jul 11 2018 15:20:52 GMT-0400 (EDT)
7+
* @version 1.4.13
8+
* @date Wed Jul 11 2018 18:51:56 GMT-0400 (EDT)
99
*
1010
* @license MIT
1111
* The MIT License
@@ -1024,11 +1024,13 @@ module.exports = function (_KernelBase) {
10241024
return ' ' + name + 'Z[this.thread.z][this.thread.y] = new Array(' + threadDim[0] + ');\n';
10251025
}).join('')) + '\n for (this.thread.x = 0; this.thread.x < ' + threadDim[0] + '; this.thread.x++) {\n var kernelResult;\n ' + kernel + '\n ret[this.thread.z][this.thread.y][this.thread.x] = kernelResult;\n' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
10261026
return ' ' + name + 'Z[this.thread.z][this.thread.y][this.thread.x] = ' + name + ';\n';
1027-
}).join('')) + '\n }\n }\n }\n \n if (this.graphical) {\n this._imageData.data.set(this._colorData);\n this._canvasCtx.putImageData(this._imageData, 0, 0);\n return;\n }\n \n if (this.output.length === 1) {\n ret = ret[0][0];\n' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
1027+
}).join('')) + '\n }\n }\n }\n \n if (this.graphical) {\n this._imageData.data.set(this._colorData);\n this._canvasCtx.putImageData(this._imageData, 0, 0);\n return;\n }\n \n if (this.output.length === 1) {\n ret = ret[0][0];\n ' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
10281028
return ' ' + name + ' = ' + name + 'Z[0][0];\n';
1029-
}).join('')) + '\n \n } else if (this.output.length === 2) {\n ret = ret[0];\n ' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
1029+
}).join('')) + '\n \n } else if (this.output.length === 2) {\n ret = ret[0];\n ' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
10301030
return ' ' + name + ' = ' + name + 'Z[0];\n';
1031-
}).join('')) + '\n }\n \n ' + (this.subKernelOutputVariableNames === null ? 'return ret;\n' : this.subKernels !== null ? 'var result = [\n ' + this.subKernelOutputVariableNames.map(function (name) {
1031+
}).join('')) + '\n } else {\n ' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
1032+
return ' ' + name + ' = ' + name + 'Z;\n';
1033+
}).join('')) + '\n }\n \n ' + (this.subKernelOutputVariableNames === null ? 'return ret;\n' : this.subKernels !== null ? 'var result = [\n ' + this.subKernelOutputVariableNames.map(function (name) {
10321034
return '' + name;
10331035
}).join(',\n') + '\n ];\n result.result = ret;\n return result;\n' : 'return {\n result: ret,\n ' + Object.keys(this.subKernelProperties).map(function (name, i) {
10341036
return name + ': ' + _this2.subKernelOutputVariableNames[i];

bin/gpu.min.js

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/backend/cpu/kernel.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,11 +255,13 @@ module.exports = function (_KernelBase) {
255255
return ' ' + name + 'Z[this.thread.z][this.thread.y] = new Array(' + threadDim[0] + ');\n';
256256
}).join('')) + '\n for (this.thread.x = 0; this.thread.x < ' + threadDim[0] + '; this.thread.x++) {\n var kernelResult;\n ' + kernel + '\n ret[this.thread.z][this.thread.y][this.thread.x] = kernelResult;\n' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
257257
return ' ' + name + 'Z[this.thread.z][this.thread.y][this.thread.x] = ' + name + ';\n';
258-
}).join('')) + '\n }\n }\n }\n \n if (this.graphical) {\n this._imageData.data.set(this._colorData);\n this._canvasCtx.putImageData(this._imageData, 0, 0);\n return;\n }\n \n if (this.output.length === 1) {\n ret = ret[0][0];\n' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
258+
}).join('')) + '\n }\n }\n }\n \n if (this.graphical) {\n this._imageData.data.set(this._colorData);\n this._canvasCtx.putImageData(this._imageData, 0, 0);\n return;\n }\n \n if (this.output.length === 1) {\n ret = ret[0][0];\n ' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
259259
return ' ' + name + ' = ' + name + 'Z[0][0];\n';
260-
}).join('')) + '\n \n } else if (this.output.length === 2) {\n ret = ret[0];\n ' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
260+
}).join('')) + '\n \n } else if (this.output.length === 2) {\n ret = ret[0];\n ' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
261261
return ' ' + name + ' = ' + name + 'Z[0];\n';
262-
}).join('')) + '\n }\n \n ' + (this.subKernelOutputVariableNames === null ? 'return ret;\n' : this.subKernels !== null ? 'var result = [\n ' + this.subKernelOutputVariableNames.map(function (name) {
262+
}).join('')) + '\n } else {\n ' + (this.subKernelOutputVariableNames === null ? '' : this.subKernelOutputVariableNames.map(function (name) {
263+
return ' ' + name + ' = ' + name + 'Z;\n';
264+
}).join('')) + '\n }\n \n ' + (this.subKernelOutputVariableNames === null ? 'return ret;\n' : this.subKernels !== null ? 'var result = [\n ' + this.subKernelOutputVariableNames.map(function (name) {
263265
return '' + name;
264266
}).join(',\n') + '\n ];\n result.result = ret;\n return result;\n' : 'return {\n result: ret,\n ' + Object.keys(this.subKernelProperties).map(function (name, i) {
265267
return name + ': ' + _this2.subKernelOutputVariableNames[i];

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gpu.js",
3-
"version": "1.4.12",
3+
"version": "1.4.13",
44
"description": "GPU Accelerated JavaScript",
55
"main": "./dist/index.js",
66
"directories": {

src/backend/cpu/kernel.js

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -263,20 +263,22 @@ ${ this.subKernelOutputVariableNames === null
263263
264264
if (this.output.length === 1) {
265265
ret = ret[0][0];
266-
${ this.subKernelOutputVariableNames === null
267-
? ''
268-
: this.subKernelOutputVariableNames.map((name) => ` ${ name } = ${ name }Z[0][0];\n`).join('')
269-
}
266+
${ this.subKernelOutputVariableNames === null
267+
? ''
268+
: this.subKernelOutputVariableNames.map((name) => ` ${ name } = ${ name }Z[0][0];\n`).join('') }
270269
271-
} else if (this.output.length === 2) {
272-
ret = ret[0];
273-
${ this.subKernelOutputVariableNames === null
274-
? ''
275-
: this.subKernelOutputVariableNames.map((name) => ` ${ name } = ${ name }Z[0];\n`).join('')
276-
}
277-
}
270+
} else if (this.output.length === 2) {
271+
ret = ret[0];
272+
${ this.subKernelOutputVariableNames === null
273+
? ''
274+
: this.subKernelOutputVariableNames.map((name) => ` ${ name } = ${ name }Z[0];\n`).join('') }
275+
} else {
276+
${ this.subKernelOutputVariableNames === null
277+
? ''
278+
: this.subKernelOutputVariableNames.map((name) => ` ${ name } = ${ name }Z;\n`).join('') }
279+
}
278280
279-
${ this.subKernelOutputVariableNames === null
281+
${ this.subKernelOutputVariableNames === null
280282
? 'return ret;\n'
281283
: this.subKernels !== null
282284
? `var result = [

test/features/create-kernel-map.js

Lines changed: 108 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,15 @@
8888
QUnit.assert.deepEqual(divideResult, [8]);
8989
});
9090

91-
QUnit.test('createKernelMap (cpu)', function() {
91+
QUnit.test('createKernelMap object 1 dimension 1 length (cpu)', function() {
9292
var canvas = document.createElement('canvas');
9393
var gpu = new GPU({mode: 'cpu', canvas: canvas});
9494
var superKernel = createPropertyKernels(gpu, [1]);
95+
var kernel = createKernel(gpu, [1]);
9596
var output = superKernel([2], [2], [0.5]);
9697
var result = QUnit.extend([], output.result);
97-
var addResult = QUnit.extend([], output.addResult);
98-
var divideResult = QUnit.extend([], output.divideResult);
98+
var addResult = QUnit.extend([], kernel(output.addResult));
99+
var divideResult = QUnit.extend([], kernel(output.divideResult));
99100
QUnit.assert.deepEqual(result, [8]);
100101
QUnit.assert.deepEqual(addResult, [4]);
101102
QUnit.assert.deepEqual(divideResult, [8]);
@@ -226,6 +227,20 @@
226227
QUnit.assert.deepEqual(divideResult, [2, 2, 2, 2, 2]);
227228
});
228229

230+
QUnit.test('createKernelMap object 1 dimension 5 length (cpu)', function() {
231+
var canvas = document.createElement('canvas');
232+
var gpu = new GPU({mode: 'cpu', canvas: canvas});
233+
var superKernel = createPropertyKernels(gpu, [5]);
234+
var kernel = createKernel(gpu, [5]);
235+
var output = superKernel([1,2,3,4,5], [1,2,3,4,5], [1,2,3,4,5]);
236+
var result = QUnit.extend([], output.result);
237+
var addResult = QUnit.extend([], kernel(output.addResult));
238+
var divideResult = QUnit.extend([], kernel(output.divideResult));
239+
QUnit.assert.deepEqual(result, [2, 2, 2, 2, 2]);
240+
QUnit.assert.deepEqual(addResult, [2, 4, 6, 8, 10]);
241+
QUnit.assert.deepEqual(divideResult, [2, 2, 2, 2, 2]);
242+
});
243+
229244
QUnit.test('createKernelMap array (auto)', function() {
230245
var canvas = document.createElement('canvas');
231246
var gpu = new GPU({mode: null, canvas: canvas});
@@ -294,4 +309,94 @@
294309
QUnit.assert.deepEqual(addResult, [2, 4, 6, 8, 10]);
295310
QUnit.assert.deepEqual(divideResult, [2, 2, 2, 2, 2]);
296311
});
312+
313+
QUnit.test('createKernelMap 3d (auto)', function() {
314+
var kernel = new GPU().createKernelMap({
315+
target: function saveTarget(value) {
316+
return value;
317+
}
318+
}, function(value) {
319+
return saveTarget(value);
320+
}).setOutput([3,3,3]);
321+
var result = kernel(1);
322+
QUnit.assert.equal(result.result.length, 3);
323+
QUnit.assert.equal(result.result[0].length, 3);
324+
QUnit.assert.equal(result.result[0][0].length, 3);
325+
326+
QUnit.assert.equal(result.target.length, 3);
327+
QUnit.assert.equal(result.target[0].length, 3);
328+
QUnit.assert.equal(result.target[0][0].length, 3);
329+
});
330+
331+
QUnit.test('createKernelMap 3d (gpu)', function() {
332+
var kernel = new GPU({ mode: 'gpu' }).createKernelMap({
333+
target: function saveTarget(value) {
334+
return value;
335+
}
336+
}, function(value) {
337+
return saveTarget(value);
338+
}).setOutput([3,3,3]);
339+
var result = kernel(1);
340+
QUnit.assert.equal(result.result.length, 3);
341+
QUnit.assert.equal(result.result[0].length, 3);
342+
QUnit.assert.equal(result.result[0][0].length, 3);
343+
344+
QUnit.assert.equal(result.target.length, 3);
345+
QUnit.assert.equal(result.target[0].length, 3);
346+
QUnit.assert.equal(result.target[0][0].length, 3);
347+
});
348+
349+
QUnit.test('createKernelMap 3d (webgl)', function() {
350+
var kernel = new GPU({ mode: 'webgl' }).createKernelMap({
351+
target: function saveTarget(value) {
352+
return value;
353+
}
354+
}, function(value) {
355+
return saveTarget(value);
356+
}).setOutput([3,3,3]);
357+
var result = kernel(1);
358+
QUnit.assert.equal(result.result.length, 3);
359+
QUnit.assert.equal(result.result[0].length, 3);
360+
QUnit.assert.equal(result.result[0][0].length, 3);
361+
362+
QUnit.assert.equal(result.target.length, 3);
363+
QUnit.assert.equal(result.target[0].length, 3);
364+
QUnit.assert.equal(result.target[0][0].length, 3);
365+
});
366+
367+
QUnit.test('createKernelMap 3d (webgl2)', function() {
368+
var kernel = new GPU({ mode: 'webgl2' }).createKernelMap({
369+
target: function saveTarget(value) {
370+
return value;
371+
}
372+
}, function(value) {
373+
return saveTarget(value);
374+
}).setOutput([3,3,3]);
375+
var result = kernel(1);
376+
QUnit.assert.equal(result.result.length, 3);
377+
QUnit.assert.equal(result.result[0].length, 3);
378+
QUnit.assert.equal(result.result[0][0].length, 3);
379+
380+
QUnit.assert.equal(result.target.length, 3);
381+
QUnit.assert.equal(result.target[0].length, 3);
382+
QUnit.assert.equal(result.target[0][0].length, 3);
383+
});
384+
385+
QUnit.test('createKernelMap 3d (cpu)', function() {
386+
var kernel = new GPU({ mode: 'cpu' }).createKernelMap({
387+
target: function saveTarget(value) {
388+
return value;
389+
}
390+
}, function(value) {
391+
return saveTarget(value);
392+
}).setOutput([3,3,3]);
393+
var result = kernel(1);
394+
QUnit.assert.equal(result.result.length, 3);
395+
QUnit.assert.equal(result.result[0].length, 3);
396+
QUnit.assert.equal(result.result[0][0].length, 3);
397+
398+
QUnit.assert.equal(result.target.length, 3);
399+
QUnit.assert.equal(result.target[0].length, 3);
400+
QUnit.assert.equal(result.target[0][0].length, 3);
401+
});
297402
})();

0 commit comments

Comments
 (0)