Skip to content
Snippets Groups Projects
Commit 29a057b0 authored by Jeffrey Phillips Freeman's avatar Jeffrey Phillips Freeman :boom: Committed by GitHub
Browse files

Merge pull request #4 from Syncleus/additions

Several new additions.
parents 80dd15ec 4d9369d2
No related branches found
No related tags found
No related merge requests found
# Aparapi jni Change Log # Aparapi jni Change Log
## 1.2.0
* Fixed the context to a single device instead of all devices of a specific device type. creating a context per type breaks compilation on dopencl.
* Added jni method to write device name
## 1.1.2 ## 1.1.2
* Fixed a bug whereby the kernel was compiled twice. * Fixed a bug whereby the kernel was compiled twice.
......
# Contributors # Contributors
* Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com> * Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com>
* Florian Roesler <florian.roesler@wooga.net>
* Witold Bolt * Witold Bolt
* Kenneth Skovhede * Kenneth Skovhede
* Ryan LaMothe * Ryan LaMothe
...@@ -24,4 +25,4 @@ Below are some of the specific details of various contributions. ...@@ -24,4 +25,4 @@ Below are some of the specific details of various contributions.
* Steven Libby provided patch for #6 (Allow finer control over fallback mode selection) Aug 21th 2012 * Steven Libby provided patch for #6 (Allow finer control over fallback mode selection) Aug 21th 2012
* Steven Libby and Ryan Lamothe for #10 (Support for OpenMP, major refactoring cleanup and support for multidim arrays) March 28th 2013 * Steven Libby and Ryan Lamothe for #10 (Support for OpenMP, major refactoring cleanup and support for multidim arrays) March 28th 2013
* Paul Miner issue #61 and #115 (JTP Speed up and fixes to explicit puts) June 13th 2013 * Paul Miner issue #61 and #115 (JTP Speed up and fixes to explicit puts) June 13th 2013
& lgalluci for his fix for issue #121 (incorrect toString for 3D ranges) July 6th 2013 & lgalluci for his fix for issue #121 (incorrect toString for 3D ranges) July 6th 2013
\ No newline at end of file
AUTOMAKE_OPTIONS = foreign AUTOMAKE_OPTIONS = foreign
EXTRA_DIST = include src/cpp/CLHelper.h src/cpp/classtools.h src/cpp/invoke/JavaArgs.h src/cpp/invoke/OpenCLMem.h src/cpp/invoke/OpenCLKernel.h src/cpp/invoke/OpenCLJNI.h src/cpp/invoke/OpenCLArgDescriptor.h src/cpp/invoke/OpenCLProgram.h src/cpp/CLException.h src/cpp/JNIHelper.h src/cpp/Common.h src/cpp/runKernel/KernelArg.h src/cpp/runKernel/Range.h src/cpp/runKernel/ProfileInfo.h src/cpp/runKernel/AparapiBuffer.h src/cpp/runKernel/Config.h src/cpp/runKernel/Aparapi.h src/cpp/runKernel/ArrayBuffer.h src/cpp/runKernel/JNIContext.h src/cpp/runKernel/List.h EXTRA_DIST = include src/cpp/CLHelper.h src/cpp/classtools.h src/cpp/invoke/JavaArgs.h src/cpp/invoke/OpenCLMem.h src/cpp/invoke/OpenCLKernel.h src/cpp/invoke/OpenCLJNI.h src/cpp/invoke/OpenCLArgDescriptor.h src/cpp/invoke/OpenCLProgram.h src/cpp/CLException.h src/cpp/JNIHelper.h src/cpp/Common.h src/cpp/runKernel/KernelArg.h src/cpp/runKernel/Range.h src/cpp/runKernel/ProfileInfo.h src/cpp/runKernel/AparapiBuffer.h src/cpp/runKernel/Config.h src/cpp/runKernel/Aparapi.h src/cpp/runKernel/ArrayBuffer.h src/cpp/runKernel/JNIContext.h src/cpp/runKernel/List.h
lib_LTLIBRARIES = libaparapi.la lib_LTLIBRARIES = libaparapi.la
libaparapi_la_LDFLAGS = -lOpenCL -version-info 2:2:1 libaparapi_la_LDFLAGS = -lOpenCL -version-info 3:0:2
libaparapi_la_CPPFLAGS = -Iinclude -I/opt/AMDAPP/SDK/include -Isrc/cpp -Isrc/cpp/runKernel -Isrc/cpp/invoke -I/usr/lib/jvm/java-8-openjdk/jre/../include -I/usr/lib/jvm/java-8-openjdk/jre/../include/linux -DCL_USE_DEPRECATED_OPENCL_1_1_APIS libaparapi_la_CPPFLAGS = -Iinclude -I/opt/AMDAPP/SDK/include -Isrc/cpp -Isrc/cpp/runKernel -Isrc/cpp/invoke -I/usr/lib/jvm/java-8-openjdk/jre/../include -I/usr/lib/jvm/java-8-openjdk/jre/../include/linux -DCL_USE_DEPRECATED_OPENCL_1_1_APIS
libaparapi_la_SOURCES = src/cpp/runKernel/Aparapi.cpp src/cpp/runKernel/ArrayBuffer.cpp src/cpp/runKernel/AparapiBuffer.cpp src/cpp/runKernel/Config.cpp src/cpp/runKernel/JNIContext.cpp src/cpp/runKernel/KernelArg.cpp src/cpp/runKernel/ProfileInfo.cpp src/cpp/runKernel/Range.cpp src/cpp/invoke/OpenCLJNI.cpp src/cpp/invoke/OpenCLArgDescriptor.cpp src/cpp/invoke/OpenCLMem.cpp src/cpp/CLHelper.cpp src/cpp/classtools.cpp src/cpp/JNIHelper.cpp src/cpp/agent.cpp libaparapi_la_SOURCES = src/cpp/runKernel/Aparapi.cpp src/cpp/runKernel/ArrayBuffer.cpp src/cpp/runKernel/AparapiBuffer.cpp src/cpp/runKernel/Config.cpp src/cpp/runKernel/JNIContext.cpp src/cpp/runKernel/KernelArg.cpp src/cpp/runKernel/ProfileInfo.cpp src/cpp/runKernel/Range.cpp src/cpp/invoke/OpenCLJNI.cpp src/cpp/invoke/OpenCLArgDescriptor.cpp src/cpp/invoke/OpenCLMem.cpp src/cpp/CLHelper.cpp src/cpp/classtools.cpp src/cpp/JNIHelper.cpp src/cpp/agent.cpp
all-local: all-local:
AC_INIT([libaparapi], [1.1.2], [jeffrey.freeman@syncleus.com]) AC_INIT([libaparapi], [1.2.0], [jeffrey.freeman@syncleus.com])
AC_ENABLE_SHARED(yes) AC_ENABLE_SHARED(yes)
AC_ENABLE_STATIC(no) AC_ENABLE_STATIC(no)
LT_INIT LT_INIT
......
Subproject commit 3ac598f63deba06015fa5de4e865f12b666d0a0a Subproject commit 16faa1d47a3966370310196be48ebca150022e63
...@@ -6,34 +6,34 @@ ...@@ -6,34 +6,34 @@
following conditions are met: following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer. disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution. disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission. derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
If you use the software (in whole or in part), you shall adhere to all applicable U.S., European, and other export If you use the software (in whole or in part), you shall adhere to all applicable U.S., European, and other export
laws, including but not limited to the U.S. Export Administration Regulations ("EAR"), (15 C.F.R. Sections 730 laws, including but not limited to the U.S. Export Administration Regulations ("EAR"), (15 C.F.R. Sections 730
through 774), and E.U. Council Regulation (EC) No 1334/2000 of 22 June 2000. Further, pursuant to Section 740.6 of through 774), and E.U. Council Regulation (EC) No 1334/2000 of 22 June 2000. Further, pursuant to Section 740.6 of
the EAR, you hereby certify that, except pursuant to a license granted by the United States Department of Commerce the EAR, you hereby certify that, except pursuant to a license granted by the United States Department of Commerce
Bureau of Industry and Security or as otherwise permitted pursuant to a License Exception under the U.S. Export Bureau of Industry and Security or as otherwise permitted pursuant to a License Exception under the U.S. Export
Administration Regulations ("EAR"), you will not (1) export, re-export or release to a national of a country in Administration Regulations ("EAR"), you will not (1) export, re-export or release to a national of a country in
Country Groups D:1, E:1 or E:2 any restricted technology, software, or source code you receive hereunder, or (2) Country Groups D:1, E:1 or E:2 any restricted technology, software, or source code you receive hereunder, or (2)
export to Country Groups D:1, E:1 or E:2 the direct product of such technology or software, if such foreign produced export to Country Groups D:1, E:1 or E:2 the direct product of such technology or software, if such foreign produced
direct product is subject to national security controls as identified on the Commerce Control List (currently direct product is subject to national security controls as identified on the Commerce Control List (currently
found in Supplement 1 to Part 774 of EAR). For the most current Country Group listings, or for additional found in Supplement 1 to Part 774 of EAR). For the most current Country Group listings, or for additional
information about the EAR or your obligations under those regulations, please refer to the U.S. Bureau of Industry information about the EAR or your obligations under those regulations, please refer to the U.S. Bureau of Industry
and Security�s website at http://www.bis.doc.gov/. and Security�s website at http://www.bis.doc.gov/.
*/ */
/** @opencljni.cpp */ /** @opencljni.cpp */
...@@ -50,9 +50,9 @@ ...@@ -50,9 +50,9 @@
#include "com_aparapi_internal_jni_OpenCLJNI.h" #include "com_aparapi_internal_jni_OpenCLJNI.h"
jobject OpenCLDevice::getPlatformInstance(JNIEnv *jenv, jobject deviceInstance){ jobject OpenCLDevice::getPlatformInstance(JNIEnv *jenv, jobject deviceInstance){
return(JNIHelper::getInstanceField<jobject>(jenv, deviceInstance, "platform", OpenCLPlatformClassArg )); return(JNIHelper::getInstanceField<jobject>(jenv, deviceInstance, "platform", OpenCLPlatformClassArg ));
} }
cl_device_id OpenCLDevice::getDeviceId(JNIEnv *jenv, jobject deviceInstance){ cl_device_id OpenCLDevice::getDeviceId(JNIEnv *jenv, jobject deviceInstance){
return((cl_device_id)JNIHelper::getInstanceField<jlong>(jenv, deviceInstance, "deviceId")); return((cl_device_id)JNIHelper::getInstanceField<jlong>(jenv, deviceInstance, "deviceId"));
} }
...@@ -122,7 +122,7 @@ JNI_JAVA(jobject, OpenCLJNI, createProgram) ...@@ -122,7 +122,7 @@ JNI_JAVA(jobject, OpenCLJNI, createProgram)
JNI_JAVA(jobject, OpenCLJNI, createKernelJNI) JNI_JAVA(jobject, OpenCLJNI, createKernelJNI)
(JNIEnv *jenv, jobject jobj, jobject programInstance, jstring name, jobjectArray args) { (JNIEnv *jenv, jobject jobj, jobject programInstance, jstring name, jobjectArray args) {
cl_context context = OpenCLProgram::getContext(jenv, programInstance); cl_context context = OpenCLProgram::getContext(jenv, programInstance);
cl_program program = OpenCLProgram::getProgram(jenv, programInstance); cl_program program = OpenCLProgram::getProgram(jenv, programInstance);
cl_int status = CL_SUCCESS; cl_int status = CL_SUCCESS;
const char *nameChars = jenv->GetStringUTFChars(name, NULL); const char *nameChars = jenv->GetStringUTFChars(name, NULL);
if(0)fprintf(stderr, "tring to extract kernel '%s'\n", nameChars); if(0)fprintf(stderr, "tring to extract kernel '%s'\n", nameChars);
...@@ -149,7 +149,7 @@ void putPrimative(JNIEnv* jenv, cl_kernel kernel, jobject arg, jint argIndex) { ...@@ -149,7 +149,7 @@ void putPrimative(JNIEnv* jenv, cl_kernel kernel, jobject arg, jint argIndex) {
cl_T value = JNIHelper::getInstanceField<jT>(jenv, arg, "value"); cl_T value = JNIHelper::getInstanceField<jT>(jenv, arg, "value");
cl_int status = clSetKernelArg(kernel, argIndex, sizeof(value), (void *)&(value)); cl_int status = clSetKernelArg(kernel, argIndex, sizeof(value), (void *)&(value));
if (status != CL_SUCCESS) { if (status != CL_SUCCESS) {
std::cerr << "error setting " << JNIHelper::getType((jT)0) << " arg " << argIndex std::cerr << "error setting " << JNIHelper::getType((jT)0) << " arg " << argIndex
<< " " << value << " " << CLHelper::errString(status) << "!\n"; << " " << value << " " << CLHelper::errString(status) << "!\n";
} }
} }
...@@ -157,7 +157,7 @@ void putPrimative(JNIEnv* jenv, cl_kernel kernel, jobject arg, jint argIndex) { ...@@ -157,7 +157,7 @@ void putPrimative(JNIEnv* jenv, cl_kernel kernel, jobject arg, jint argIndex) {
void putArg(JNIEnv *jenv, cl_context context, cl_kernel kernel, cl_command_queue commandQueue, cl_event *events, jint *eventc, jint argIndex, jobject argDef, jobject arg){ void putArg(JNIEnv *jenv, cl_context context, cl_kernel kernel, cl_command_queue commandQueue, cl_event *events, jint *eventc, jint argIndex, jobject argDef, jobject arg){
cl_int status = CL_SUCCESS; cl_int status = CL_SUCCESS;
jlong argBits = OpenCLArgDescriptor::getBits(jenv, argDef); jlong argBits = OpenCLArgDescriptor::getBits(jenv, argDef);
if (argisset(argBits, ARRAY) && argisset(argBits, GLOBAL)){ if (argisset(argBits, ARRAY) && argisset(argBits, GLOBAL)){
jobject memInstance = OpenCLArgDescriptor::getMemInstance(jenv, argDef); jobject memInstance = OpenCLArgDescriptor::getMemInstance(jenv, argDef);
if (memInstance == NULL){ if (memInstance == NULL){
// first call? // first call?
...@@ -167,12 +167,12 @@ void putArg(JNIEnv *jenv, cl_context context, cl_kernel kernel, cl_command_queue ...@@ -167,12 +167,12 @@ void putArg(JNIEnv *jenv, cl_context context, cl_kernel kernel, cl_command_queue
// check of argBits == memInstance.argBits // check of argBits == memInstance.argBits
// we need to pin it // we need to pin it
// jboolean isCopy; // jboolean isCopy;
void *ptr = OpenCLMem::pin(jenv, (jarray)arg, &argBits); void *ptr = OpenCLMem::pin(jenv, (jarray)arg, &argBits);
void *oldPtr = OpenCLMem::getAddress(jenv, memInstance); void *oldPtr = OpenCLMem::getAddress(jenv, memInstance);
//ptr moved //ptr moved
if (ptr != oldPtr){ if (ptr != oldPtr){
cl_mem mem = OpenCLMem::getMem(jenv, memInstance); cl_mem mem = OpenCLMem::getMem(jenv, memInstance);
status = clReleaseMemObject(mem); status = clReleaseMemObject(mem);
memInstance = OpenCLMem::create(jenv, context, argBits, (jarray)arg); memInstance = OpenCLMem::create(jenv, context, argBits, (jarray)arg);
OpenCLArgDescriptor::setMemInstance(jenv, argDef, memInstance); OpenCLArgDescriptor::setMemInstance(jenv, argDef, memInstance);
} }
...@@ -195,15 +195,15 @@ void putArg(JNIEnv *jenv, cl_context context, cl_kernel kernel, cl_command_queue ...@@ -195,15 +195,15 @@ void putArg(JNIEnv *jenv, cl_context context, cl_kernel kernel, cl_command_queue
} }
(*eventc)++; (*eventc)++;
} }
status = clSetKernelArg(kernel, argIndex, sizeof(cl_mem), (void *)&(mem)); status = clSetKernelArg(kernel, argIndex, sizeof(cl_mem), (void *)&(mem));
if (status != CL_SUCCESS) { if (status != CL_SUCCESS) {
fprintf(stderr, "error setting arg %d %s!\n", argIndex, CLHelper::errString(status)); fprintf(stderr, "error setting arg %d %s!\n", argIndex, CLHelper::errString(status));
} }
} else if (argisset(argBits, ARRAY) && argisset(argBits, LOCAL)){ } else if (argisset(argBits, ARRAY) && argisset(argBits, LOCAL)){
jsize sizeInBytes = OpenCLMem::getArraySizeInBytes(jenv, (jarray)arg, argBits); jsize sizeInBytes = OpenCLMem::getArraySizeInBytes(jenv, (jarray)arg, argBits);
cl_int status = CL_SUCCESS; cl_int status = CL_SUCCESS;
status = clSetKernelArg(kernel, argIndex, (size_t)sizeInBytes, (void *)NULL); status = clSetKernelArg(kernel, argIndex, (size_t)sizeInBytes, (void *)NULL);
if (status != CL_SUCCESS) { if (status != CL_SUCCESS) {
fprintf(stderr, "error setting arg %d %s!\n", argIndex, CLHelper::errString(status)); fprintf(stderr, "error setting arg %d %s!\n", argIndex, CLHelper::errString(status));
} }
...@@ -244,8 +244,8 @@ void getArg(JNIEnv *jenv, cl_context context, cl_command_queue commandQueue, cl_ ...@@ -244,8 +244,8 @@ void getArg(JNIEnv *jenv, cl_context context, cl_command_queue commandQueue, cl_
jobject arrayInstance = OpenCLMem::getInstance(jenv, memInstance); jobject arrayInstance = OpenCLMem::getInstance(jenv, memInstance);
jlong memBits = OpenCLMem::getBits(jenv, memInstance); jlong memBits = OpenCLMem::getBits(jenv, memInstance);
OpenCLMem::unpin(jenv, (jarray)arrayInstance, ptr, &memBits); OpenCLMem::unpin(jenv, (jarray)arrayInstance, ptr, &memBits);
memreset(memBits, ENQUEUED); memreset(memBits, ENQUEUED);
memreset(memBits, COPY); memreset(memBits, COPY);
OpenCLMem::setBits(jenv, memInstance, memBits); OpenCLMem::setBits(jenv, memInstance, memBits);
} }
} }
...@@ -257,7 +257,7 @@ JNI_JAVA(jobject, OpenCLJNI, getProfileInfo) ...@@ -257,7 +257,7 @@ JNI_JAVA(jobject, OpenCLJNI, getProfileInfo)
if (profileInfoArr != NULL){ if (profileInfoArr != NULL){
for (int i=0; profileInfoArr[i] != NULL; i++){ for (int i=0; profileInfoArr[i] != NULL; i++){
jobject writeProfileInfo = profileInfoArr[i]->createProfileInfoInstance(jenv); jobject writeProfileInfo = profileInfoArr[i]->createProfileInfoInstance(jenv);
JNIHelper::callVoid(jenv, returnList, "add", ArgsBooleanReturn(ObjectClassArg), writeProfileInfo); JNIHelper::callVoid(jenv, returnList, "add", ArgsBooleanReturn(ObjectClassArg), writeProfileInfo);
} }
} }
return(returnList); return(returnList);
...@@ -303,7 +303,7 @@ JNI_JAVA(void, OpenCLJNI, disposeKernel) ...@@ -303,7 +303,7 @@ JNI_JAVA(void, OpenCLJNI, disposeKernel)
}else{ }else{
cl_mem mem = OpenCLMem::getMem(jenv, memInstance); cl_mem mem = OpenCLMem::getMem(jenv, memInstance);
size_t sizeInBytes = OpenCLMem::getSizeInBytes(jenv, memInstance); size_t sizeInBytes = OpenCLMem::getSizeInBytes(jenv, memInstance);
cl_int status = clReleaseMemObject(mem); cl_int status = clReleaseMemObject(mem);
//fprintf(stderr, "mem instance %d released!\n", sizeInBytes); //fprintf(stderr, "mem instance %d released!\n", sizeInBytes);
} }
} }
...@@ -325,7 +325,7 @@ JNI_JAVA(void, OpenCLJNI, invoke) ...@@ -325,7 +325,7 @@ JNI_JAVA(void, OpenCLJNI, invoke)
cl_command_queue commandQueue = OpenCLProgram::getCommandQueue(jenv, programInstance); cl_command_queue commandQueue = OpenCLProgram::getCommandQueue(jenv, programInstance);
// walk through the args creating buffers when needed // walk through the args creating buffers when needed
// we use the bitfields to determine which is which // we use the bitfields to determine which is which
// note that argArray[0] is the range then 1,2,3 etc matches argDefsArray[0,1,2] // note that argArray[0] is the range then 1,2,3 etc matches argDefsArray[0,1,2]
jsize argc = jenv->GetArrayLength(argDefsArray); jsize argc = jenv->GetArrayLength(argDefsArray);
...@@ -404,7 +404,7 @@ JNI_JAVA(void, OpenCLJNI, invoke) ...@@ -404,7 +404,7 @@ JNI_JAVA(void, OpenCLJNI, invoke)
//fprintf(stdout, "prev profile list was NULL\n"); //fprintf(stdout, "prev profile list was NULL\n");
} }
profileInfoArr = NULL; profileInfoArr = NULL;
profileInfoArr = new ProfileInfo*[eventc+1]; // add NULL to end! profileInfoArr = new ProfileInfo*[eventc+1]; // add NULL to end!
//fprintf(stdout, "allocated a new list %d\n", eventc+1); //fprintf(stdout, "allocated a new list %d\n", eventc+1);
for (int i=0;i<eventc; i++){ for (int i=0;i<eventc; i++){
...@@ -445,16 +445,16 @@ JNI_JAVA(jobject, OpenCLJNI, getPlatforms) ...@@ -445,16 +445,16 @@ JNI_JAVA(jobject, OpenCLJNI, getPlatforms)
#ifdef __APPLE__ #ifdef __APPLE__
|| !strncmp(platformVersionName, "OpenCL 1.0", 10) || !strncmp(platformVersionName, "OpenCL 1.0", 10)
#endif #endif
) { ) {
char platformVendorName[512]; char platformVendorName[512];
char platformName[512]; char platformName[512];
status = clGetPlatformInfo(platformIds[platformIdx], CL_PLATFORM_VENDOR, sizeof(platformVendorName), platformVendorName, NULL); status = clGetPlatformInfo(platformIds[platformIdx], CL_PLATFORM_VENDOR, sizeof(platformVendorName), platformVendorName, NULL);
status = clGetPlatformInfo(platformIds[platformIdx], CL_PLATFORM_NAME, sizeof(platformName), platformName, NULL); status = clGetPlatformInfo(platformIds[platformIdx], CL_PLATFORM_NAME, sizeof(platformName), platformName, NULL);
//fprintf(stderr, "platform vendor %d %s\n", platformIdx, platformVendorName); //fprintf(stderr, "platform vendor %d %s\n", platformIdx, platformVendorName);
//fprintf(stderr, "platform version %d %s\n", platformIdx, platformVersionName); //fprintf(stderr, "platform version %d %s\n", platformIdx, platformVersionName);
jobject platformInstance = JNIHelper::createInstance(jenv, OpenCLPlatformClass , ArgsVoidReturn(LongArg StringClassArg StringClassArg StringClassArg ), jobject platformInstance = JNIHelper::createInstance(jenv, OpenCLPlatformClass , ArgsVoidReturn(LongArg StringClassArg StringClassArg StringClassArg ),
(jlong)platformIds[platformIdx], (jlong)platformIds[platformIdx],
jenv->NewStringUTF(platformVersionName), jenv->NewStringUTF(platformVersionName),
jenv->NewStringUTF(platformVendorName), jenv->NewStringUTF(platformVendorName),
jenv->NewStringUTF(platformName) jenv->NewStringUTF(platformName)
); );
...@@ -498,7 +498,7 @@ JNI_JAVA(jobject, OpenCLJNI, getPlatforms) ...@@ -498,7 +498,7 @@ JNI_JAVA(jobject, OpenCLJNI, getPlatforms)
//fprintf(stderr, "device type pointer %p", deviceTypeEnumInstance); //fprintf(stderr, "device type pointer %p", deviceTypeEnumInstance);
jobject deviceInstance = JNIHelper::createInstance(jenv, OpenCLDeviceClass, ArgsVoidReturn( OpenCLPlatformClassArg LongArg DeviceTypeClassArg ), jobject deviceInstance = JNIHelper::createInstance(jenv, OpenCLDeviceClass, ArgsVoidReturn( OpenCLPlatformClassArg LongArg DeviceTypeClassArg ),
platformInstance, platformInstance,
(jlong)deviceIds[deviceIdx], (jlong)deviceIds[deviceIdx],
deviceTypeEnumInstance); deviceTypeEnumInstance);
JNIHelper::callVoid(jenv, platformInstance, "addOpenCLDevice", ArgsVoidReturn( OpenCLDeviceClassArg ), deviceInstance); JNIHelper::callVoid(jenv, platformInstance, "addOpenCLDevice", ArgsVoidReturn( OpenCLDeviceClassArg ), deviceInstance);
...@@ -543,6 +543,13 @@ JNI_JAVA(jobject, OpenCLJNI, getPlatforms) ...@@ -543,6 +543,13 @@ JNI_JAVA(jobject, OpenCLJNI, getPlatforms)
status = clGetDeviceInfo(deviceIds[deviceIdx], CL_DEVICE_LOCAL_MEM_SIZE, sizeof(localMemSize), &localMemSize, NULL); status = clGetDeviceInfo(deviceIds[deviceIdx], CL_DEVICE_LOCAL_MEM_SIZE, sizeof(localMemSize), &localMemSize, NULL);
//fprintf(stderr, "device[%d] CL_DEVICE_LOCAL_MEM_SIZE = %lu\n", deviceIdx, localMemSize); //fprintf(stderr, "device[%d] CL_DEVICE_LOCAL_MEM_SIZE = %lu\n", deviceIdx, localMemSize);
JNIHelper::callVoid(jenv, deviceInstance, "setLocalMemSize", ArgsVoidReturn(LongArg), localMemSize); JNIHelper::callVoid(jenv, deviceInstance, "setLocalMemSize", ArgsVoidReturn(LongArg), localMemSize);
char* value;
size_t valueSize;
clGetDeviceInfo(deviceIds[deviceIdx], CL_DEVICE_NAME, 0, NULL, &valueSize);
value = (char*) malloc(valueSize);
clGetDeviceInfo(deviceIds[deviceIdx], CL_DEVICE_NAME, valueSize, value, NULL);
JNIHelper::callVoid(jenv, deviceInstance, "setName", ArgsVoidReturn(StringClassArg), jenv->NewStringUTF(value));
} }
} }
...@@ -553,4 +560,3 @@ JNI_JAVA(jobject, OpenCLJNI, getPlatforms) ...@@ -553,4 +560,3 @@ JNI_JAVA(jobject, OpenCLJNI, getPlatforms)
return (platformListInstance); return (platformListInstance);
} }
...@@ -2,16 +2,16 @@ ...@@ -2,16 +2,16 @@
#include "OpenCLJNI.h" #include "OpenCLJNI.h"
#include "List.h" #include "List.h"
JNIContext::JNIContext(JNIEnv *jenv, jobject _kernelObject, jobject _openCLDeviceObject, jint _flags): JNIContext::JNIContext(JNIEnv *jenv, jobject _kernelObject, jobject _openCLDeviceObject, jint _flags):
kernelObject(jenv->NewGlobalRef(_kernelObject)), kernelObject(jenv->NewGlobalRef(_kernelObject)),
kernelClass((jclass)jenv->NewGlobalRef(jenv->GetObjectClass(_kernelObject))), kernelClass((jclass)jenv->NewGlobalRef(jenv->GetObjectClass(_kernelObject))),
openCLDeviceObject(jenv->NewGlobalRef(_openCLDeviceObject)), openCLDeviceObject(jenv->NewGlobalRef(_openCLDeviceObject)),
flags(_flags), flags(_flags),
profileBaseTime(0), profileBaseTime(0),
passes(0), passes(0),
exec(NULL), exec(NULL),
deviceType(((flags&com_aparapi_internal_jni_KernelRunnerJNI_JNI_FLAG_USE_GPU)==com_aparapi_internal_jni_KernelRunnerJNI_JNI_FLAG_USE_GPU)?CL_DEVICE_TYPE_GPU:CL_DEVICE_TYPE_CPU), deviceType(((flags&com_aparapi_internal_jni_KernelRunnerJNI_JNI_FLAG_USE_GPU)==com_aparapi_internal_jni_KernelRunnerJNI_JNI_FLAG_USE_GPU)?CL_DEVICE_TYPE_GPU:CL_DEVICE_TYPE_CPU),
profileFile(NULL), profileFile(NULL),
valid(JNI_FALSE){ valid(JNI_FALSE){
if (flags&com_aparapi_internal_jni_KernelRunnerJNI_JNI_FLAG_USE_ACC) if (flags&com_aparapi_internal_jni_KernelRunnerJNI_JNI_FLAG_USE_ACC)
deviceType = CL_DEVICE_TYPE_ACCELERATOR; deviceType = CL_DEVICE_TYPE_ACCELERATOR;
...@@ -25,7 +25,7 @@ JNIContext::JNIContext(JNIEnv *jenv, jobject _kernelObject, jobject _openCLDevic ...@@ -25,7 +25,7 @@ JNIContext::JNIContext(JNIEnv *jenv, jobject _kernelObject, jobject _openCLDevic
cl_context_properties cps[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platformId, 0 }; cl_context_properties cps[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platformId, 0 };
cl_context_properties* cprops = (NULL == platformId) ? NULL : cps; cl_context_properties* cprops = (NULL == platformId) ? NULL : cps;
context = clCreateContextFromType( cprops, returnedDeviceType, NULL, NULL, &status); context = clCreateContext( cprops, 1, &deviceId, NULL, NULL, &status);
CLException::checkCLError(status, "clCreateContextFromType()"); CLException::checkCLError(status, "clCreateContextFromType()");
if (status == CL_SUCCESS){ if (status == CL_SUCCESS){
valid = JNI_TRUE; valid = JNI_TRUE;
...@@ -97,7 +97,7 @@ void JNIContext::dispose(JNIEnv *jenv, Config* config) { ...@@ -97,7 +97,7 @@ void JNIContext::dispose(JNIEnv *jenv, Config* config) {
arg->aparapiBuffer->mem = (cl_mem)0; arg->aparapiBuffer->mem = (cl_mem)0;
} }
if (arg->aparapiBuffer->javaObject != NULL) { if (arg->aparapiBuffer->javaObject != NULL) {
jenv->DeleteWeakGlobalRef((jweak) arg->aparapiBuffer->javaObject); jenv->DeleteWeakGlobalRef((jweak) arg->aparapiBuffer->javaObject);
} }
delete arg->aparapiBuffer; delete arg->aparapiBuffer;
arg->aparapiBuffer = NULL; arg->aparapiBuffer = NULL;
...@@ -128,15 +128,15 @@ void JNIContext::dispose(JNIEnv *jenv, Config* config) { ...@@ -128,15 +128,15 @@ void JNIContext::dispose(JNIEnv *jenv, Config* config) {
} }
delete[] readEventArgs; readEventArgs=0; delete[] readEventArgs; readEventArgs=0;
delete[] writeEventArgs; writeEventArgs=0; delete[] writeEventArgs; writeEventArgs=0;
} }
} }
if (config->isTrackingOpenCLResources()){ if (config->isTrackingOpenCLResources()){
fprintf(stderr, "after dispose{ \n"); fprintf(stderr, "after dispose{ \n");
commandQueueList.report(stderr); commandQueueList.report(stderr);
memList.report(stderr); memList.report(stderr);
readEventList.report(stderr); readEventList.report(stderr);
executeEventList.report(stderr); executeEventList.report(stderr);
writeEventList.report(stderr); writeEventList.report(stderr);
fprintf(stderr, "}\n"); fprintf(stderr, "}\n");
} }
} }
...@@ -149,4 +149,3 @@ void JNIContext::unpinAll(JNIEnv* jenv) { ...@@ -149,4 +149,3 @@ void JNIContext::unpinAll(JNIEnv* jenv) {
} }
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment