nvidia jetson agx xavier运行 OpenCL

nvidia jetson agx xavier 运行 OpenCL

最近用OpenCL在某个GPGPU上开发了某些功能,想移植到nvidia的gpu上时才发现nvidia的移动端GPU居然没有OpenCL库!!!
但是我又十分抗拒用cuda再重新造一个轮子,github上找到一个神项目PoCL,它可以在nvidia的gpu上运行OpenCL程序(至少表面上是这样的)。
下面对移植的过程做记录,这瓜包熟!

系统组件版本

名称 版本
Drivers for jetson 34.1
File System and OS 34.1
Flash Jetson AGX Xavier 34.1
CUDA Toolkit for L4T 11.4
cuDNN on Target 8.3
TensorRT on Target 8.4
OpenCV 4.5
VPI on Target 2.0
NVIDIA Container Runtime with Docker Integration 0.11
Mutimedia API 34.1

llvm+clang(编译PoCL用)

使用自带的软件源安装的时候注意安装的版本,后续需要。

sudo apt-get install clang

执行后这里自动安装的版本是clang10+llvm10,但是不会安装libclang-cpp-dev,需要自己安装对应的包(注意和自己安装的clang+vllm版本匹配):

sudo apt-get install libclang-cpp10-dev 

在当前测试系统中缺少依赖库libncurses5,需要手动安装:

sudo apt-get install libncurses5
#安装后还是提示找不到,那就手动创建个软链接
sudo ln -s /lib/aarch64-linux-gnu/libtinfo.so.5 /lib/aarch64-linux-gnu/libtinfo.so

ruby (编译ocl-icd用)

sudo apt install ruby

ocl-icd

下载

ocl-icd:https://github.com/OCL-dev/ocl-icd/tags

这里下载的版本为ocl-icd-2.3.1

解压

tar -zxvf ocl-icd-2.3.1.tar.gz

编译

cd ocl-icd-2.3.1
./bootstrap
./configure
make
make check
sudo make install
#把OpenCL的头文件复制到标准目录中
sudo cp ~/work/ocl-icd-2.3.1/khronos-headers/* /usr/include

pocl

下载

pocl_3.0: http://portablecl.org/download.html

解压

tar -zxvf pocl-3.0.tar.gz

编译

安装依赖

sudo apt-get install valgrind
#以下依赖基本都有,除了hwloc和cmake还有clinfo。hwloc和cmake必不可少。
sudo apt-get install gcc patch hwloc cmake git pkg-config make clinfo

在解压的目录pocl-3.0中:

mkdir build
cd build
cmake -DENABLE_CUDA=ON -DCMAKE_BUILD_TYPE=Release -DLLC_HOST_CPU=cortex-a57 -DHOST_CPU_CACHELINE_SIZE=64 -DWITH_LLVM_CONFIG=/usr/bin/llvm-config-10 -DSINGLE_LLVM_LIB=1 -DENABLE_ICD=1 ..
make
sudo make install
#make install 只是安装库文件,不会复制icd到标准目录。这将导致clGetPlatform时获取不到平台。手动拷贝:
sudo mkdir -p /etc/OpenCL/vendors
sudo cp /usr/local/etc/OpenCL/vendors/pocl.icd /etc/OpenCL/vendors/

测试

测试的demo就不提供了,OpenCL的Demo随便找一个就行。
上板运行:

完美!
理论上NX开发板也可以。

你可能感兴趣的:(GPU,边缘计算)