clEnqueueTask() failed with error code CL_INVALID_COMMAND_QUEUE.
Hello,
I am implementing channel in multi-kernel application. There are 5 single task kernel assume named K1, K2, K3, K4 and K5. There are called Following sequence K1 K1 K2 K3 K4 K4. I am creating channel between K2 and K4. Here is the kernel arguments.
I am getting error CL_INVALID_COMMAND_QUEUE from bold line.
Can anyone help about this error. Thank you.
GetTime(start);
CL_SAFE_CALL( clSetKernelArg(kernel1, 0, sizeof(void *), (void*) &input_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel1, 1, sizeof(void *), (void*) &output_hidden_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel1, 2, sizeof(void *), (void*) &input_hidden_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel1, 3, sizeof(cl_int), (void*) &in ) );
CL_SAFE_CALL( clSetKernelArg(kernel1, 4, sizeof(cl_int), (void*) &hid ) );
#ifdef PROFILE
GetTime(start1);
#endif
CL_SAFE_CALL( clEnqueueTask(cmd_queue, kernel1, 0, NULL, NULL) );
#ifdef PROFILE
//clFinish(cmd_queue);
GetTime(end1);
printf("Kernel 1: %f ms\n", TimeDiff(start1, end1));
#endif
CL_SAFE_CALL( clSetKernelArg(kernel1, 0, sizeof(void *), (void*) &output_hidden_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel1, 1, sizeof(void *), (void*) &output_hidden_ocl2) );
CL_SAFE_CALL( clSetKernelArg(kernel1, 2, sizeof(void *), (void*) &input_hidden_ocl2 ) );
CL_SAFE_CALL( clSetKernelArg(kernel1, 3, sizeof(cl_int), (void*) &hid ) );
CL_SAFE_CALL( clSetKernelArg(kernel1, 4, sizeof(cl_int), (void*) &out ) );
#ifdef PROFILE
GetTime(start1);
#endif
CL_SAFE_CALL( clEnqueueTask(cmd_queue, kernel1, 0, NULL, &k1_1) );
#ifdef PROFILE
//clFinish(cmd_queue);
GetTime(end1);
printf("Kernel 2: %f ms\n", TimeDiff(start1, end1));
#endif
//CL_SAFE_CALL( clSetKernelArg(kernel2, 0, sizeof(void *), (void*) &output_delta_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel2, 0, sizeof(void *), (void*) &target_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel2, 1, sizeof(void *), (void*) &output_hidden_ocl2) );
CL_SAFE_CALL( clSetKernelArg(kernel2, 2, sizeof(cl_int), (void*) &out ) );
CL_SAFE_CALL( clSetKernelArg(kernel2, 3, sizeof(void *), (void*) &out_err_ocl ) );
#ifdef PROFILE
GetTime(start1);
#endif
CL_SAFE_CALL( clEnqueueTask(cmd_queue, kernel2, 0 , NULL, NULL) );
#ifdef PROFILE
//clFinish(cmd_queue);
GetTime(end1);
printf("Kernel 3: %f ms\n", TimeDiff(start1, end1));
#endif
CL_SAFE_CALL( clSetKernelArg(kernel3, 0, sizeof(void *), (void*) &hidden_delta_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel3, 1, sizeof(cl_int), (void*) &hid ) );
//CL_SAFE_CALL( clSetKernelArg(kernel3, 2, sizeof(void *), (void*) &output_delta_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel3, 2, sizeof(cl_int), (void*) &out ) );
CL_SAFE_CALL( clSetKernelArg(kernel3, 3, sizeof(void *), (void*) &input_hidden_ocl2) );
CL_SAFE_CALL( clSetKernelArg(kernel3, 4, sizeof(void *), (void*) &output_hidden_ocl) );
CL_SAFE_CALL( clSetKernelArg(kernel3, 5, sizeof(void *), (void*) &hid_err_ocl ) );
#ifdef PROFILE
GetTime(start1);
#endif
CL_SAFE_CALL( clEnqueueTask(cmd_queue2, kernel3, 1, &k1_1, &k3) );
#ifdef PROFILE
//clFinish(cmd_queue2);
GetTime(end1);
printf("Kernel 4: %f ms\n", TimeDiff(start1, end1));
#endif
CL_SAFE_CALL( clSetKernelArg(kernel4, 0, sizeof(void *), (void*) &output_delta_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel4, 1, sizeof(cl_int), (void*) &out ) );
CL_SAFE_CALL( clSetKernelArg(kernel4, 2, sizeof(void *), (void*) &output_hidden_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel4, 3, sizeof(cl_int), (void*) &hid ) );
CL_SAFE_CALL( clSetKernelArg(kernel4, 4, sizeof(void *), (void*) &input_hidden_ocl2 ) ); //read back
CL_SAFE_CALL( clSetKernelArg(kernel4, 5, sizeof(void *), (void*) &hidden_prev_weights_ocl) );
#ifdef PROFILE
GetTime(start1);
#endif
CL_SAFE_CALL( clEnqueueTask(cmd_queue, kernel4, 1, &k3, NULL) );
#ifdef PROFILE
//clFinish(cmd_queue);
GetTime(end1);
printf("Kernel 5: %f ms\n", TimeDiff(start1, end1));
#endif
CL_SAFE_CALL( clSetKernelArg(kernel4, 0, sizeof(void *), (void*) &hidden_delta_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel4, 1, sizeof(cl_int), (void*) &hid ) );
CL_SAFE_CALL( clSetKernelArg(kernel4, 2, sizeof(void *), (void*) &input_ocl ) );
CL_SAFE_CALL( clSetKernelArg(kernel4, 3, sizeof(cl_int), (void*) &in ) );
CL_SAFE_CALL( clSetKernelArg(kernel4, 4, sizeof(void *), (void*) &input_hidden_ocl ) ); // read back
CL_SAFE_CALL( clSetKernelArg(kernel4, 5, sizeof(void *), (void*) &input_prev_weights_ocl ) );
#ifdef PROFILE
GetTime(start1);
#endif