I started recently with OpenCL and ARM (Particularly I'm using an Odroid U3, which has a Cortex A-9 and a Mali-400). First thing I did is an example project with some test cases. The first case get information about the retrieved "devices" with the library. The code is simple:
int dev; cl_platform_id platform; cl_device_type devs[NDEVS] = { CL_DEVICE_TYPE_CPU, CL_DEVICE_TYPE_GPU }; // get Platform clGetPlatformIDs(1, &platform, NULL); // For every device: for (dev = 0; dev < NDEVS; dev++){ cl_device_id device; // Find device clGetDeviceIDs(platform, devs[dev], 1, &device, NULL); char vendor[1024]; char deviceName[1024]; cl_bool isAvailble = false; char devicePlatform[1024]; clGetDeviceInfo(device, CL_DEVICE_NAME, sizeof(deviceName), deviceName, NULL); clGetDeviceInfo(device, CL_DEVICE_VENDOR, sizeof(vendor), vendor, NULL); clGetDeviceInfo(device, CL_DEVICE_AVAILABLE, sizeof(isAvailble), &isAvailble, NULL); clGetDeviceInfo(device, CL_DEVICE_PLATFORM, sizeof(devicePlatform), devicePlatform, NULL); std::cout << "---------------------------------------------------------------------------" << std::endl; std::cout << "Device type is " << (dev ? "GPU" : "CPU") << " with ID: " << device << "and " << (isAvailble ? "is " : "isn't ") << "available." << std::endl; std::cout << "Device's platform is " << devicePlatform << std::endl; std::cout << "Vendor is " << vendor << std::endl; std::cout << "Device's name is " << deviceName << std::endl; std::cout << "---------------------------------------------------------------------------" << std::endl; }
It gets a CPU device and a GPU device and extract some information about it. I tested it on my PC and got it's information:
--------------------------------------------------------------------------- Device type is CPU with ID: 02AAB628and is available. Device's platform is ¶ñØ► Vendor is GenuineIntel Device's name is Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz --------------------------------------------------------------------------- --------------------------------------------------------------------------- Device type is GPU with ID: 007266F0and is available. Device's platform is ¶ñØ► Vendor is Advanced Micro Devices, Inc. Device's name is Turks ---------------------------------------------------------------------------
But when I use this code on the Odroid U3 I got:
--------------------------------------------------------------------------- Device type is CPU with ID: 0x3b9cand isn't available. Device's platform is Y0ý¶ Vendor is ¨; Device's name is ∟ --------------------------------------------------------------------------- --------------------------------------------------------------------------- Device type is GPU with ID: 0x3b9cand isn't available. Device's platform is Y0ý¶ Vendor is ¨; Device's name is ∟ ---------------------------------------------------------------------------
I don't know why, the system tells me that devices are unavailable and could not retrieve either vendor's, platform's or device's names.
Can anybody help me?
Thanks in advance,
Pablo R.S.
Hi Pablo,
The Odroid-U3 has an ARM Mali-400 GPU. This GPU is not a unified shader GPU, and thus does not support OpenCL API.
Our Mali-T6xx and Mali-T7xx range of GPU's are unified and do support OpenCL 1.1 Full Profile.
An example development device that is capable of OpenCL, from HardKernel, would be the Odroid-XU3.
This device has the Mali-T628MP6 GPU.
I hope that helps explain the issue you are facing. If you have any further questions, feel free to ask.
Kind Regards,
Michael McGeagh
Thank you very much. That explains everything.