CTS环境搭建
下载OpenCL-CTS仓库
git clone https://github.com/KhronosGroup/OpenCL-CTS.git -b v2020-10-01-00
具体版本根据项目需要来下载,这里以2020-10-01-00为例
下载依赖仓库
下面几个操作都在OpenCL-CTS目录下执行
git clone https://github.com/KhronosGroup/OpenCL-Headers.git
git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader.git
git clone https://github.com/KhronosGroup/libclcxx.git
交叉编译器配置
如果要修改编译器,需要修改编译文件CMakeLists.txt以riscv为例增加:SET(CMAKE_C_COMPILER /xxx/yyy/zzz/bin/riscv64-linux-gcc)SET(CMAKE_CXX_COMPILER /xxx/yyy/zzz/bin/riscv64-linux-g++)
编译
Building OCL-ICD-Headers
编译OCL-CTS之前,需要先编译OCL-ICD-Headers,编译还会生成.so文件。这个SO后面后用来编译CTS源码。mkdir OpenCL-ICD-Loader/build; cd OpenCL-ICD-Loader/build cmake -DOPENCL_ICD_LOADER_HEADERS_DIR=OpenCL-Headers/ -DENABLE_OPENCL30_PROVISIONAL=1 .. make -j8
Building the source code
mkdir build; cd build
cmake -DCL_INCLUDE_DIR=OpenCL-Headers -DCL_LIB_DIR=OpenCL-ICD-Loader/build -DCL_LIBCLCXX_DIR=libclcxx -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=./ -DOPENCL_LIBRARIES="-lOpenCL -lpthread" -DUSE_CL_EXPERIMENTAL=ON ..
问题
-
CXX_FLAGS里存在x86的链接flag, -msse等
查看CMakeLists.txt , 走此路径是因为CLConform_TARGET_ARCH里没有RISCV导致
进一步查看源头可以看到,此变量通过CMAKE_SYSTEM_PROCESSOR变量来选择在OpenCL-CTS/CMakeFiles/3.10.2/CMakeSystem.cmake文件里定义了相关变量
修改这里为RISCV,并且在OpenCL-CTS目录的CMakeLists.txt中增加如下代码
-
OpenCL_CTS/test_common/harness/rounding_mode.cpp 212/236报 “Unknow arch”
从报错的地方看:
原因是没有riscv的支持函数用来支持FlushToZero和UnFlushToZero需要查阅当前的RISCV FPU的相关寄存器,来看是否可以适配
关于这里的平台宏用哪个?需要通过交叉编译器的默认选项来看,例如riscv64-linux-gcc -E -dM - < /dev/null 可以看到目前我们用的是__riscv
-
test_common/harness/fpcontrol.h中报错
按照要求实现对应函数即可
ForceFTZ() 强制进入FTZ模式
DisableFTZ() 关闭FTZ模式
RestoreFPState() 恢复FPU状态
-
test_common/harness/testHarness.cpp编译出现
“Unknow arch”
PrintArch()函数打印需要,参考rounding_mode.cpp中的定义实现一个即可
-
test_common/harness/threadTesting.h:22:10: fatal error: CL/opencl.h