putUnmapMemory - compile error

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

putUnmapMemory - compile error

suleman
Hi,

I am trying to use putMapBuffers, program work OK when i donot use "putUnmapMemory" calls, when i use those calls (as shown in following code) Java compiler complains:

memTest]$ javac *.java
MemTest.java:102: cannot find symbol
symbol  : method putUnmapMemory(com.jogamp.opencl.CLBuffer<capture#107 of ?>)
location: class com.jogamp.opencl.CLCommandQueue
                queue.putUnmapMemory(clBufferA);
                     ^
MemTest.java:103: cannot find symbol
symbol  : method putUnmapMemory(com.jogamp.opencl.CLBuffer<capture#645 of ?>)
location: class com.jogamp.opencl.CLCommandQueue
                queue.putUnmapMemory(clBufferB);
                     ^
MemTest.java:104: cannot find symbol
symbol  : method putUnmapMemory(com.jogamp.opencl.CLBuffer<capture#65 of ?>)
location: class com.jogamp.opencl.CLCommandQueue
                queue.putUnmapMemory(clBufferC);
                     ^
3 errors


Program code
------------------------------------------
....
 CLBuffer<?> clBufferA = context.createBuffer((globalWorkSize*4), Mem.READ_ONLY, ALLOCATE_BUFFER);
 CLBuffer<?> clBufferB = context.createBuffer((globalWorkSize*4), Mem.READ_ONLY, ALLOCATE_BUFFER);
 CLBuffer<?> clBufferC = context.createBuffer((globalWorkSize*4), Mem.WRITE_ONLY, ALLOCATE_BUFFER);
.....
ByteBuffer h_data1 = queue.putMapBuffer(clBufferA,WRITE,true);
ByteBuffer h_data2 = queue.putMapBuffer(clBufferB,WRITE,true);
queue.put1DRangeKernel(kernel, 0, globalWorkSize, localWorkSize);
ByteBuffer h_data3 = queue.putMapBuffer(clBufferC,READ,true);

queue.putUnmapMemory(clBufferA);
queue.putUnmapMemory(clBufferB);
queue.putUnmapMemory(clBufferC);
Reply | Threaded
Open this post in threaded view
|

Re: putUnmapMemory - compile error

Michael Bien
  Hi,

the current usage is:
ByteBuffer mapped = queue.putMapMemory(clBuffer);
//...
queue.putUnmapMemory(clBuffer, mapped);


OpenCL requires the OpenCL buffer and the pointer to the mapped memory
for the unmap operation. Long time ago the method was indeed
only putUnmapMemory(clBuffer) but it required to create a clone of the
clBuffer which was IMO to confusing.

very old version:
ByteBuffer mapped = queue.putMapMemory(clBuffer);
//...
queue.putUnmapMemory(clBuffer.cloneWith(mapped));

best regards,
michael

--
http://michael-bien.com/

On 06/28/2011 02:31 PM, suleman [via jogamp] wrote:

>
> Hi,
>
> I am trying to use putMapBuffers, program work OK when i donot use
> "putUnmapMemory" calls, when i use those calls (as shown in following code)
> Java compiler complains:
>
> memTest]$ javac *.java
> MemTest.java:102: cannot find symbol
> symbol  : method putUnmapMemory(com.jogamp.opencl.CLBuffer&lt;capture#107 of
> ?&gt;)
> location: class com.jogamp.opencl.CLCommandQueue
>                  queue.putUnmapMemory(clBufferA);
>                       ^
> MemTest.java:103: cannot find symbol
> symbol  : method putUnmapMemory(com.jogamp.opencl.CLBuffer&lt;capture#645 of
> ?&gt;)
> location: class com.jogamp.opencl.CLCommandQueue
>                  queue.putUnmapMemory(clBufferB);
>                       ^
> MemTest.java:104: cannot find symbol
> symbol  : method putUnmapMemory(com.jogamp.opencl.CLBuffer&lt;capture#65 of
> ?&gt;)
> location: class com.jogamp.opencl.CLCommandQueue
>                  queue.putUnmapMemory(clBufferC);
>                       ^
> 3 errors
>
>
> Program code
> ------------------------------------------
> ....
>   CLBuffer<?>  clBufferA = context.createBuffer((globalWorkSize*4),
> Mem.READ_ONLY, ALLOCATE_BUFFER);
>   CLBuffer<?>  clBufferB = context.createBuffer((globalWorkSize*4),
> Mem.READ_ONLY, ALLOCATE_BUFFER);
>   CLBuffer<?>  clBufferC = context.createBuffer((globalWorkSize*4),
> Mem.WRITE_ONLY, ALLOCATE_BUFFER);
> .....
> ByteBuffer h_data1 = queue.putMapBuffer(clBufferA,WRITE,true);
> ByteBuffer h_data2 = queue.putMapBuffer(clBufferB,WRITE,true);
> queue.put1DRangeKernel(kernel, 0, globalWorkSize, localWorkSize);
> ByteBuffer h_data3 = queue.putMapBuffer(clBufferC,READ,true);
>
> queue.putUnmapMemory(clBufferA);
> queue.putUnmapMemory(clBufferB);
> queue.putUnmapMemory(clBufferC);
>