unsigned number;
cl_device_type type;
char name[128];
+ char version[128];
};
enum { NPLAT = 16, NDEV = 16 };
d->platform = p;
CL_CHECK(clGetDeviceInfo(d->id, CL_DEVICE_NAME, sizeof(d->name), &d->name, NULL));
CL_CHECK(clGetDeviceInfo(d->id, CL_DEVICE_TYPE, sizeof(d->type), &d->type, NULL));
+ CL_CHECK(clGetDeviceInfo(d->id, CL_DEVICE_VERSION, sizeof(d->version), &d->version, NULL));
if (p->default_device == NULL && d->type == CL_DEVICE_TYPE_GPU) {
p->default_device = d;
}
GGML_LOG_INFO("ggml_opencl: selecting platform: '%s'\n", default_device->platform->name);
- GGML_LOG_INFO("ggml_opencl: selecting device: '%s'\n", default_device->name);
+ GGML_LOG_INFO("ggml_opencl: selecting device: '%s (%s)'\n", default_device->name, default_device->version);
if (default_device->type != CL_DEVICE_TYPE_GPU) {
GGML_LOG_WARN("ggml_opencl: warning, not a GPU: '%s'.\n", default_device->name);
}
dev_ctx->device = default_device->id;
backend_ctx->device = default_device->id;
- if (strstr(default_device->name, "Adreno")) {
+ if (strstr(default_device->name, "Adreno") ||
+ strstr(default_device->name, "Qualcomm") ||
+ strstr(default_device->version, "Adreno")) {
backend_ctx->gpu_family = GPU_FAMILY::ADRENO;
- backend_ctx->adreno_gen = get_adreno_gpu_gen(default_device->name);
+ // Usually device version contains the detailed device name
+ backend_ctx->adreno_gen = get_adreno_gpu_gen(default_device->version);
+ if (backend_ctx->adreno_gen == ADRENO_GPU_GEN::ADRENO_UNKNOWN) {
+ backend_ctx->adreno_gen = get_adreno_gpu_gen(default_device->name);
+ }
// Use wave size of 64 for all Adreno GPUs.
backend_ctx->adreno_wave_size = 64;