一 远程登录Linux Server运行CUDA程序(摘自国科大刘莹老师给的指南)
1 Window系统下* 下载SSHSecureShellClient-3.2.9.exe
* 安装SSH:默认在每一步均选next
* 安装生成桌面文件:
SSH Secure Shell Client:客户端登录程序
SSH Secure File Transfer Client:文件上传下载程序
* 登录Linux Server
1) 单击Connect(或Quick Connect)
2) 输入Host Name、User Name
3) 输入Password
* 退出
输入"exit"(或点击Disconnect)
2 使用SSH Secure File Transfer Client传输源程序
3 使用CUDA编译运行程序
* 认识CUDA编译器nvcc:man nvcc
* 四种模式的编译:
Release Mode: CUDA kernel 在真正的GPU上运行
命令示例:nvcc -o executable <file1.cu> <file2.cu> …
Debug Mode: CUDA kernel 在GPU上运行但不可调试,CPU部分代码可以调试
命令示例:nvcc -g <file1.cu> <file2.cu> …
* 使用-keep命令选项保存中间生成文件:nvcc -keep <filename>.cu
* 使用-clean命令选项清除相应命令生成的所有文件: nvcc -keep <filename>.cu -clean
* nvcc其他常用命令选项有:-o(指定输出可执行文件名)、-D(定义宏)、-I(指定头文件搜索路径)、-include(指定包含的头文件)、-L(指定库文件搜索路径)、-l(指定链接使用的库文件)、-host-compilation(指定以C或C++语言编译CPU部分代码)-Xptxas –v(查看kernel的register、shared memory、 local memory使用情况)
详细说明请参阅nvidia提供的nvcc手册或man命令。
* 程序执行:在包含编译生成的可执行文件目录下输入:./<executable_file_name>
4 Linux系统下远程登录Linux Server
* 检查系统是否安装有SSH:(或man ssh)
rpm -qa | grep ssh
cd ~
more install.log
查找ssh
* 终端登录Linux Server
1)输入用户名和IP地址:ssh username@*.*.*.*
2)输入password
* 正常终端命令行操作
* 退出
输入"exit"
5 Linux系统下使用scp命令传输文件
* 退出ssh或切换到另一个新的终端
* 复制文件到远程主机:
输入scp命令:
scp <local_dir>/localfile remote_username@remote_host_ip:/<remote_dir>/
按提示输入远程server上的用户密码:
remote_username@remote_host_ip's password: *******
* 从远程主机下载文件:
输入scp命令:
scp remote_username@remote_host_ip:/<remote_dir>/remote_file <local_dir>/
按提示输入远程server上的用户密码:
remote_username@remote_host_ip's password: *******
二 运行cuda程序
1 获取硬件平台设备属性
CPU properties:cat /proc/cpuinfo
Memory properties: cat /proc/meminfo
GPUproperties:
nvcc devicepro.cu
./a.out
其中获取GPUproperties需要编写代码获取结构体cudaDeviceProp的信息。代码如下,保存为*.cu运行即可。
#include <cuda_runtime.h>
#include <iostream>
using namespace std;
int main()
{
cudaDeviceProp prop;
int count;
cudaGetDeviceCount(&count);
for(int i = 0 ; i < count ; i++)
{
cudaGetDeviceProperties(&prop,i);
cout<<"the information for the device : "<<i<<endl;
cout<<"name:"<<prop.name<<endl;
cout<<"the memory information for the device : "<<i<<endl;
cout<<"total global memory:"<<prop.totalGlobalMem<<endl;
cout<<"total constant memory:"<<prop.totalConstMem<<endl;
cout<<"shared Memory Per Block:"<<prop.sharedMemPerBlock<<endl;
cout<<"register Per Block:"<<prop.regsPerBlock<<endl;
cout<<"threads in warps:"<<prop.warpSize<<endl;
cout<<"max threads per block:"<<prop.maxThreadsPerBlock<<endl;
cout<<