/* Tom Gall (tom.gall@linaro.org / tom_gall@mac.com) * Copyright 2014 Linaro * Released under the terms and conditions of the license documented in the LICENSE file */ int opencl_select(opencl_sqlite_context *s, int work_units_per_kernel) { // cl_event prof_event; // cl_ulong time_start, time_end, total_time=0; int stride; int totalRows, err; totalRows = s->data_cpu->rows; stride = s->data_cpu->stride/sizeof(int); // printf("%d total Rows %d stride\n", totalRows, stride); err=clSetKernelArg(s->kernel, 0, sizeof(int), &totalRows); err|=clSetKernelArg(s->kernel, 1, sizeof(int), &(stride)); err|=clSetKernelArg(s->kernel, 2, sizeof(cl_mem), &(s->data_gpu->d)); err|=clSetKernelArg(s->kernel, 3, sizeof(cl_mem), &(s->results_gpu->r)); if (s->results_gpu->roffsetResults_cl) err|=clSetKernelArg(s->kernel, 4, sizeof(cl_mem), &(s->results_gpu->roffsetResults_cl)); if(err < 0) { perror("Couldn't set a kernel arg"); exit(1); } err = clEnqueueNDRangeKernel(s->queue, s->kernel, 1, // 1 dimention of data NULL, &work_units_per_kernel, NULL, 0, NULL, NULL); if(err < 0) { perror("Couldn't enqueue the kernel execution command"); exit(1); } clFinish(s->queue); /* clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_START, sizeof(time_start), &time_start, NULL); clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_END, sizeof(time_end), &time_end, NULL); total_time = time_end - time_start; printf("dispatch time: %llu microseconds\n", total_time/1000); */ return OPENCL_SUCCESS;; } int opencl_rowcolumn_select(opencl_sqlite_context *s, int work_units_per_kernel) { // cl_event prof_event; // cl_ulong time_start, time_end, total_time=0; // int stride; int totalRows, err; totalRows = s->data_cpu->rows; //stride = s->data_cpu->stride/sizeof(int); // printf("%d total Rows %d stride\n", totalRows, stride); err=clSetKernelArg(s->kernel, 0, sizeof(int), &totalRows); err|=clSetKernelArg(s->kernel, 1, sizeof(cl_mem), &(s->data_gpu->d)); err|=clSetKernelArg(s->kernel, 2, sizeof(cl_mem), &(s->results_gpu->r)); if (s->results_gpu->roffsetResults_cl) err|=clSetKernelArg(s->kernel, 3, sizeof(cl_mem), &(s->results_gpu->roffsetResults_cl)); if(err < 0) { perror("Couldn't set a kernel arg"); exit(1); } err = clEnqueueNDRangeKernel(s->queue, s->kernel, 1, // 1 dimention of data NULL, &work_units_per_kernel, NULL, 0, NULL, NULL); if(err < 0) { perror("Couldn't enqueue the kernel execution command"); exit(1); } clFinish(s->queue); /* clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_START, sizeof(time_start), &time_start, NULL); clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_END, sizeof(time_end), &time_end, NULL); total_time = time_end - time_start; printf("dispatch time: %llu microseconds\n", total_time/1000); */ return OPENCL_SUCCESS; } int opencl_vector_select(opencl_sqlite_context *s, opencl_data_shard *col1_shard, opencl_data_shard *col2_shard, int work_units_per_kernel) { // cl_event prof_event; // cl_ulong time_start, time_end, total_time=0; int totalRows, err; totalRows = s->data_cpu->rows; // totalRows = 12; // work_units_per_kernel = 1; // s->data_cpu->rows = 12; err=clSetKernelArg(s->kernel, 0, sizeof(int), &totalRows); err|=clSetKernelArg(s->kernel, 1, sizeof(cl_mem), &(col1_shard->d)); err|=clSetKernelArg(s->kernel, 2, sizeof(cl_mem), &(col2_shard->d)); err|=clSetKernelArg(s->kernel, 3, sizeof(cl_mem), &(s->results_gpu->r)); if(err < 0) { perror("Couldn't set a kernel arg"); exit(1); } err = clEnqueueNDRangeKernel(s->queue, s->kernel, 1, // 1 dimention of data NULL, &work_units_per_kernel, NULL, 0, NULL, NULL); if(err < 0) { perror("Couldn't enqueue the kernel execution command"); exit(1); } clFinish(s->queue); /* clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_START, sizeof(time_start), &time_start, NULL); clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_END, sizeof(time_end), &time_end, NULL); total_time = time_end - time_start; printf("dispatch time: %llu microseconds\n", total_time/1000); */ return OPENCL_SUCCESS; }