vim3+ubuntu环境,使用opencl2.0,调用函数"clCreateCommandQueueWithProperties"提示错误:“undefined reference to `clCreateCommandQueueWithProperties’
collect2: error: ld returned 1 exit status”。
opencl代码编译时已经添加了编译选项:-cl-std=CL2.0
cmake中已经进行了库连接:target_link_libraries(${PROJECT_NAME} OpenCL)
相同的代码在intel的核显下是可以通过编译的。
我是缺少什么配置?还是说vim3目前不支持opencl2.0呢?
OpenCL在旧版内核下运行,您需要使用cmake进行构建
最新的4.9固件已经支持。
root@Khadas:~# clinfo
Number of platforms 1
Platform Name ARM Platform
Platform Vendor ARM
Platform Version OpenCL 2.0 git.c8adbf9.122c9daed32dbba4b3056f41a2f23c58
Platform Profile FULL_PROFILE
Platform Extensions cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_3d_image_writes cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_fp16 cl_khr_icd cl_khr_egl_image cl_khr_image2d_from_buffer cl_khr_depth_images cl_khr_subgroups cl_khr_create_command_queue cl_arm_core_id cl_arm_printf cl_arm_thread_limit_hint cl_arm_non_uniform_work_group_size cl_arm_import_memory cl_arm_shared_virtual_memory
Platform Extensions function suffix ARM
Platform Name ARM Platform
Number of devices 1
Device Name Mali-G52
Device Vendor ARM
Device Vendor ID 0x72120000
Device Version OpenCL 2.0 git.c8adbf9.122c9daed32dbba4b3056f41a2f23c58
Driver Version 2.0
Device OpenCL C Version OpenCL C 2.0 git.c8adbf9.122c9daed32dbba4b3056f41a2f23c58
Device Type GPU
Device Profile FULL_PROFILE
Device Available Yes
Compiler Available Yes
Linker Available Yes
Max compute units 2
Max clock frequency 750MHz
Device Partition (core)
Max number of sub-devices 0
Supported partition types None
Supported affinity domains (n/a)
Max work item dimensions 3
Max work item sizes 384x384x384
Max work group size 384
Preferred work group size multiple 8
Preferred / native vector sizes
char 16 / 4
short 8 / 2
int 4 / 1
long 2 / 1
half 8 / 2 (cl_khr_fp16)
float 4 / 1
double 0 / 0 (n/a)
Half-precision Floating-point support (cl_khr_fp16)
Denormals Yes
Infinity and NANs Yes
Round to nearest Yes
Round to zero Yes
Round to infinity Yes
IEEE754-2008 fused multiply-add Yes
Support is emulated in software No
Single-precision Floating-point support (core)
Denormals Yes
Infinity and NANs Yes
Round to nearest Yes
Round to zero Yes
Round to infinity Yes
IEEE754-2008 fused multiply-add Yes
Support is emulated in software No
Correctly-rounded divide and sqrt operations No
Double-precision Floating-point support (n/a)
Address bits 64, Little-Endian
Global memory size 3888205824 (3.621GiB)
Error Correction support No
Max memory allocation 972051456 (927MiB)
Unified memory for Host and Device Yes
Shared Virtual Memory (SVM) capabilities (core)
Coarse-grained buffer sharing Yes
Fine-grained buffer sharing No
Fine-grained system sharing No
Atomics No
Shared Virtual Memory (SVM) capabilities (ARM)
Coarse-grained buffer sharing Yes
Fine-grained buffer sharing No
Fine-grained system sharing No
Atomics No
Minimum alignment for any data type 128 bytes
Alignment of base address 1024 bits (128 bytes)
Preferred alignment for atomics
SVM 0 bytes
Global 0 bytes
Local 0 bytes
Max size for global variable 65536 (64KiB)
Preferred total size of global vars 0
Global Memory cache type Read/Write
Global Memory cache size 131072 (128KiB)
Global Memory cache line size 64 bytes
Image support Yes
Max number of samplers per kernel 16
Max size for 1D images from buffer 65536 pixels
Max 1D or 2D image array size 2048 images
Base address alignment for 2D image buffers 32 bytes
Pitch alignment for 2D image buffers 64 pixels
Max 2D image size 65536x65536 pixels
Max 3D image size 65536x65536x65536 pixels
Max number of read image args 128
Max number of write image args 64
Max number of read/write image args 64
Max number of pipe args 16
Max active pipe reservations 1
Max pipe packet size 1024
Local memory type Global
Local memory size 32768 (32KiB)
Max number of constant args 8
Max constant buffer size 65536 (64KiB)
Max size of kernel argument 1024
Queue properties (on host)
Out-of-order execution Yes
Profiling Yes
Queue properties (on device)
Out-of-order execution Yes
Profiling Yes
Preferred size 2097152 (2MiB)
Max size 16777216 (16MiB)
Max queues on device 1
Max events on device 1024
Prefer user sync for interop No
Profiling timer resolution 1000ns
Execution capabilities
Run OpenCL kernels Yes
Run native kernels No
printf() buffer size 1048576 (1024KiB)
Built-in kernels (n/a)
Device Extensions cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_3d_image_writes cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_fp16 cl_khr_icd cl_khr_egl_image cl_khr_image2d_from_buffer cl_khr_depth_images cl_khr_subgroups cl_khr_create_command_queue cl_arm_core_id cl_arm_printf cl_arm_thread_limit_hint cl_arm_non_uniform_work_group_size cl_arm_import_memory cl_arm_shared_virtual_memory
NULL platform behavior
clGetPlatformInfo(NULL, CL_PLATFORM_NAME, ...) ARM Platform
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, ...) Success [ARM]
clCreateContext(NULL, ...) [default] Success [ARM]
clCreateContextFromType(NULL, CL_DEVICE_TYPE_DEFAULT) Success (1)
Platform Name ARM Platform
Device Name Mali-G52
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CPU) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU) Success (1)
Platform Name ARM Platform
Device Name Mali-G52
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ALL) Success (1)
Platform Name ARM Platform
Device Name Mali-G52
ICD loader properties
ICD loader Name OpenCL ICD Loader
ICD loader Vendor OCL Icd free software
ICD loader Version 2.2.11
ICD loader Profile OpenCL 2.1
但是只支持fbdev,不支持X11。
这是什么意思呢?我用的是server版本,并没有图形界面。
我不太懂您的意思,我并没有编译opencl,用的库是系统自带的。
OpenCL仅安装在系统上,但是您需要使用cmake进行配置和构建,请提供命令clinfo
的输出
@Electr1
clinfo输出是正确的,能够看到支持的版本是2.0。
我已经实现了一个opencl1.2的程序,并且能够正确运行,但是我现在想用opencl2.0的设备队列特性,需要使用2.0的函数clCreateCommandQueueWithProperties’,这时编译不通过,提示“undefined reference to
clCreateCommandQueueWithProperties’
collect2: error: ld returned 1 exit status”。
我想知道怎么解决这个问题。
那么OpenCL是否已正确安装? 我认为不可能在两个不同版本之间混合使用功能,除非它是向后兼容的,但是我的用法知识到此为止。
所以您采用了在Intel系统下编译的代码,并且在这里执行它? (或)您正在重新构建它,并且它给出了ID错误?
我用cmake控制不同的编译环境,目前的情况是opencl1.2在pc和vim3下都可以正确运行,运用opencl2.0在pc下可以正确运行,vim3报错,这个ld是链接器的错误。
我看了下这个api在libmali.so里面是有的
root@Khadas:~# grep clCreateCommandQueueWithProperties /lib/aarch64-linux-gnu/libMali.so
Binary file /lib/aarch64-linux-gnu/libMali.so matches
谢谢回复,我在cmakelists中添加了Mali库的链接,可以通过编译了:
target_link_libraries(${PROJECT_NAME} OpenCL Mali)
@numbqq