目录
- 开箱配置
- 激活SDK环境
- 测试cuda兼容性
开箱配置
更改盒子root用户密码:
sudo passwd root
(密码同为root)
切换到root用户身份:
su root
查看ssh的状态,没有返回说明没有启动
sudo ps -e|grep ssh
此时说明ssh服务已启动。
更改ssh配置文件
vim /etc/ssh/sshd_config
填加以下内容:
Port 10002
PermitRootLogin yes #允许root用户使用ssh登录
重启服务:
sudo service ssh restart
对应vscode的远程配置为:
Host denglin
HostName 192.168.25.143
Port 18888
User root
StrictHostKeyChecking no
激活SDK环境
source /dl/python/bin/activate
source /dl/sdk/env.sh
每次使用cuda都需激活环境变量,推荐将相关配置写入~/.bashrc内
如果linux命令行不再显示当前路径,则应添加:
PS1='\u@\h:\w\$ '
解决不显示路径的问题。
使用dlsmi命令得出基本配置:
测试cuda兼容性
cd /dl/sdk/samples/cuda/vectorAdd_nvrtc/
make
/dl/sdk/samples/cuda/vectorAdd_nvrtc/vector_add_nvrtc
进行编译运行即可
盒子中一个标准的cmakelist文件结构如下:
cmake_minimum_required(VERSION 3.5)
project(Vector_ADD_Nvrtc)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/workspace)
set(SDK_DIR $ENV{DLICC_PATH}/../)
set(DLCC_TARGET_SHORT_NAME dltmp)
set(DLCC_TARGET_FULL_NAME libdltmp.a)
# 根据需要设置相应的编译选项,更多的dlcc 编译选项请参考 dlcc --help
set(CXX_FLAGS -std=c++11 -fPIC -fpermissive)
set(DLCC_CXX_FLAGS --cuda-gpu-arch=dlgpuc64 -x cuda -std=c++11 -fpermissive -fPIC)
# 指定cpp文件和cu文件,分别指定gcc和dlcc去编译
file(GLOB_RECURSE cpp_srcs ${PROJECT_SOURCE_DIR}/src/*.cpp)
file(GLOB_RECURSE cuda_srcs ${PROJECT_SOURCE_DIR}/src/*.cu)
# 打印变量
message("cpp_srcs: ${cpp_srcs}")
message("cuda_srcs: ${cuda_srcs}")
# 添加可执行目标,需要额外链接dlcc编译生成的临时静态库
link_directories(${SDK_DIR}/lib ${CMAKE_BINARY_DIR})
add_executable(${PROJECT_NAME} ${cpp_srcs})
target_compile_options(${PROJECT_NAME} PRIVATE -I${SDK_DIR}/include -I${CMAKE_SOURCE_DIR} ${CXX_FLAGS})
target_link_libraries(${PROJECT_NAME} PRIVATE curt ${DLCC_TARGET_SHORT_NAME})
# 添加pre-build和post-build,使用dlcc并指定相应的编译选项编译出obj文件并在之后删除这些obj文件
foreach (cu_file ${cuda_srcs})
set(tmp ${cu_file}.o)
string(REPLACE ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} cu_obj "${tmp}")
string(REGEX MATCH "/.*/" cu_dir ${cu_obj})
set(cu_objs ${cu_objs} ${cu_obj})
add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND mkdir -p ${cu_dir})
add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND dlcc ${DLCC_CXX_FLAGS} -o ${cu_obj} -c ${cu_file})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND rm ${cu_obj})
endforeach()
# 将dlcc编译出来的obj文件打包成临时静态库,编译出可执行程序后删除
add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ar cqs ${DLCC_TARGET_FULL_NAME} ${cu_objs})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND rm ${DLCC_TARGET_FULL_NAME})
文档在/sdk/documents/下。