diff --git a/demo/gpu.html b/demo/gpu.html index fa9fe2b7..d8f90802 100644 --- a/demo/gpu.html +++ b/demo/gpu.html @@ -102,14 +102,20 @@ function f(mode) { var a = []; var b = []; for(var n = 0; n < _length; n++) { - var randA = Math.random()/100.0; - var randB = Math.random()/100.0; + var randA = Math.random()*100.0; + var randB = Math.random()*100.0; a.push(randA); b.push(randB); } var f = GPU(function(a, b) { - return Math.sqrt( Math.pow( a[this.thread.x] , b[this.thread.x] ) ); + var res = 0.0; + var i = 0.0; + for(i = 0.0; i < 200000; ++i) { + res += Math.sqrt( Math.pow( a[this.thread.x] , b[this.thread.x] ) ); + } + + return res; }, { thread : [2048], mode : mode diff --git a/src/js-to-webclgl.js b/src/js-to-webclgl.js index 467bf181..027e7432 100644 --- a/src/js-to-webclgl.js +++ b/src/js-to-webclgl.js @@ -314,14 +314,14 @@ var GPU_jsStrToWebclglStr = (function() { if (forNode.type != "ForStatement") { throw "error"; } - retArr.push("for (float"); - ast_generic(forNode.init, retArr); + retArr.push("for (float "); + ast_generic(forNode.init, retArr, stateParam); retArr.push(";"); - ast_generic(forNode.test, retArr); + ast_generic(forNode.test, retArr, stateParam); retArr.push(";"); - ast_generic(forNode.update, retArr); + ast_generic(forNode.update, retArr, stateParam); retArr.push(")"); - ast_generic(forNode.body, retArr); + ast_generic(forNode.body, retArr, stateParam); return retArr; } diff --git a/test/html/basic_for_loop.html b/test/html/basic_for_loop.html new file mode 100644 index 00000000..eae08428 --- /dev/null +++ b/test/html/basic_for_loop.html @@ -0,0 +1,28 @@ + + + + + GPU.JS : Basic Sum AB + + + + + + + + + + + + + + + + + +
+
+ + + + diff --git a/test/src/basic_for_loop.js b/test/src/basic_for_loop.js new file mode 100644 index 00000000..fe4cfbd0 --- /dev/null +++ b/test/src/basic_for_loop.js @@ -0,0 +1,39 @@ +function basic_for_loop_test( assert, mode ) { + var f = GPU(function(a, b) { + var x = 0.0; + var i = 0.0; + for(i = 0.0; i<10.0; ++i) { + x = x + 1.0; + } + + return (a[this.thread.x] + b[this.thread.x] + x); + }, { + thread : [6], + block : [1], + mode : mode + }); + + assert.ok( f !== null, "function generated test"); + + var a = [1, 2, 3, 5, 6, 7]; + var b = [4, 5, 6, 1, 2, 3]; + + var res = f(a,b); + var exp = [15, 17, 19, 16, 18, 20]; + + for(var i = 0; i < exp.length; ++i) { + QUnit.close(exp[i], res[i], 0.1, "Result arr idx: "+i); + } +} + +QUnit.test( "basic_for_loop (auto)", function( assert ) { + basic_for_loop_test(assert, null); +}); + +QUnit.test( "basic_for_loop (GPU)", function( assert ) { + basic_for_loop_test(assert, "gpu"); +}); + +QUnit.test( "basic_for_loop (CPU)", function( assert ) { + basic_for_loop_test(assert, "cpu"); +});