mirror of
https://github.com/gpujs/gpu.js.git
synced 2026-01-18 16:04:10 +00:00
For loop, that GPU can be better then CPU
This commit is contained in:
parent
12d8c8152b
commit
af01fc2a2b
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
28
test/html/basic_for_loop.html
Normal file
28
test/html/basic_for_loop.html
Normal file
@ -0,0 +1,28 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>GPU.JS : Basic Sum AB</title>
|
||||
<link rel="stylesheet" href="../lib/qunit-1.20.0.css">
|
||||
|
||||
<!-- webclgl scripts -->
|
||||
<script src="../../lib/webclgl/WebCLGLUtils.class.js"></script>
|
||||
<script src="../../lib/webclgl/WebCLGLBuffer.class.js"></script>
|
||||
<script src="../../lib/webclgl/WebCLGLBufferItem.class.js"></script>
|
||||
<script src="../../lib/webclgl/WebCLGLKernel.class.js"></script>
|
||||
<script src="../../lib/webclgl/WebCLGLKernelProgram.class.js"></script>
|
||||
<script src="../../lib/webclgl/WebCLGL.class.js"></script>
|
||||
|
||||
<!-- gpu.js scripts -->
|
||||
<script src="../../src/js-fallback.js"></script>
|
||||
<script src="../../src/webclgl-js-parser.js"></script>
|
||||
<script src="../../src/js-to-webclgl.js"></script>
|
||||
<script src="../../src/gpu.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="qunit"></div>
|
||||
<div id="qunit-fixture"></div>
|
||||
<script src="../lib/qunit-1.20.0.js"></script>
|
||||
<script src="../src/basic_for_loop.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
39
test/src/basic_for_loop.js
Normal file
39
test/src/basic_for_loop.js
Normal file
@ -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");
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user