Skip to content

Instantly share code, notes, and snippets.

@sagnitude
Created July 18, 2017 11:03
Show Gist options
  • Save sagnitude/eae02db420dec3334ad4878be8d08817 to your computer and use it in GitHub Desktop.
Save sagnitude/eae02db420dec3334ad4878be8d08817 to your computer and use it in GitHub Desktop.
Test gpu.js
var b64Str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var b64Table = {};
var b64Chars = [];
var b64LookupTable = [];
for (var i = 0; i < b64Str.length; i++) {
var ch = b64Str.charCodeAt(i);
b64Table[ch] = i;
b64Chars[i] = ch;
b64LookupTable[ch] = i;
}
for (var i = 0; i < b64LookupTable.length; i++) {
var ch = b64LookupTable[i];
if (ch === undefined) {
b64LookupTable[i] = 0;
}
}
b64LookupTable[61] = 0; //padding
//rawData should be ArrayBuffer or array of base64 encoded data
function decodeBase64Gpu(rawData) {
var uint = new Uint8Array(rawData);
var array = [];
for (var i = 0; i < uint.length; i++) {
array[i] = uint[i];
if (array[i] === 61) {
array[i] = 0;
}
}
//note the trailing equals
var segments = uint.length / 4;
var de_base64 = idsmap.gpu.createKernel(function(array, x, b64LookupTable) {
var index = this.thread.x;
var outIndex = this.thread.y;
var calcIndex = this.thread.z;
if (calcIndex === 0) {
//charCode inputGroup
var ch1 = array[index * 4];
var ch2 = array[index * 4 + 1];
var ch3 = array[index * 4 + 2];
var ch4 = array[index * 4 + 3];
var i1 = b64LookupTable[ch1];
var i2 = b64LookupTable[ch2];
var i3 = b64LookupTable[ch3];
var i4 = b64LookupTable[ch4];
if (ch3 === 61) {
//==
if (outIndex > 0) return 0;
}
if (ch4 === 61) {
//=
if (outIndex > 1) return 0;
}
if (outIndex === 0) {
return i1 * 4 + (i2 / 16);
} else if (outIndex === 1) {
return (i2 % 16) * 16 + i3 / 4;
} else if (outIndex === 2) {
return i4 + (i3 % 4) * 64;
}
return 0;
}
}).dimensions([segments, 3, 1]);
var val = de_base64(array, array, b64LookupTable);
var base64_str = "";
for (var i = 0; i < segments; i++) {
base64_str += String.fromCharCode(~~val[0][0][i]);
base64_str += String.fromCharCode(~~val[0][1][i]);
base64_str += String.fromCharCode(~~val[0][2][i]);
}
return base64_str;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment