remove the clCreateProgramWithSource interceptor (#1559)
* remove the clCreateProgramWithSource interceptor * that's old code, thneed is better * label them thneed_, we shouldn't need to touch CL for anything not SNPE relatedpull/1560/head
parent
86057f785b
commit
b8571710e0
3 changed files with 12 additions and 168 deletions
@ -1,3 +0,0 @@ |
|||||||
#!/bin/sh |
|
||||||
gcc -fPIC -I /data/openpilot/phonelibs/opencl/include -shared hook.c |
|
||||||
|
|
@ -1,155 +0,0 @@ |
|||||||
#include <stdio.h> |
|
||||||
#include <stdlib.h> |
|
||||||
#include <dlfcn.h> |
|
||||||
#include <CL/cl.h> |
|
||||||
#include <stdint.h> |
|
||||||
#include <time.h> |
|
||||||
|
|
||||||
static inline uint64_t nanos_since_boot() { |
|
||||||
struct timespec t; |
|
||||||
clock_gettime(CLOCK_BOOTTIME, &t); |
|
||||||
return t.tv_sec * 1000000000ULL + t.tv_nsec; |
|
||||||
} |
|
||||||
|
|
||||||
struct kernel { |
|
||||||
cl_kernel k; |
|
||||||
const char *name; |
|
||||||
cl_program p; |
|
||||||
}; |
|
||||||
|
|
||||||
|
|
||||||
int k_index = 0; |
|
||||||
struct kernel kk[0x1000] = {0}; |
|
||||||
|
|
||||||
FILE *f = NULL; |
|
||||||
|
|
||||||
cl_program clCreateProgramWithSource(cl_context context, |
|
||||||
cl_uint count, |
|
||||||
const char **strings, |
|
||||||
const size_t *lengths, |
|
||||||
cl_int *errcode_ret) { |
|
||||||
printf("clCreateProgramWithSource: %d\n", count); |
|
||||||
|
|
||||||
if (f == NULL) { |
|
||||||
f = fopen("/tmp/kernels.cl", "w"); |
|
||||||
} |
|
||||||
|
|
||||||
fprintf(f, "/* ************************ PROGRAM BREAK ****************************/\n"); |
|
||||||
for (int i = 0; i < count; i++) { |
|
||||||
fprintf(f, "%s\n", strings[i]); |
|
||||||
if (i != 0) fprintf(f, "/* ************************ SECTION BREAK ****************************/\n"); |
|
||||||
} |
|
||||||
fflush(f); |
|
||||||
|
|
||||||
cl_program (*my_clCreateProgramWithSource)(cl_context context, |
|
||||||
cl_uint count, |
|
||||||
const char **strings, |
|
||||||
const size_t *lengths, |
|
||||||
cl_int *errcode_ret) = dlsym(RTLD_NEXT, "REAL_clCreateProgramWithSource"); |
|
||||||
|
|
||||||
return my_clCreateProgramWithSource(context, count, strings, lengths, errcode_ret); |
|
||||||
} |
|
||||||
|
|
||||||
cl_program clCreateProgramWithBinary(cl_context context, |
|
||||||
cl_uint num_devices, |
|
||||||
const cl_device_id *device_list, |
|
||||||
const size_t *lengths, |
|
||||||
const unsigned char **binaries, |
|
||||||
cl_int *binary_status, |
|
||||||
cl_int *errcode_ret) { |
|
||||||
printf("clCreateProgramWithBinary\n"); |
|
||||||
|
|
||||||
cl_program (*my_clCreateProgramWithBinary)(cl_context context, |
|
||||||
cl_uint num_devices, |
|
||||||
const cl_device_id *device_list, |
|
||||||
const size_t *lengths, |
|
||||||
const unsigned char **binaries, |
|
||||||
cl_int *binary_status, |
|
||||||
cl_int *errcode_ret) = dlsym(RTLD_NEXT, "REAL_clCreateProgramWithBinary"); |
|
||||||
|
|
||||||
return my_clCreateProgramWithBinary(context, num_devices, device_list, lengths, binaries, binary_status, errcode_ret); |
|
||||||
} |
|
||||||
|
|
||||||
cl_kernel clCreateKernel(cl_program program, const char *kernel_name, cl_int *errcode_ret) { |
|
||||||
cl_kernel (*my_clCreateKernel)(cl_program program, const char *kernel_name, cl_int *errcode_ret); |
|
||||||
my_clCreateKernel = dlsym(RTLD_NEXT, "REAL_clCreateKernel"); |
|
||||||
cl_kernel ret = my_clCreateKernel(program, kernel_name, errcode_ret); |
|
||||||
//printf("clCreateKernel: %s -> %p\n", kernel_name, ret);
|
|
||||||
|
|
||||||
char *tmp = (char*)malloc(strlen(kernel_name)+1); |
|
||||||
strcpy(tmp, kernel_name); |
|
||||||
|
|
||||||
kk[k_index].k = ret; |
|
||||||
kk[k_index].name = tmp; |
|
||||||
kk[k_index].p = program; |
|
||||||
k_index++; |
|
||||||
return ret; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
uint64_t start_time = 0; |
|
||||||
int cnt = 0; |
|
||||||
|
|
||||||
cl_int clEnqueueNDRangeKernel(cl_command_queue command_queue, |
|
||||||
cl_kernel kernel, |
|
||||||
cl_uint work_dim, |
|
||||||
const size_t *global_work_offset, |
|
||||||
const size_t *global_work_size, |
|
||||||
const size_t *local_work_size, |
|
||||||
cl_uint num_events_in_wait_list, |
|
||||||
const cl_event *event_wait_list, |
|
||||||
cl_event *event) { |
|
||||||
|
|
||||||
cl_int (*my_clEnqueueNDRangeKernel)(cl_command_queue, cl_kernel, cl_uint, |
|
||||||
const size_t *, const size_t *, const size_t *, |
|
||||||
cl_uint, const cl_event *, cl_event *) = NULL; |
|
||||||
my_clEnqueueNDRangeKernel = dlsym(RTLD_NEXT, "REAL_clEnqueueNDRangeKernel"); |
|
||||||
|
|
||||||
if (start_time == 0) { |
|
||||||
start_time = nanos_since_boot(); |
|
||||||
} |
|
||||||
|
|
||||||
// get kernel name
|
|
||||||
const char *name = NULL; |
|
||||||
cl_program p; |
|
||||||
for (int i = 0; i < k_index; i++) { |
|
||||||
if (kk[i].k == kernel) { |
|
||||||
name = kk[i].name; |
|
||||||
p = kk[i].p; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
uint64_t tb = nanos_since_boot(); |
|
||||||
cl_int ret = my_clEnqueueNDRangeKernel(command_queue, kernel, work_dim, |
|
||||||
global_work_offset, global_work_size, local_work_size, |
|
||||||
num_events_in_wait_list, event_wait_list, event); |
|
||||||
uint64_t te = nanos_since_boot(); |
|
||||||
|
|
||||||
printf("%10lu run%8d in %5ld us command_queue:%p work_dim:%d event:%p ", (tb-start_time)/1000, cnt++, (te-tb)/1000, |
|
||||||
command_queue, work_dim, event); |
|
||||||
for (int i = 0; i < work_dim; i++) { |
|
||||||
printf("%4zu ", global_work_size[i]); |
|
||||||
} |
|
||||||
printf("%p %s\n", p, name); |
|
||||||
return ret; |
|
||||||
} |
|
||||||
|
|
||||||
void *dlsym(void *handle, const char *symbol) { |
|
||||||
void *(*my_dlsym)(void *handle, const char *symbol) = (void*)dlopen-0x2d4; |
|
||||||
if (memcmp("REAL_", symbol, 5) == 0) { |
|
||||||
return my_dlsym(handle, symbol+5); |
|
||||||
} else if (strcmp("clEnqueueNDRangeKernel", symbol) == 0) { |
|
||||||
return clEnqueueNDRangeKernel; |
|
||||||
} else if (strcmp("clCreateKernel", symbol) == 0) { |
|
||||||
return clCreateKernel; |
|
||||||
} else if (strcmp("clCreateProgramWithSource", symbol) == 0) { |
|
||||||
return clCreateProgramWithSource; |
|
||||||
} else if (strcmp("clCreateProgramWithBinary", symbol) == 0) { |
|
||||||
return clCreateProgramWithBinary; |
|
||||||
} else { |
|
||||||
printf("dlsym %s\n", symbol); |
|
||||||
return my_dlsym(handle, symbol); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
Loading…
Reference in new issue