static void JNICALL Extraej_cb_ThreadStart (jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread) { jvmtiThreadInfo ti; jvmtiError r; UNREFERENCED_PARAMETER(jni_env); r = (*jvmti_env)->GetThreadInfo(jvmti_env, thread, &ti); CHECK_JVMTI_ERROR(r, AddCapabilities); Extrae_set_thread_name (THREADID, ti.name); }
void Extrae_OpenCL_clCreateCommandQueue (cl_command_queue queue, cl_device_id device, cl_command_queue_properties properties) { if (!Extrae_OpenCL_lookForOpenCLQueue (queue, NULL)) { cl_int err; char _threadname[THREAD_INFO_NAME_LEN]; char _hostname[HOST_NAME_MAX]; char *_device_type; int prev_threadid, found, idx; cl_device_type device_type; cl_event event; idx = nCommandQueues; CommandQueues = (RegisteredCommandQueue_t*) realloc ( CommandQueues, sizeof(RegisteredCommandQueue_t)*(nCommandQueues+1)); if (CommandQueues == NULL) { fprintf (stderr, PACKAGE_NAME": Fatal error! Failed to allocate memory for OpenCL Command Queues\n"); exit (-1); } CommandQueues[idx].queue = queue; CommandQueues[idx].isOutOfOrder = (properties & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) != 0; err = clGetDeviceInfo (device, CL_DEVICE_TYPE, sizeof(device_type), &device_type, NULL); if (err == CL_SUCCESS) { if (device_type == CL_DEVICE_TYPE_GPU) _device_type = "GPU"; else if (device_type == CL_DEVICE_TYPE_CPU) _device_type = "CPU"; else _device_type = "Other"; } else _device_type = "Unknown"; /* Was the thread created before (i.e. did we executed a cudadevicereset?) */ if (gethostname(_hostname, HOST_NAME_MAX) == 0) sprintf (_threadname, "OpenCL-%s-CQ%d-%s", _device_type, 1+idx, _hostname); else sprintf (_threadname, "OpenCL-%s-CQ%d-%s", _device_type, 1+idx, "unknown-host"); prev_threadid = Extrae_search_thread_name (_threadname, &found); if (found) { /* If thread name existed, reuse its thread id */ CommandQueues[idx].threadid = prev_threadid; } else { /* For timing purposes we change num of threads here instead of doing Backend_getNumberOfThreads() + CUDAdevices*/ Backend_ChangeNumberOfThreads (Backend_getNumberOfThreads() + 1); CommandQueues[idx].threadid = Backend_getNumberOfThreads()-1; /* Set thread name */ Extrae_set_thread_name (CommandQueues[idx].threadid, _threadname); } CommandQueues[idx].nevents = 0; #ifdef CL_VERSION_1_2 err = clEnqueueBarrierWithWaitList (queue, 0, NULL, &event); #else err = clEnqueueBarrier (queue); if (err == CL_SUCCESS) err = clEnqueueMarker (queue, &event); #endif CommandQueues[idx].host_reference_time = TIME; if (err == CL_SUCCESS) { err = clFinish(queue); if (err != CL_SUCCESS) { fprintf (stderr, PACKAGE_NAME": Error in clFinish (error = %d)! Dying...\n", err); exit (-1); } err = clGetEventProfilingInfo (event, CL_PROFILING_COMMAND_SUBMIT, sizeof(cl_ulong), &(CommandQueues[idx].device_reference_time), NULL); if (err != CL_SUCCESS) { fprintf (stderr, PACKAGE_NAME": Error in clGetEventProfilingInfo (error = %d)! Dying...\n", err); exit (-1); } } else { fprintf (stderr, PACKAGE_NAME": Error while looking for clock references in host & accelerator\n"); exit (-1); } nCommandQueues++; } }