OpenCL Clinfo and Compile Error
Hi everyone, I compiled mesa for OpenCL with Gallium ICD, although generated OpenCL libraries, clinfo doesn't find CL.
Generated Files:
drwxr-xr-x 2 root root 4096 Aug 5 05:11 dri
drwxr-xr-x 2 root root 4096 Aug 5 05:11 gallium-pipe
lrwxrwxrwx 1 root root 11 Aug 5 05:11 libEGL.so -> libEGL.so.1
lrwxrwxrwx 1 root root 15 Aug 5 05:11 libEGL.so.1 -> libEGL.so.1.0.0
-rwxr-xr-x 1 root root 1001816 Aug 5 05:11 libEGL.so.1.0.0
lrwxrwxrwx 1 root root 13 Aug 5 05:11 libexpat.so -> libexpat.so.1
lrwxrwxrwx 1 root root 17 Aug 5 05:11 libexpat.so.1 -> libexpat.so.1.6.7
-rwxr-xr-x 1 root root 372568 Aug 4 08:36 libexpat.so.1.6.7
lrwxrwxrwx 1 root root 11 Aug 5 05:11 libgbm.so -> libgbm.so.1
lrwxrwxrwx 1 root root 15 Aug 5 05:11 libgbm.so.1 -> libgbm.so.1.0.0
-rwxr-xr-x 1 root root 259056 Aug 5 05:11 libgbm.so.1.0.0
lrwxrwxrwx 1 root root 13 Aug 5 05:11 libglapi.so -> libglapi.so.0
lrwxrwxrwx 1 root root 17 Aug 5 05:11 libglapi.so.0 -> libglapi.so.0.0.0
-rwxr-xr-x 1 root root 871544 Aug 4 08:36 libglapi.so.0.0.0
lrwxrwxrwx 1 root root 17 Aug 5 05:11 libGLESv1_CM.so -> libGLESv1_CM.so.1
lrwxrwxrwx 1 root root 21 Aug 5 05:11 libGLESv1_CM.so.1 -> libGLESv1_CM.so.1.1.0
-rwxr-xr-x 1 root root 32432 Aug 5 05:11 libGLESv1_CM.so.1.1.0
lrwxrwxrwx 1 root root 14 Aug 5 05:11 libGLESv2.so -> libGLESv2.so.2
lrwxrwxrwx 1 root root 18 Aug 5 05:11 libGLESv2.so.2 -> libGLESv2.so.2.0.0
-rwxr-xr-x 1 root root 58592 Aug 5 05:11 libGLESv2.so.2.0.0
lrwxrwxrwx 1 root root 10 Aug 5 05:11 libGL.so -> libGL.so.1
lrwxrwxrwx 1 root root 14 Aug 5 05:11 libGL.so.1 -> libGL.so.1.2.0
-rwxr-xr-x 1 root root 2317040 Aug 5 05:11 libGL.so.1.2.0
lrwxrwxrwx 1 root root 18 Aug 5 05:11 libMesaOpenCL.so -> libMesaOpenCL.so.1
lrwxrwxrwx 1 root root 22 Aug 5 05:11 libMesaOpenCL.so.1 -> libMesaOpenCL.so.1.0.0
-rwxr-xr-x 1 root root 31560128 Aug 5 05:11 libMesaOpenCL.so.1.0.0
-rwxr-xr-x 1 root root 57875096 Aug 5 05:11 libvulkan_intel.so
-rwxr-xr-x 1 root root 33834000 Aug 5 05:11 libvulkan_lvp.so
-rwxr-xr-x 1 root root 46114776 Aug 5 05:11 libvulkan_radeon.so
lrwxrwxrwx 1 root root 17 Aug 5 05:11 libxatracker.so -> libxatracker.so.2
lrwxrwxrwx 1 root root 21 Aug 5 05:11 libxatracker.so.2 -> libxatracker.so.2.5.0
-rwxr-xr-x 1 root root 37905240 Aug 5 05:11 libxatracker.so.2.5.0
drwxr-xr-x 2 root root 4096 Aug 5 05:11 pkgconfig
I'm using this command.
OCL_ICD_VENDORS=/usr/local/etc/OpenCL/vendors/ clinfo
And result:
Number of platforms 0
Also, I tried an example to compile with CL, it always gives undefined reference error. My Cmake file:
cmake_minimum_required(VERSION 3.5)
project(hello)
add_executable(${PROJECT_NAME} HelloWorld.cpp HelloWorld_Kernel.cl)
target_link_directories(${PROJECT_NAME} PRIVATE
/usr/local/lib64
/usr/local/lib64/dri
/usr/local/lib64/gallium-pipe)
target_include_directories(${PROJECT_NAME} PUBLIC /home/gokhans/hvl-mesa/include)
target_link_libraries(${PROJECT_NAME} MesaOpenCL)
After called make function:
Scanning dependencies of target hello
[ 50%] Building CXX object CMakeFiles/hello.dir/HelloWorld.cpp.o
In file included from /home/gokhans/hvl-mesa/include/CL/cl.h:20,
from /home/gokhans/opencl-example/helloworld/HelloWorld.cpp:18:
/home/gokhans/hvl-mesa/include/CL/cl_version.h:22:104: note: #pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)
22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)")
| ^
/home/gokhans/opencl-example/helloworld/HelloWorld.cpp: In function ‘int main(int, char**)’:
/home/gokhans/opencl-example/helloworld/HelloWorld.cpp:109:83: warning: ‘_cl_command_queue* clCreateCommandQueue(cl_context, cl_device_id, cl_command_queue_properties, cl_int*)’ is deprecated [-Wdeprecated-declarations]
109 | cl_command_queue commandQueue = clCreateCommandQueue(context, devices[0], 0, NULL);
| ^
In file included from /home/gokhans/opencl-example/helloworld/HelloWorld.cpp:18:
/home/gokhans/hvl-mesa/include/CL/cl.h:1904:1: note: declared here
1904 | clCreateCommandQueue(cl_context context,
| ^~~~~~~~~~~~~~~~~~~~
/home/gokhans/opencl-example/helloworld/HelloWorld.cpp:109:83: warning: ‘_cl_command_queue* clCreateCommandQueue(cl_context, cl_device_id, cl_command_queue_properties, cl_int*)’ is deprecated [-Wdeprecated-declarations]
109 | cl_command_queue commandQueue = clCreateCommandQueue(context, devices[0], 0, NULL);
| ^
In file included from /home/gokhans/opencl-example/helloworld/HelloWorld.cpp:18:
/home/gokhans/hvl-mesa/include/CL/cl.h:1904:1: note: declared here
1904 | clCreateCommandQueue(cl_context context,
| ^~~~~~~~~~~~~~~~~~~~
[100%] Linking CXX executable hello
/usr/bin/ld: CMakeFiles/hello.dir/HelloWorld.cpp.o: in function `main':
HelloWorld.cpp:(.text+0x27a): undefined reference to `clGetPlatformIDs'
/usr/bin/ld: HelloWorld.cpp:(.text+0x2fc): undefined reference to `clGetPlatformIDs'
/usr/bin/ld: HelloWorld.cpp:(.text+0x354): undefined reference to `clGetDeviceIDs'
/usr/bin/ld: HelloWorld.cpp:(.text+0x3e0): undefined reference to `clGetDeviceIDs'
/usr/bin/ld: HelloWorld.cpp:(.text+0x428): undefined reference to `clGetDeviceIDs'
/usr/bin/ld: HelloWorld.cpp:(.text+0x472): undefined reference to `clGetDeviceIDs'
/usr/bin/ld: HelloWorld.cpp:(.text+0x4a2): undefined reference to `clCreateContext'
/usr/bin/ld: HelloWorld.cpp:(.text+0x4cc): undefined reference to `clCreateCommandQueue'
/usr/bin/ld: HelloWorld.cpp:(.text+0x54e): undefined reference to `clCreateProgramWithSource'
/usr/bin/ld: HelloWorld.cpp:(.text+0x57b): undefined reference to `clBuildProgram'
/usr/bin/ld: HelloWorld.cpp:(.text+0x62c): undefined reference to `clCreateBuffer'
/usr/bin/ld: HelloWorld.cpp:(.text+0x65a): undefined reference to `clCreateBuffer'
/usr/bin/ld: HelloWorld.cpp:(.text+0x679): undefined reference to `clCreateKernel'
/usr/bin/ld: HelloWorld.cpp:(.text+0x69d): undefined reference to `clSetKernelArg'
/usr/bin/ld: HelloWorld.cpp:(.text+0x6c3): undefined reference to `clSetKernelArg'
/usr/bin/ld: HelloWorld.cpp:(.text+0x705): undefined reference to `clEnqueueNDRangeKernel'
/usr/bin/ld: HelloWorld.cpp:(.text+0x747): undefined reference to `clEnqueueReadBuffer'
/usr/bin/ld: HelloWorld.cpp:(.text+0x7bb): undefined reference to `clReleaseKernel'
/usr/bin/ld: HelloWorld.cpp:(.text+0x7cd): undefined reference to `clReleaseProgram'
/usr/bin/ld: HelloWorld.cpp:(.text+0x7e2): undefined reference to `clReleaseMemObject'
/usr/bin/ld: HelloWorld.cpp:(.text+0x7f7): undefined reference to `clReleaseMemObject'
/usr/bin/ld: HelloWorld.cpp:(.text+0x80c): undefined reference to `clReleaseCommandQueue'
/usr/bin/ld: HelloWorld.cpp:(.text+0x821): undefined reference to `clReleaseContext'
However, there are these functions in so file.
readelf -a libMesaOpenCL.so | grep clGetPlatformIDs
10365: 000000000005f461 107 FUNC LOCAL DEFAULT 14 clGetPlatformIDs
By the way, ubuntu is running on VMWare so its graphic card;
00:0f.0 VGA compatible controller: VMware SVGA II Adapter
However, I think it must show the openCL version or run the example according to CPU even if it does not support VMware controller, I'm right?