【CUDA】学习笔记(1)JetsonNano+Ubuntu+Eclipse

最近朋友送了一个Jetson nano 2g,正好用来学习一下比较热门的异构编程。之前有些C/C++开发的经验,但对CUDA基本没有接触过,在此记录一下学习CUDA的过程和心得。既然是编程方面的学习,我觉得还是先把开发环境搭建一下,再学习相关知识的同时也可以动手写一些简单的程序,个人认为这样的方式学习新知识更有效率。

我的笔记本是MacOS系统,很可惜NVIDIA已经停止了对MacOS的支持。所以我选择了Ubuntu系统,开发环境的目标是:Jetson nano + Ubuntu 20.04 Desktop + NSight Eclipse Edition + CUDA Toolkit 10.1 实现远程编译。

一、系统准备

Jetson nano端:

1.  下载系统镜像,https://developer.nvidia.com/embedded/jetpack。选择JetPack4.5(4.4版本并不支持2GB版本的nano)。

2. 烧录镜像文件到SD中然后启动。这里省略了烧录的过程,以及配置系统的ssh详细步骤。

Ubuntu端:

1.  通过虚拟机安装Ubuntu20.04 Desktop版本。

2.  通过ssh-keygen和ssh-copy-id工具配置从ubuntu到jetson nano的免密码输入登录(不配置也可以,只是为了方便)。

二、安装CUDA Toolkit

Jetson nano端:

1.  系统默认安装了cuda toolkit 10.2版本, 既然是入门学习就不考虑升级最新版本的问题了,先从一个版本开始学习。

2.  确认cuda版本,在命令行中输入:

$ cat /usr/local/cuda/version.txt 
CUDA Version 10.2.89

     或者查看cuda编译器的版本:

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_21:14:42_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89

3.  查看cuda安装的位置,默认在:/usr/local/cuda-10.2 

Ubuntu端:

说明:Ubunut主要安装CUDA Toolkit 和 Eclipse,CUDA Toolkit从10.2开始,安装包中就不包含完整版本的NVIDIA® Nsight™ Eclipse Edition,而是提供插件包,需要下载Eclipse CDT再安装插件。我对比了10.1提供的完整版Nsight Eclipse和10.2插件版的Nsight Eclipse,前者的功能较为实用, 对于初学者建议先使用完整版的Nsight Eclipse。

1. 安装cuda toolkit 10.1

官方提供的安装方式,网速比较慢

$ sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.105-418.39_1.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda

可以可以选择通过阿里云的镜像加速下载,Ubuntu20.04系统下可用:

$ wget https://mirrors.aliyun.com/nvidia-cuda/ubuntu1804/x86_64/cuda-ubuntu1804.pin
$ sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ sudo apt-key adv --fetch-keys https://mirrors.aliyun.com/nvidia-cuda/ubuntu1804/x86_64/7fa2af80.pub
$ sudo add-apt-repository "deb https://mirrors.aliyun.com/nvidia-cuda/ubuntu1804/x86_64/ /"
$ sudo apt-get update
$ sudo apt-get -y install cuda-10-1

2.  配置环境变量:

$ vi ~/.bashrc

#文件末尾添加
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.1/bin:$PATH

3.  安装完成后使用和Jetson端相同的方法查看一下cuda版本

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

4.  启动NVIDIA® Nsight™ Eclipse Edition, 在命令行输入nsight,便可启动。

      

5.  (可选)这里也提供一下插件安装Nsight Eclipse的方法。 CUDA 10.2支持eclipse 4.7 / 4.8 / 4.9

    5.1  下载eclipse CDT 4.8 安装包:https://www.eclipse.org/downloads/packages/release/photon/r  

    5.2  直接解压缩启动,从本地安装cuda toolkit 里的插件,选择菜单 "Help --> Install New Software..." 打开插件安装对话框
                 
                  插件安装包默认安装在 /usr/local/cuda-10.2/nsightee_plugins 目录下,选择后根据提示点击下一步进行安装,安装后要求重启,即完成。             

    5.3  选择菜单 "Window --> Preferences" 打开配置对话框,在左侧菜单可以看到CUDA的配置项。
            

三、测试CUDA开发环境

1. 打开eclipse,菜单选择 "File --> New --> CUDA C/C++ Project",输入项目名称 "HelloWorld", 项目类型选择 "CUDA Runtime Project",Toolchains选择 "CUDA Toolkit 10.1" 点击下一步:
               

2.  Ubuntu的机器没有Nvidia的显卡,会有一个警告,可以忽略,其他选择默认,继续下一步:

3.  点击 "Finish" 完成,项目默认会创建一个HelloWorld.cu的源文件,其中自动生成了一些代码,先删除这些代码,保留main函数,并写一个简单的HelloWorld程序

#include <stdio.h>
#include <cuda.h>

__global__ void mykernel(void) {

}

int main(void) {
	mykernel<<<1,1>>>();
	printf("Hello World!\n");
	return 0;
}

4.  配置程序的目标系统,远程连接到Jetson nano,右键点击项目,打开属性配置框:

5. 配置Jetson nano上的项目路径和nano上的cuda路径,比修改cpu架构为AArch64:

6. 点击 锤子 图标编译项目,生成二进制文件:

7.  生成一个运行配置,并测试运行程序,点击运行后可以在控制台看到输出结果:

       

8. 可以ssh连接到Jetson nano上看到上传的二进制文件,并在本地运行:
            有两个地方可以找到,一个是运行配置框里的"/tmp/nsight-debug/tmpexe",另一个是配置jetson远程连接时指定的项目路径。

基本的开发环境配置完了,学习一些简单的CUDA编程应该是够用了,而且比较方便。

总结:在整个配置过程中遇到不少问题,在解决这些问题的同时也对CUDA的版本,以及官网文档有了一些了解,这点对未来的学习会有很大帮助。对于CUDA的学习不一定要先购买近万元的设备,从Jetson Nano开始也是一个不错的选择!

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值