Skip to content

Commit 37455db

Browse files
committed
added better adreno gpu detection and android logging
1 parent ed7d7b6 commit 37455db

File tree

2 files changed

+54
-17
lines changed

2 files changed

+54
-17
lines changed

ggml/src/ggml-opencl/ggml-opencl.cpp

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -441,10 +441,32 @@ static ggml_backend_opencl_context * ggml_cl2_init(ggml_backend_dev_t dev) {
441441
dev_ctx->device = default_device->id;
442442
backend_ctx->device = default_device->id;
443443

444+
// A local ref of cl_device_id for convenience
445+
cl_device_id device = backend_ctx->device;
446+
447+
// Check device OpenCL version, OpenCL 2.0 or above is required
448+
size_t device_ver_str_size;
449+
clGetDeviceInfo(device, CL_DEVICE_VERSION, 0, NULL, &device_ver_str_size);
450+
char *device_ver_buffer = (char *)alloca(device_ver_str_size + 1);
451+
clGetDeviceInfo(device, CL_DEVICE_VERSION, device_ver_str_size, device_ver_buffer, NULL);
452+
device_ver_buffer[device_ver_str_size] = '\0';
453+
GGML_LOG_INFO("ggml_opencl: device OpenCL version: %s\n", device_ver_buffer);
454+
455+
if (strstr(device_ver_buffer, "OpenCL 2") == NULL &&
456+
strstr(device_ver_buffer, "OpenCL 3") == NULL) {
457+
GGML_LOG_ERROR("ggml_opencl: OpenCL 2.0 or above is required\n");
458+
return backend_ctx;
459+
}
460+
444461
if (strstr(default_device->name, "Adreno")) {
445462
backend_ctx->gpu_family = GPU_FAMILY::ADRENO;
446463
backend_ctx->adreno_gen = get_adreno_gpu_gen(default_device->name);
447464

465+
// we check the device version buffer if we cannot detect it from name
466+
if (backend_ctx->adreno_gen == ADRENO_GPU_GEN::ADRENO_UNKNOWN) {
467+
backend_ctx->adreno_gen = get_adreno_gpu_gen(device_ver_buffer);
468+
}
469+
448470
// Default wave size is 128, A8x uses 64.
449471
if (backend_ctx->adreno_gen == ADRENO_GPU_GEN::A8X) {
450472
backend_ctx->adreno_wave_size = 64;
@@ -479,23 +501,6 @@ static ggml_backend_opencl_context * ggml_cl2_init(ggml_backend_dev_t dev) {
479501
dev_ctx->device_name = default_device->name;
480502
backend_ctx->device_name = default_device->name;
481503

482-
// A local ref of cl_device_id for convenience
483-
cl_device_id device = backend_ctx->device;
484-
485-
// Check device OpenCL version, OpenCL 2.0 or above is required
486-
size_t device_ver_str_size;
487-
clGetDeviceInfo(device, CL_DEVICE_VERSION, 0, NULL, &device_ver_str_size);
488-
char *device_ver_buffer = (char *)alloca(device_ver_str_size + 1);
489-
clGetDeviceInfo(device, CL_DEVICE_VERSION, device_ver_str_size, device_ver_buffer, NULL);
490-
device_ver_buffer[device_ver_str_size] = '\0';
491-
GGML_LOG_INFO("ggml_opencl: device OpenCL version: %s\n", device_ver_buffer);
492-
493-
if (strstr(device_ver_buffer, "OpenCL 2") == NULL &&
494-
strstr(device_ver_buffer, "OpenCL 3") == NULL) {
495-
GGML_LOG_ERROR("ggml_opencl: OpenCL 2.0 or above is required\n");
496-
return backend_ctx;
497-
}
498-
499504
// Check driver version
500505
size_t driver_version_str_size;
501506
clGetDeviceInfo(device, CL_DRIVER_VERSION, 0, NULL, &driver_version_str_size);

ggml/src/ggml.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,13 +236,45 @@ void ggml_log_internal(enum ggml_log_level level, const char * format, ...) {
236236
va_end(args);
237237
}
238238

239+
#ifdef __ANDROID__
240+
#include <android/log.h>
241+
242+
void ggml_log_callback_default(enum ggml_log_level level, const char * text, void * user_data) {
243+
(void) user_data;
244+
245+
android_LogPriority priority;
246+
const char* tag = "GGML";
247+
248+
// Map GGML log levels to Android log priorities
249+
switch (level) {
250+
case GGML_LOG_LEVEL_ERROR:
251+
priority = ANDROID_LOG_ERROR;
252+
break;
253+
case GGML_LOG_LEVEL_WARN:
254+
priority = ANDROID_LOG_WARN;
255+
break;
256+
case GGML_LOG_LEVEL_INFO:
257+
priority = ANDROID_LOG_INFO;
258+
break;
259+
default:
260+
priority = ANDROID_LOG_DEBUG;
261+
break;
262+
}
263+
264+
__android_log_write(priority, tag, text);
265+
}
266+
267+
#else
268+
239269
void ggml_log_callback_default(enum ggml_log_level level, const char * text, void * user_data) {
240270
(void) level;
241271
(void) user_data;
242272
fputs(text, stderr);
243273
fflush(stderr);
244274
}
245275

276+
#endif
277+
246278
//
247279
// end of logging block
248280
//

0 commit comments

Comments
 (0)