Skip to content

Commit b1e3928

Browse files
lheztimwu
authored andcommitted
opencl: better identify Adreno GPU (ggml-org#12760)
1 parent 6d21644 commit b1e3928

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@ static ggml_backend_opencl_context * ggml_cl2_init(ggml_backend_dev_t dev) {
415415
unsigned number;
416416
cl_device_type type;
417417
char name[128];
418+
char version[128];
418419
};
419420

420421
enum { NPLAT = 16, NDEV = 16 };
@@ -455,6 +456,7 @@ static ggml_backend_opencl_context * ggml_cl2_init(ggml_backend_dev_t dev) {
455456
d->platform = p;
456457
CL_CHECK(clGetDeviceInfo(d->id, CL_DEVICE_NAME, sizeof(d->name), &d->name, NULL));
457458
CL_CHECK(clGetDeviceInfo(d->id, CL_DEVICE_TYPE, sizeof(d->type), &d->type, NULL));
459+
CL_CHECK(clGetDeviceInfo(d->id, CL_DEVICE_VERSION, sizeof(d->version), &d->version, NULL));
458460

459461
if (p->default_device == NULL && d->type == CL_DEVICE_TYPE_GPU) {
460462
p->default_device = d;
@@ -547,7 +549,7 @@ static ggml_backend_opencl_context * ggml_cl2_init(ggml_backend_dev_t dev) {
547549
}
548550

549551
GGML_LOG_INFO("ggml_opencl: selecting platform: '%s'\n", default_device->platform->name);
550-
GGML_LOG_INFO("ggml_opencl: selecting device: '%s'\n", default_device->name);
552+
GGML_LOG_INFO("ggml_opencl: selecting device: '%s (%s)'\n", default_device->name, default_device->version);
551553
if (default_device->type != CL_DEVICE_TYPE_GPU) {
552554
GGML_LOG_WARN("ggml_opencl: warning, not a GPU: '%s'.\n", default_device->name);
553555
}
@@ -556,9 +558,15 @@ static ggml_backend_opencl_context * ggml_cl2_init(ggml_backend_dev_t dev) {
556558
dev_ctx->device = default_device->id;
557559
backend_ctx->device = default_device->id;
558560

559-
if (strstr(default_device->name, "Adreno")) {
561+
if (strstr(default_device->name, "Adreno") ||
562+
strstr(default_device->name, "Qualcomm") ||
563+
strstr(default_device->version, "Adreno")) {
560564
backend_ctx->gpu_family = GPU_FAMILY::ADRENO;
561-
backend_ctx->adreno_gen = get_adreno_gpu_gen(default_device->name);
565+
// Usually device version contains the detailed device name
566+
backend_ctx->adreno_gen = get_adreno_gpu_gen(default_device->version);
567+
if (backend_ctx->adreno_gen == ADRENO_GPU_GEN::ADRENO_UNKNOWN) {
568+
backend_ctx->adreno_gen = get_adreno_gpu_gen(default_device->name);
569+
}
562570

563571
// Use wave size of 64 for all Adreno GPUs.
564572
backend_ctx->adreno_wave_size = 64;

0 commit comments

Comments
 (0)