2012-08-31 4 views
0
I가 clEnqueueReadBuffer에서 실험, I 예외했습니다

: 글JOCL이있는 Java OpenCL : 직접 버퍼 란 무엇입니까?

예외 "메인"java.lang.IllegalArgumentException가 : 판독 동작을 비 - 차단에만 직접 버퍼이를

포인터를 이용하여 수행 될 수있다 라인 : zCacheMem이 cl_mem 인 경우

ec.add(clEnqueueReadBuffer(commandQueue, zCacheMem, false, 0, Sizeof.cl_int*numWords, zCachePtr, 0 , null, readEvents[0])); 

이 zCachePtr가 INT []

나는이 오류를 설명 모든 문서를 찾을 수 없습니다를 가리키고 있습니다. 누군가 도울 수 있습니까?

답변

3

예, ByteBuffer.allocateDirect()를 사용하여 버퍼를 할당하거나 JOCL의 할당 자 함수를 사용해야합니다.

byte [] 또는 int []와 같은 Java 할당 배열을 버퍼에 래핑하면 작동하지 않습니다.

직접 버퍼는 장치의 주소 공간에 직접 매핑 될 수 있습니다. 이것들은 어떻게 든 JVM의 '외부'입니다.

비 직접 버퍼는 Java 힙에 할당되며 JVM (및 가비지 컬렉터 등)에 의해 관리됩니다.

2

직접 ByteBuffer은 원시 메모리와 Java간에 데이터를 효율적으로 교환하는 일반적인 방법입니다. 효과적으로 malloc의 메모리에 대한 래퍼입니다.