Java 类org.lwjgl.opencl.CL10 实例源码

项目:libgdx-opencl    文件:ParticlesDemo.java   
@Override
public void clPostPass()
{
    this.vertexClBuffer.acquireGLObject(this.queue);

    long nanoS = System.nanoTime();
    JLibOpenCL.enqueueKernelExecution(this.clContext, this.queue, this.clTestKernel, new int[] { this.particleCount }, this.vertexClBuffer, this.simulationInfo, (float)Math.abs(Math.sin(this.timeT / 100000.0) / 2.0));

    CL10.clFinish(this.queue);
    this.vertexClBuffer.releaseGLObject(this.queue);
    CL10.clFinish(this.queue);
    System.out.println("Simulation took: " + (System.nanoTime() - nanoS) / 1000000f);

    // Pointer<Float> fP = this.debugBuffer.read(this.clInstance.getQueue(), clEvt);
    // System.out.println(fP.getFloatAtIndex(4) + " " + fP.getFloatAtIndex(5) + " " + fP.getFloatAtIndex(6) + " " + fP.getFloatAtIndex(7) +" | " + this.simulationInfoPointer.getFloatAtIndex(4) + " " + this.simulationInfoPointer.getFloatAtIndex(5) + " " + this.simulationInfoPointer.getFloatAtIndex(6) + " | " + this.simulationInfoPointer.getFloatAtIndex(7) + " " + this.simulationInfoPointer.getFloatAtIndex(8) + " " +this.simulationInfoPointer.getFloatAtIndex(9) + " | " + (float)Math.sin(this.timeT*10));
}
项目:jglrEngine    文件:GPUProgramResource.java   
public GPUProgramResource(AbstractResource res) throws EngineException
{
    try
    {
        this.res = res;
        initCLIfNecessary();
        String text = BinaryUtils.toString(res.getData());

        clProgram = CL10.clCreateProgramWithSource(clContext, text, null);

        CL10.clBuildProgram(clProgram, clDevices.get(0), "", null);
    }
    catch(Exception e)
    {
        throw new EngineException("Exception while loading CLProgram: " + res.getResourceLocation().getFullPath(), e);
    }
}
项目:jglrEngine    文件:GPUProgramResource.java   
public void runKernel(String kernelName, GPUProgramObject[] args, int globalWorkSizeInt)
{
    if(!kernels.containsKey(kernelName))
    {
        preloadKernel(kernelName);
    }

    CLKernel kernel = kernels.get(kernelName);
    int index = 0;
    for(GPUProgramObject o : args)
    {
        o.apply(kernel, index++ );
    }

    final int dimensions = 1;
    PointerBuffer globalWorkSize = BufferUtils.createPointerBuffer(dimensions);
    globalWorkSize.put(0, globalWorkSizeInt);

    CL10.clEnqueueNDRangeKernel(clQueue, kernel, dimensions, null, globalWorkSize, null, null, null);

    CL10.clFinish(clQueue);
}
项目:jglrEngine    文件:GPUProgramObject.java   
public void dispose()
{
    if(type.equals("clmen"))
    {
        CL10.clReleaseMemObject((CLMem)value);
    }
}
项目:jglrEngine    文件:GPUProgramResource.java   
private static void initCLIfNecessary() throws Exception
{
    if(clPlatform == null)
    {
        clPlatform = CLPlatform.getPlatforms().get(0);
        clDevices = clPlatform.getDevices(CL10.CL_DEVICE_TYPE_GPU);
        clContext = CLContext.create(clPlatform, clDevices, null); // TODO:
                                                                   // replace
                                                                   // null
        clQueue = CL10.clCreateCommandQueue(clContext, clDevices.get(0), CL10.CL_QUEUE_PROFILING_ENABLE, null); // TODO:
                                                                                                                // replace
                                                                                                                // null
    }
}
项目:jglrEngine    文件:GPUProgramResource.java   
public static void destroyAll()
{
    if(clPlatform != null)
    {
        CL10.clReleaseCommandQueue(clQueue);
        CL10.clReleaseContext(clContext);
    }
}
项目:jglrEngine    文件:GPUProgramResource.java   
public void preloadKernel(String kernelName)
{
    CLKernel k = CL10.clCreateKernel(clProgram, kernelName, null);
    kernels.put(kernelName, k);
    if(!k.isValid())
    {
        throw new RuntimeEngineException("Kernel " + kernelName + " not valid in clProgram " + res.getResourceLocation().getFullPath());
    }
}
项目:mcproxy    文件:GPUDeviceState.java   
public GPUExecutionState(String executionName) throws DiabloMinerFatalException {
    super(executionName);

    try {
        digestInside = MessageDigest.getInstance("SHA-256");
        digestOutside = MessageDigest.getInstance("SHA-256");
    } catch(NoSuchAlgorithmException e) {
        throw new DiabloMinerFatalException(diabloMiner, "Your Java implementation does not have a MessageDigest for SHA-256");
    }

    queue = CL10.clCreateCommandQueue(context, device, 0, errBuffer);

    if(queue == null || errBuffer.get(0) != CL10.CL_SUCCESS) {
        throw new DiabloMinerFatalException(diabloMiner, "Failed to allocate queue");
    }

    IntBuffer blankinit = BufferUtils.createIntBuffer(OUTPUTS * 4);

    for(int i = 0; i < OUTPUTS; i++)
        blankinit.put(0);

    blankinit.rewind();

    if(platform_version == PlatformVersion.V1_1)
        blank = CL10.clCreateBuffer(context, CL10.CL_MEM_COPY_HOST_PTR | CL10.CL_MEM_READ_ONLY, blankinit, errBuffer);
    else
        blank = CL10.clCreateBuffer(context, CL10.CL_MEM_COPY_HOST_PTR | CL10.CL_MEM_READ_ONLY | CL12.CL_MEM_HOST_NO_ACCESS, blankinit, errBuffer);

    if(blank == null || errBuffer.get(0) != CL10.CL_SUCCESS)
        throw new DiabloMinerFatalException(diabloMiner, "Failed to allocate blank buffer");

    blankinit.rewind();

    for(int i = 0; i < 2; i++) {
        if(platform_version == PlatformVersion.V1_1)
            output[i] = CL10.clCreateBuffer(context, CL10.CL_MEM_COPY_HOST_PTR | CL10.CL_MEM_WRITE_ONLY, blankinit, errBuffer);
        else
            output[i] = CL10.clCreateBuffer(context, CL10.CL_MEM_COPY_HOST_PTR | CL10.CL_MEM_WRITE_ONLY | CL12.CL_MEM_HOST_READ_ONLY, blankinit, errBuffer);

        blankinit.rewind();

        if(output[i] == null || errBuffer.get(0) != CL10.CL_SUCCESS) {
            throw new DiabloMinerFatalException(diabloMiner, "Failed to allocate output buffer");
        }
    }

    outputBuffer = CL10.clEnqueueMapBuffer(queue, output[outputIndex], 1, CL10.CL_MAP_READ, 0, OUTPUTS * 4, null, null, null);

    diabloMiner.getNetworkStateHead().addGetQueue(this);
    requestedNewWork = true;
}
项目:jglrEngine    文件:GPUProgramResource.java   
public void dispose()
{
    for(CLKernel kernel : kernels.values())
        CL10.clReleaseKernel(kernel);
    CL10.clReleaseProgram(clProgram);
}
项目:jglrEngine    文件:GPUProgramResource.java   
public GPUProgramObject createMemory(FloatBuffer buffer)
{
    return new GPUProgramObject(CL10.clCreateBuffer(clContext, CL10.CL_MEM_WRITE_ONLY | CL10.CL_MEM_COPY_HOST_PTR, buffer, null));
}
项目:jglrEngine    文件:GPUProgramResource.java   
public GPUProgramObject createMemory(int size)
{
    return new GPUProgramObject(CL10.clCreateBuffer(clContext, CL10.CL_MEM_READ_ONLY, size, null));
}
项目:jglrEngine    文件:GPUProgramResource.java   
public void read(GPUProgramObject o, FloatBuffer writeTo, boolean blocking)
{
    CL10.clEnqueueReadBuffer(clQueue, (CLMem)o.value, blocking ? CL10.CL_TRUE : CL10.CL_FALSE, 0, writeTo, null, null);
    return;
}
项目:mcproxy    文件:GPUDeviceState.java   
public GPUExecutionState(String executionName) throws DiabloMinerFatalException {
    super(executionName);

    try {
        digestInside = MessageDigest.getInstance("SHA-256");
        digestOutside = MessageDigest.getInstance("SHA-256");
    } catch(NoSuchAlgorithmException e) {
        throw new DiabloMinerFatalException(diabloMiner, "Your Java implementation does not have a MessageDigest for SHA-256");
    }

    queue = CL10.clCreateCommandQueue(context, device, 0, errBuffer);

    if(queue == null || errBuffer.get(0) != CL10.CL_SUCCESS) {
        throw new DiabloMinerFatalException(diabloMiner, "Failed to allocate queue");
    }

    IntBuffer blankinit = BufferUtils.createIntBuffer(OUTPUTS * 4);

    for(int i = 0; i < OUTPUTS; i++)
        blankinit.put(0);

    blankinit.rewind();

    if(platform_version == PlatformVersion.V1_1)
        blank = CL10.clCreateBuffer(context, CL10.CL_MEM_COPY_HOST_PTR | CL10.CL_MEM_READ_ONLY, blankinit, errBuffer);
    else
        blank = CL10.clCreateBuffer(context, CL10.CL_MEM_COPY_HOST_PTR | CL10.CL_MEM_READ_ONLY | CL12.CL_MEM_HOST_NO_ACCESS, blankinit, errBuffer);

    if(blank == null || errBuffer.get(0) != CL10.CL_SUCCESS)
        throw new DiabloMinerFatalException(diabloMiner, "Failed to allocate blank buffer");

    blankinit.rewind();

    for(int i = 0; i < 2; i++) {
        if(platform_version == PlatformVersion.V1_1)
            output[i] = CL10.clCreateBuffer(context, CL10.CL_MEM_COPY_HOST_PTR | CL10.CL_MEM_WRITE_ONLY, blankinit, errBuffer);
        else
            output[i] = CL10.clCreateBuffer(context, CL10.CL_MEM_COPY_HOST_PTR | CL10.CL_MEM_WRITE_ONLY | CL12.CL_MEM_HOST_READ_ONLY, blankinit, errBuffer);

        blankinit.rewind();

        if(output[i] == null || errBuffer.get(0) != CL10.CL_SUCCESS) {
            throw new DiabloMinerFatalException(diabloMiner, "Failed to allocate output buffer");
        }
    }

    outputBuffer = CL10.clEnqueueMapBuffer(queue, output[outputIndex], 1, CL10.CL_MAP_READ, 0, OUTPUTS * 4, null, null, null);

    diabloMiner.getNetworkStateHead().addGetQueue(this);
    requestedNewWork = true;
}