0

Mozilla Firefox 用の Nokia WebCL 実装を使い始めました。

Firefox バージョン 32.0 (Nokia バインディングが実装されたバージョン) でアプリケーションをテストしています。

これは私のコードです (簡単にするため、そして私の問題が何であるかを示すために、カーネルコードを最小限に簡略化しました):

カーネルコード:

<script id="julia_set" type="text/x-opencl">
__kernel void julia_set(__global int* pix)
{
pix[0]=5;
}

</script>

私のJavascriptコード:

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 です。

私のコードで何が間違っている可能性がありますか?

4

1 に答える 1

0
if(get_global_id(0)==0 && get_global_id(1)==0)
    pix[0]=5;

競合状態なしで問題を修正する必要があります。

于 2016-08-24T16:57:33.940 に答える