CUDA并行程序设计 开发环境搭建与远程调试
课题需要用到GPU加速。目前使用的台式电脑只有核心显卡,而实验室有一台服务器装有NVIDIA GTX980独显。因此,想搭建一个CUDA的开发环境,来实现在台式机上面开发cuda程序,程序在服务器而不必每次都跑去服务器上面。
目前找到的远程调试方案有三个:
- Windows平台下,通过Nsight Monitor连接 带有NVIDIA显卡的Windows笔记本电脑。
- Linux平台下,通过Nsight Eclipse Edition 连接Linux服务器
- 通过Xshell连接到服务器(操作系统为CentOS 7),用Xmanager启动Nsight Eclipse Edition图形界面。由于开发时可能会改动服务器环境参数和配置导致其他程序出错,并且我没有服务器root权限,因此尽量不在服务器上进行开发。
一、Windows平台 Nsight Monitor方案
客户端:台式机,core I3-6100,核心显卡,4G内存, SSD,Windows 7 64bit sp1
服务器端:笔记本电脑,core I5-450m,GT310m, 4G内存, SSD, Windows 7 64bit sp1
安装Visual studio 2012
服务器最好也要安装。不安装Nsight VS Edition好像安装不上(未证实)安装显卡驱动
我的客户端因无NVIDIA显卡,因此只在服务器端安装驱动。在客户端与服务器安装cuda toolkit (Win 64bit)
进入NVIDIA开发者网站https://developer.nvidia.com/cuda-toolkit下载相应的CUDA Toolkit。注意客户端与服务器版本最好相同。NVIDIA网站最近因“网站尚未备案”无法访问,可将http改为https。我下载安装版本为cuda toolkit 8.0 对应 Nsight Monitor 5.4、Nsight Visual Studio Edition 5.4。参考CUDA远程调试
设置客户端与服务器的Nsight Monitor,在客户端添加Trusted Machines ip地址;关闭防火墙;建立CUDA工程,修改Nsight User Properties,然后编译调试
遇到的坑有三个:
- 如果客户端与服务器Nsight Monitor版本不一致,NSight会报错无法运行
- 如果服务器 显卡驱动版本太低,NSight会报错无法运行。我笔记本上的GT310m不支持更高版本的驱动,只好放弃了windows平台方案
- 采用windows远程桌面连接服务器端时,NSight会报错无法运行。必须关闭远程桌面,或者采用realVNC进行远程连接,或将显卡从WDDM模式改为TCC模式(需要Tesla架构以上)
https://zhidao.baidu.com/question/1370700257819372179.html
https://blog.csdn.net/ichocolatekapa/article/details/18960417
二、Linux平台 Nsight Eclipse Edition方案
客户端:虚拟机,核心显卡, Ubuntu 16.04.4 LTS
服务器端:GTX980, CentOS 7
安装虚拟机与linux
台式机装的是Windows系统,因此要在虚拟机上安装Linux系统。
我从清华大学开源镜像站下载VirtualBox与Ubuntu 16.04.4 LTS 镜像安装文件
.高校与教育网用户还可以访问
浙大开源镜像站http://mirrors.zju.edu.cn/.
其他国内用户可访问
阿里云开源镜像站https://opsx.alibaba.com/mirror
网易开源镜像站http://mirrors.163.com/virtualbox 安装 ubuntu系统参考 基于VirtualBox虚拟机安装Ubuntu图文教程
Linux系统下安装NVIDIA 显卡驱动与CUDA toolkit
参考我之前的博客http://www.cnblogs.com/kaikaikai/p/8343816.html。 在NVIDIA开发者网站https://developer.nvidia.com/cuda-toolkit下载对应版本的CUDA toolkit Linux run文件并执行,按照安装脚本配置路径即可。最好显卡驱动和CUDA分开安装注意客户端上由于没有NVIDIA的显卡,不需要(也无法)安装NVIDIA显卡驱动。要想简化配置,客户端的CUDA版本最好与服务器相同,toolkit安装位置及Samples的安装位置最好也相同。如不同需在Nsight中添加路径。我安装版本为cuda 7.0
- 客户端上重装gcc与g++,使其版本号与服务器相同
参考Ubuntu如何重新安装g++编译器。通过gcc -v可查看gcc版本。若安装完成后找不到gcc(g++),在/usr/bin/中添加链接
ln -s gcc-* gcc
ln -s g++-* g++
其中gcc-*为所安装gcc版本,如我安装的为gcc 4.8,g++ 4.8 - 在服务器防火墙添加2345端口,或关闭防火墙
参考NSight Eclipse Edition 下创建CUDA程序并执行远程编译及调试 建立CUDA工程,然后编译调试。
Note
NSIGHT ECLIPSE EDITION Getting Started Guide中列出了三种开发模式:(1)、本机编辑生成调试 (2)、本机编辑生成、远程调试 (3)、本机编辑代码、远程生成调试。

若采用模式(3)需添加远程机(服务器)的相关路径,否则会报错,如:error: helper_functions.h: No such file or directory
如果第2步中客户端服务器安装位置相同,通常不需要额外添加路径
采用模式(3)时,若编译生成时出现报错

需将客户端与服务器的user.name 设置为同一个名字,user.email为同一个地址。
git config --global user.name <anyname>
git config --global user.email <anyemail>远程Debug连接超时,需打开服务器2345端口
CUDA并行程序设计 开发环境搭建与远程调试的更多相关文章
- spark JAVA 开发环境搭建及远程调试
spark JAVA 开发环境搭建及远程调试 以后要在项目中使用Spark 用户昵称文本做一下聚类分析,找出一些违规的昵称信息.以前折腾过Hadoop,于是看了下Spark官网的文档以及 github ...
- 《Java Web程序设计——开发环境搭建》
Java Web程序设计--开发环境搭建 一.JDK下载.安装以及环境变量的配置: 官网:https://www.oracle.com/java/technologies/download ...
- Go 开发环境搭建和代码调试
写这篇笔记的目的,主要是分享我在Go学习中遇到的坑.让后面的学习者能否参考有用的经验. 其中有一些小技巧,对初学者来说,可能会大大节约填坑的时间. 比如如何设置vscode的Go调试器,Go的语法高亮 ...
- arm-linux-gdb+gdbserver环境搭建以及远程调试
0) gdb源码下载:http://ftp.gnu.org/gnu/gdb/ 1) 编译arm-linux-gdb 指定交叉编译工具链的位置 export PATH=$PATH:/usr/local/ ...
- 《CUDA并行程序设计:GPU编程指南》
<CUDA并行程序设计:GPU编程指南> 基本信息 原书名:CUDA Programming:A Developer’s Guide to Parallel Computing with ...
- [.net 面向对象程序设计深入](9).NET Core 跨平台开发环境搭建
[.net 面向对象程序设计深入](9).NET Core 跨平台开发环境搭建 1.概述 读前必备:认识.NET Core 上篇介绍了.NET 新的生态环境:包括.NET Framework..NET ...
- python学习之python开发环境搭建
Python简介 Python是一种面向对象.解释型计算机程序设计语言.Python语法简洁而清晰,具有丰富和强大的类库等等众多的特性,这是来自百度百科的介绍,在百度百科还能看到它的更详细的介绍信息, ...
- 基于WDF的PCI/PCIe接口卡Windows驱动程序(1)-WDF概述及开发环境搭建
原文出处:http://www.cnblogs.com/jacklu/p/4619110.html 本科毕业设计是这方面的工作,所以想开几篇博客来介绍使用WDF开发PCI/PCIe接口卡的驱动程序方法 ...
- (转)微信公众平台开发之基于百度 BAE3.0 的开发环境搭建(采用 Baidu Eclipse)
原文传送门(http://blog.csdn.net/bingtianxuelong/article/details/17843111) 版本说明: V1: 2014-2-13 ...
随机推荐
- django settings.py 配置文件
目录 settings.py 配置文件 settings.py 配置文件 import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.ab ...
- Python简介及开发环境搭建
Python简介 Python是一门动态解释性的强类型定义的计算机程序设计语言,是一种完全面向对象的语言,由荷兰人"龟叔"-Guido van Rossum于1989年开发,于19 ...
- Ubuntu下载搜狗输入法
实在...因为百度上写的就很好了,所以这里就直接“链”了.. https://jingyan.baidu.com/article/2d5afd6933a67b85a2e28e9f.html
- mysql常用处理时间的相关函数
1.DATE_ADD() 函数向日期添加指定的时间间隔 DAY) AS OrderPayDate FROM Orders 2.DATE_SUB() 函数从日期减去指定的时间间隔 DAY) AS Sub ...
- GOF 的23种JAVA常用设计模式 学习笔记 持续更新中。。。。
前言: 设计模式,前人总结下留给后人更好的设计程序,为我们的程序代码提供一种思想与认知,如何去更好的写出优雅的代码,23种设计模式,是时候需要掌握它了. 1.工厂模式 大白话:比如你需要一辆汽车,你无 ...
- .NET Core 中三种模式依赖注入的生命周期。
注入模式 同一个请求作用域 不同的请求作用域 AddSingleton 同一个实例 同一个实例 AddScoped 同一个实例 新实例 AddTransient 新实例 新实例
- Java 常用API (第二部分)
常用api第二部分 Date 类 import java.util.Date; 时间原点: 1970-01-01 00:00:00(英国格林威治) 中国属于东八区, 会把时间增加 8 个小时: 197 ...
- django路由的反向解析
什么是路由的反向解析 我们的路由都是一个匹配关系,对应一个处理的视图函数, 如果我们的匹配关系发生了变化,那么与之对应的访问地址(可能前端直接url链接, 也可能是后端的redrict跳转)都需要跟着 ...
- Swift枚举的全用法
鉴于昨天开会部门会议讨论的时候,发现有些朋友对枚举的用法还是存在一些疑问,所以就写下这个文章,介绍下Swift下的枚举的用法. 基本的枚举类型 来,二话不说,我们先贴一个最基本的枚举: enum Mo ...
- python使用tkinter无法给顶层窗体的输入框设定默认值
这几天某同学遇到了一个棘手的问题,困扰了很久.今天终于解决了,我来记录一下坑. 情景:python 使用tkinter为第二层窗体(顶层窗体)中的一个输入框设定默认值时,总是无法设置,而且对输入框获取 ...