timerring

Introduction to CUDA and Linux Basics

July 24, 2023 · 10 min read
Tutorial
CUDA | GPU | Linux
If you have any questions, feel free to comment below. Click the block can copy the code.
And if you think it's helpful to you, just click on the ads which can support this site. Thanks!

从 CUDA 与 NVIDIA 技术生态入门,介绍 Ubuntu、Jetson 开发环境、权限管理、SSH 和 Makefile。

什么是 CUDA #

并行计算加速: 多核+众核的异构体系

NVIDIA 技术应用生态链 #

用 CUDA 做最基本的运算加速。

GPU 24 年加速计算历程 #

Ubuntu 基础介绍 #

操作系统 #

操作系统的作用:

  • 是现代计算机系统中最基本和最重要的系统软件。是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩展。
  • 主要作用是管理好硬件设备,并为用户和应用程序提供一个简单的接口,以便于使用。将具体硬件的使用封装成一个个的系统调用,可以通过系统调用的方法,将代码的指令翻译成机器语言,让 CPU 和 GPU 做相应的计算。
  • 而其他的诸如编译程序、数据库管理系统, 以及大量的应用软件,都直接依赖于操作系统的支持。

Linux 操作系统发展历史 #

L4T Ubuntu 与 x 86 Ubuntu 系统的区别 #

  • x86 Ubuntu :是指运行在 x86架构 CPU 的 linux ubuntu 版本的操作系统。
  • L4T Ubuntu: L4T 是 linux for tegra 的缩写,Tegra 是集成了 ARM 架构的 CPU 和 NVIDIlA 的 GPU 的处理器芯片,所以 L4TUbuntu 就是为运行在基于 arm 架构的 Tegra 芯片上的 linux ubuntu 版本的操作系统,它是专门为 Tegra 定制的 ubuntu 特殊版本。

主要区别:

  • 应用场景: ARM 处理器定位于嵌入式平台,应用在开发板、边缘设备、智能设备上;X86定位于桌面PC和服务器。
  • ARM 是为了低功耗高效率设计的,而 X86是为了追求高性能。
  • 设计架构: ARM 是精简指令集(RISC)架构; x 86 是复杂指令集 (ClISC)架构。
  • ARM几乎都采用Linux的操作系统;X86多为window系统也可采用linux操作系统。

实验平台与基本开发环境 #

JETSON NANO 与 NX #

https://www.nvidia.cn/autonomous-machines/embedded-systems/jetson-nano/product-development/[1]

NX 大概是 6tflops 的计算性能,大概是 Nano 的 12 倍。

JupyterLab #

JupyterLab: 数据科学生产工具,它作为一种基于 web 的集成开发环境,你可以使用它编写代码的 notebook、操作终端、编辑 markdown 文本、打开交互模式、查看 csv 文件及图片等功能。

安装方法:

#pip
pip install jupyterlab
#conda
conda install -c conda-forge jupyterlab

启动方法:

jupyter lab

Ubuntu 文件管理-目录结构 #

Ubuntu 用户权限管理 #

超级用户 #

su
# 或者
su -
# 退出
exit

用户组 #

  • (User)文件所有者。
  • (Group)群组,我们可以在 Ubuntu 系统中为团队建立一个群组。
  • (Others)其他人,不属于文件所有者或文件所属群组成员的用户便都是其他人。

注意:最开始的 d 表示类型,如果是文件夹的话则是 d。

文件权限的修改 #

字母法:

chmod  (u g o a)   (+ - =)   (r w x)   (文件名)

# 例如:
chmod ugo+r file1.txt
chmod ug+w,o-w file1.txt file2.txt

数字法:

数字组合一般包含三个数字:

  • 第一个数字对应字母法的用户 u (user)
  • 第二个数字对应字母法的用户 g (group)
  • 第三个数字对应字母法的用户 o (other)
chmod 数字组合 文件名

# 例如:
# 数字法:
chmod 755 filename
# 对应字母法:
chmod u+rwx,g+rx,o+rx filename
# 数字法: 
chmod 751 filename
# 对应字母法:
chmod u+rwx,g+rx,o+xfilename
# 数字法: 
chmod 765 filename
# 对应字母法:
chmod u+rwx,g+rw,o+rx filename

Ubuntu 常用命令的基本使用 #

clear # 清屏

查看文件目录:

文件新建/删除:

文件拷贝/移动:

文件搜索:

查看时间与日期:

date # 查看系统时间
cal -y # 查看当年日历

查看空间:

df -h # 显示磁盘使用情况
du -h Desktop # 显示桌面目录内容尺寸

查看与处理进程:

ps # 显示当前用户终端启动进程信息
ps au # 显示所有用户终端启动进程详细信息
kill -9 1278 # 终止pid为1278的进程

Jtop 查看工具:

# 首先需要安装一下
sudo -H pip install -U jetson-stats
# 然后直接输入启动即可
jtop

Ubuntu 网络管理与 SSH #

网络管理 #

SSH 远程连接 #

SSH 是专为远程登录会话和其他网络服务提供安全性的协议,有效防止远程管理过程中的信息泄漏。

  • 传输数据加密,能够防止 DNS 和 IP 欺骗。
  • 传输数据压缩,加快传输速度。
  • Linux 中默认已安装 SSH 客户端,可直接在终端中使用 SSH 命令。

# 以colin用户登录192.168.1.196的到ssh服务器
ssh [email protected]
# 法以colin用户登录到192.168.1.198的ssh服务器,使用2222端口
ssh -p 2222 [email protected]

Makefile 的基本介绍与编写规则 #

参考: https://blog.csdn.net/kunhe0512/article/details/128623790[2]

什么是 Makefile #

当一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系列的规则,可以来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译。Makefile 就像一个 Shell 脚本一样,可以实现“自动化编译”,一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。

Makefile 的编写规则 #

例如下面的例子:

其中 makefile 符合上述规则,test 目标文件主要的依赖是 test.c 文件。然后通过 gcc 编译。在该文件夹下,直接输入 make 即可完成 make 编译,得到的 test 可执行文件直接输入 ./test 就可以执行。

多个 C 的工程文件 #

其中,CC = gcc 类似一个宏变量,底下采用 $() 引入即可,后缀名为 o 的文件就是 object。这种文件是 C 语言的源代码经过编译程序产生能够被 CPU 直接识别的二进制代码,那 o 文件里面的主要内容就是 01代码串。

同样执行 make 之后文件夹下产生 main 可执行文件以及 .o 的目标文件。此外还可以执行 make clean 按照定义的规则清除 .o 文件以及上次的 main 文件。

执行顺序 #

编写一个 makefile 文件

binggo :test test2
	echo "hello all"
test:
	echo "hello test"
test2:
	echo "hello test2"

Makefile 默认会以文件中的第一个目标为最终目标也就是这里的 binggo, binggo 目标有两个依赖,test 和 test 2 .同样 test 和 test 2 也作为目标 ,但他们不存在依赖文件。

执行顺序: 先执行依赖 test ,再执行依赖 test 2 ,在依赖满足后执行目标文件

可以使用 make makefile -n 来看一下执行过程

echo "hello test"
echo "hello test2"
echo "hello all"

Related readings


<< prev | AI开发硬件环境综述 Continue strolling GPU Hardware... | next >>

If you want to follow my updates, or have a coffee chat with me, feel free to connect with me: