|
|
|
@ -33,16 +33,10 @@ cl_device_id cl_get_device_id(cl_device_type device_type); |
|
|
|
|
cl_program cl_create_program_from_file(cl_context ctx, const char* path); |
|
|
|
|
void cl_print_info(cl_platform_id platform, cl_device_id device); |
|
|
|
|
|
|
|
|
|
cl_program cl_program_from_index(cl_context ctx, cl_device_id device_id, uint64_t index_hash); |
|
|
|
|
|
|
|
|
|
cl_program cl_index_program_from_string(cl_context ctx, cl_device_id device_id, |
|
|
|
|
const char* src, const char* args, |
|
|
|
|
uint64_t index_hash); |
|
|
|
|
cl_program cl_index_program_from_file(cl_context ctx, cl_device_id device_id, const char* path, const char* args, |
|
|
|
|
uint64_t index_hash); |
|
|
|
|
|
|
|
|
|
uint64_t clu_index_hash(const char *s); |
|
|
|
|
uint64_t clu_fnv_hash(const uint8_t *data, size_t len); |
|
|
|
|
const char *file, int line, const char *function); |
|
|
|
|
cl_program cl_index_program_from_file(cl_context ctx, cl_device_id device_id, const char* path, const char* args); |
|
|
|
|
|
|
|
|
|
const char* cl_get_error_string(int err); |
|
|
|
|
|
|
|
|
@ -54,35 +48,10 @@ static inline int cl_check_error(int err) { |
|
|
|
|
return err; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // string hash macro. compiler, I'm so sorry.
|
|
|
|
|
#define CLU_H1(s,i,x) (x*65599ULL+(uint8_t)s[(i)<strlen(s)?strlen(s)-1-(i):strlen(s)]) |
|
|
|
|
#define CLU_H4(s,i,x) CLU_H1(s,i,CLU_H1(s,i+1,CLU_H1(s,i+2,CLU_H1(s,i+3,x)))) |
|
|
|
|
#define CLU_H16(s,i,x) CLU_H4(s,i,CLU_H4(s,i+4,CLU_H4(s,i+8,CLU_H4(s,i+12,x)))) |
|
|
|
|
#define CLU_H64(s,i,x) CLU_H16(s,i,CLU_H16(s,i+16,CLU_H16(s,i+32,CLU_H16(s,i+48,x)))) |
|
|
|
|
// #define CLU_H256(s,i,x) CLU_H64(s,i,CLU_H64(s,i+64,CLU_H64(s,i+128,CLU_H64(s,i+192,x))))
|
|
|
|
|
#define CLU_H128(s,i,x) CLU_H64(s,i,CLU_H64(s,i+64,x)) |
|
|
|
|
#define CLU_HASH(s) ((uint64_t)(CLU_H128(s,0,0)^(CLU_H128(s,0,0)>>32))) |
|
|
|
|
|
|
|
|
|
#define CLU_STRINGIFY(x) #x |
|
|
|
|
#define CLU_STRINGIFY2(x) CLU_STRINGIFY(x) |
|
|
|
|
#define CLU_LINESTR CLU_STRINGIFY2(__LINE__) |
|
|
|
|
|
|
|
|
|
#ifdef CLU_NO_SRC |
|
|
|
|
|
|
|
|
|
#define CLU_LOAD_FROM_STRING(ctx, device_id, src, args) \ |
|
|
|
|
cl_program_from_index(ctx, device_id, CLU_HASH("\1" __FILE__ "\1" CLU_LINESTR) ^ clu_fnv_hash((const uint8_t*)__func__, strlen(__func__)) ^ clu_fnv_hash((const uint8_t*)args, strlen(args))) |
|
|
|
|
#define CLU_LOAD_FROM_STRING(ctx, device_id, src, args) \ |
|
|
|
|
cl_index_program_from_string(ctx, device_id, src, args, __FILE__, __LINE__, __func__); |
|
|
|
|
#define CLU_LOAD_FROM_FILE(ctx, device_id, path, args) \ |
|
|
|
|
cl_program_from_index(ctx, device_id, CLU_HASH("\2" path) ^ clu_fnv_hash((const uint8_t*)args, strlen(args))) |
|
|
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
|
|
#define CLU_LOAD_FROM_STRING(ctx, device_id, src, args) \ |
|
|
|
|
cl_index_program_from_string(ctx, device_id, src, args, clu_index_hash("\1" __FILE__ "\1" CLU_LINESTR) ^ clu_fnv_hash((const uint8_t*)__func__, strlen(__func__)) ^ clu_fnv_hash((const uint8_t*)args, strlen(args))) |
|
|
|
|
#define CLU_LOAD_FROM_FILE(ctx, device_id, path, args) \ |
|
|
|
|
cl_index_program_from_file(ctx, device_id, path, args, clu_index_hash("\2" path) ^ clu_fnv_hash((const uint8_t*)args, strlen(args))) |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|
cl_index_program_from_file(ctx, device_id, path, args); |
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
|
} |
|
|
|
|