Mozilla Firefox 용 Nokia WebCL 구현을 사용하기 시작했습니다.WebCL이 글로벌 테이블을 채우지 않습니다
Firefox 버전 32.0 (Nokia 바인딩이 구현 된 버전)에서 내 애플리케이션을 테스트하고 있습니다.
이
내 코드입니다 (단순 및 내 문제는 내가 최소 커널 코드를 단순화했습니다 무엇인지를 보여주는) :커널 코드 :
<script id="julia_set" type="text/x-opencl">
__kernel void julia_set(__global int* pix)
{
pix[0]=5;
}
</script>
내 자바 스크립트 코드 :
를function loadKernel(id){
var kernelElement = document.getElementById(id);
var kernelSource = kernelElement.text;
if (kernelElement.src != "") {
var mHttpReq = new XMLHttpRequest();
mHttpReq.open("GET", kernelElement.src, false);
mHttpReq.send(null);
kernelSource = mHttpReq.responseText;
}
return kernelSource;
}
var platforms = webcl.getPlatforms();
var width = 2;
var height = 2;
var ctx = webcl.createContext(platforms[2],WebCL.DEVICE_TYPE_GPU);
var length = 4*width*height;
var bufSize = 4*length;
var bufferC = ctx.createBuffer (WebCL.MEM_WRITE_ONLY, bufSize);
var kernelSrc = loadKernel("julia_set");
var program = ctx.createProgram(kernelSrc);
var device = ctx.getInfo(WebCL.CONTEXT_DEVICES)[0];
try {
program.build ([device], "");
} catch(e) {
alert ("Failed to build WebCL program. Error "
+ program.getBuildInfo (device,
WebCL.PROGRAM_BUILD_STATUS)
+ ": "
+ program.getBuildInfo (device,
WebCL.PROGRAM_BUILD_LOG));
throw e;
}
var kernel = program.createKernel ("julia_set");
kernel.setArg (0, bufferC);
var cmdQueue = ctx.createCommandQueue (device);
var local = [16,16];
var global = [32,32];
cmdQueue.enqueueNDRangeKernel(kernel, 2, null,global, local);
var outBuffer = new Uint32Array(length);
cmdQueue.enqueueReadBuffer (bufferC, false, 0, bufSize, outBuffer);
cmdQueue.finish();
console.log(outBuffer);
내가 상상할 수있는 가장 간단한 OpenCL 응용 프로그램입니다. 내 outBuffer가 0으로 채워지고 첫 번째 요소가 5가 될 것으로 기대하지만 모든 요소는 0입니다. 커널에서 무엇을하려고하든 배열은 변경되지 않은 것처럼 보입니다.
내가 사용하는 장치는 NVidia GeForce GT 750M입니다.
내 코드에서 잘못되었을 수있는 것은 무엇입니까?
모든 요소가 동일한 메모리 주소에 액세스하므로 정의되지 않은 동작이 발생합니다. 첫 번째 스레드에서만 수행하십시오. –