OpenCL 错误 -1001 / gr-fosphor 与英特尔 CPU OpenCL



Error

[!] CL Error (-1001, cl.c:286): Unable to fetch platform IDs
[!] No suitable OpenCL device found
[!] Failed to initialize fosphor

共下一页

我根据 https://osmocom.org/projects/sdr/wiki/FosphorLinux Mint 20.3 x64 Cinnamon安装了gr-fosphorIntel CPU OpenCL.

# Install Dependencies
sudo apt-get install cmake xorg-dev libglu1-mesa-dev libspdlog-dev
# Install OpenCL depending on platform and hardware configuration
# Intel CPU OpenCL: Intel Core i5-3570K
# https://github.com/intel/compute-runtime/releases
cd ~
mkdir intel-opencl
cd intel-opencl
wget https://github.com/intel/compute-runtime/releases/download/22.06.22433/intel-gmmlib_22.0.2_amd64.deb
wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.10183/intel-igc-core_1.0.10183_amd64.deb
wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.10183/intel-igc-opencl_1.0.10183_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/22.06.22433/intel-opencl-icd_22.06.22433_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/22.06.22433/intel-level-zero-gpu_1.3.22433_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/22.06.22433/ww06.sum
sha256sum -c ww06.sum
sudo dpkg -i *.deb
# Build Dependceny GLFW
cd ~
git clone https://github.com/glfw/glfw
cd glfw
mkdir build
cd build
cmake ../ -DBUILD_SHARED_LIBS=true
make
sudo make install
sudo ldconfig
# Install gr-fosphor
cd ~
git clone git://git.osmocom.org/gr-fosphor
cd gr-fosphor
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
# Try to run fosphor
cd ~
cd gr-fosphor/lib/fosphor
./main  # CL Error / Unable to fetch platform IDs
# Make fosphor with platform and hardware-specific OpenCL LDFLAGS
cd ~
cd gr-fosphor/lib/fosphor
# platform's OpenCL: /usr/lib/x86_64-linux-gnu/intel-opencl/libigdrcl.so
make clean
make LDFLAGS=-L/usr/lib/x86_64-linux-gnu/intel-opencl
# Try to run fosphor
cd ~
cd gr-fosphor/lib/fosphor
./main  # Still CL Error / Unable to fetch platform IDs
# Try the LD_PRELOAD trick
export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libOpenCL.so"
# Try to run fosphor
cd ~
cd gr-fosphor/lib/fosphor
./main  # CL Error / Unable to fetch platform IDs

库已加载

# Unset Preloading of `libOpenCL.so`
unset LD_PRELOAD
# `libOpenCL.so` is found by `fosphor` when it's not preloaded
ldd main        
linux-vdso.so.1 (0x00007ffda32dc000)
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f8cb1ec0000)
libglfw.so.3 => /usr/local/lib/libglfw.so.3 (0x00007f8cb1e49000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8cb1cfa000)
libOpenCL.so.1 => /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 (0x00007f8cb1aef000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f8cb1a67000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8cb1a61000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8cb186d000)
libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f8cb1835000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8cb1819000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8cb17f6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8cb1fd8000)
libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f8cb173e000)
libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f8cb170a000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f8cb15cb000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f8cb15a1000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f8cb159b000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f8cb1593000)
libbsd.so.0 => /usr/lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f8cb1579000)

解决方案

安装英特尔的beignet-opencl-icd解决了这个问题,因为初始化 OpenCL 设备需要它。

sudo apt install ocl-icd-dev ocl-icd-libopencl1 beignet-opencl-icd
sudo ~/gr-fosphor/lib/fosphor/main  # Try running it as sudo once

最新更新