Please note: We are aware of an issue affecting replies on the Arm Community forums, which may not be loading as expected.

We apologize for any inconvenience and appreciate your patience while we investigate and work to resolve the issue.

Thank you for your understanding.


This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Mali-G71 "Failed creating base context during opening of kernel driver" while get device infos using OpenCL

I try to write some code using OpenCL to test Mali GPU:

    err = clGetPlatformIDs(0, NULL, &num_platforms);
    check_error(err, "clGetPlatformIDs");

    if (num_platforms > 0)
    {
        printf("Number of platforms: %d\n", num_platforms);
    }
    else
    {
        fprintf(stderr, "No OpenCL platforms found.\n");
        exit(-1);
    }

    platforms = (cl_platform_id *)malloc(num_platforms * sizeof(cl_platform_id));
    err = clGetPlatformIDs(num_platforms, platforms, NULL);
    check_error(err, "clGetPlatformIDs");

    for (int i = 0; i < num_platforms; i++)
    {
        cl_platform_id platform = platforms[i];

        char name[128];
        err = clGetPlatformInfo(platform, CL_PLATFORM_NAME, 128, name, NULL);
        check_error(err, "clGetPlatformInfo");
        printf("Platform %d: %s\n", i, name);

        char profile[128];
        err = clGetPlatformInfo(platform, CL_PLATFORM_PROFILE, 128, profile, NULL);
        check_error(err, "clGetPlatformInfo");
        printf("Platform %d: %s\n", i, profile);

        char version[128];
        err = clGetPlatformInfo(platform, CL_PLATFORM_VERSION, 128, version, NULL);
        check_error(err, "clGetPlatformInfo");
        printf("Platform %d: %s\n", i, version);

        status = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices);
        check_error(status, "clGetDeviceIDs");

        if (num_devices > 0)
        {
            printf("Number of devices: %d\n", num_devices);
        }
        else
        {
            fprintf(stderr, "No OpenCL devices found.\n");
            continue;
        }

        devices = (cl_device_id *)malloc(num_devices * sizeof(cl_device_id));
        err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, num_devices, devices, NULL);
        check_error(err, "clGetDeviceIDs");
        for (int j = 0; j < num_devices; j++)
        {
            cl_device_id device = devices[j];
            char device_name[128];
            err = clGetDeviceInfo(device, CL_DEVICE_NAME, 128, device_name, NULL);
            check_error(err, "clGetDeviceInfo");
            printf("Device %d: %s\n", j, device_name);

            cl_uint max_compute_units;
            err = clGetDeviceInfo(device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(cl_uint), &max_compute_units, NULL);
            check_error(err, "clGetDeviceInfo");
            printf("Device %d: Max compute units: %d\n", j, max_compute_units);

            cl_ulong global_mem_size;
            err = clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(cl_ulong), &global_mem_size, NULL);
            check_error(err, "clGetDeviceInfo");
            printf("Device %d: Global memory size: %ld\n", j, (uint64_t)global_mem_size);
        }
    }

    free(devices);
    free(platforms);

But it returns `CL_OUT_OF_HOST_MEMORY` (-6):

Number of platforms: 1
Platform 0: ARM Platform
Platform 0: FULL_PROFILE
Platform 0: OpenCL 2.0 v1.r9p0-01rel0.37c12a13c46b4c2d9d736e0d5ace2e5e
Number of devices: 1
Failed creating base context during opening of kernel driver.
Kernel module may not have been loaded
Error during operation 'clGetDeviceInfo': -6

I don't know what's wrong with my code.