jetson用什么编译器_TK1入门教程软件篇-安装Nsight
TK1入门教程软件篇-安装Nsight
说明:
介绍在TK1上安装Nsight Eclipse Edition
介绍基于ARM的开发套件NVIDIA Jetson TK1远程开发CUDA应用程序的过程
Nsight简介:
NVIDIA®Nsight™Eclipse Edition是一款全功能的集成开发环境
可让您轻松开发本地(x86)系统或远程(x86或ARM)目标的CUDA®应用程序。
Nsight支持两种远程开发模式:交叉编译和“同步项目”模式。
您的x86主机系统上的ARM交叉编译需要您的主机系统上存在用于链接应用程序的所有ARM库。
在同步项目模式中,您的源代码在主机和目标系统之间进行同步,并直接在远程目标上进行编译和链接,这具有所有库在目标系统上解决而无需存在的优点在主机上。
这些远程开发模式都不需要NVIDIA GPU存在于您的主机系统中
注意:
ARM的CUDA交叉编译工具仅在CUDA 6 Toolkit的Ubuntu 12.04 DEB软件包中可用。
如果您的主机系统正在运行Ubuntu 12.04以外的Linux发行版,那么我建议使用synchronize-projects远程开发模式
CUDA工具包安装:
交叉编译的第一步:在您的主机系统上安装CUDA 6 Toolkit
下载cuda地址:
https://developer.nvidia.com/cuda-downloads
1.启用armhf作为外部架构,以便安装Cross-armhf软件包:
$ sudo sh -c \ 'echo "foreign-architecture armhf" >> /etc/dpkg/dpkg.cfg.d/multiarch'
$ sudo apt-get update
2.运行dpkg来安装和更新repo元数据:
$ sudo dpkg – i cuda-repo-ubuntu1204_6.0-37_amd64.deb
$ sudo apt-get update
3.安装cuda cross和ARM GNU软件包(这些将在将来的工具包版本中链接):
$ sudo apt-get install cuda-cross-armhf
$ sudo apt-get install g ++ - 4.6-arm-linux-gnueabihf
4.可选 - 如果您还希望在主机系统中进行本机x86 CUDA开发并具有NVIDIA GPU,那么您可以安装完整的工具链和驱动程序
$ sudo apt-get install cuda
如果您安装了驱动程序,以便NVIDIA驱动程序加载,请重新启动系统。
然后更新路径到工具包安装位置,如下所示:
$ export PATH=/usr/local/cuda/bin:$PATH
$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
在这些步骤结束时,您应该看到armv7-linux-gnueabihf和/usr/local/cuda/targets/下的可选x86_64_linux文件夹
对于您的交叉开发需求,Jetson TK1预装了用于Tegra(L4T)的Linux,这是NVIDIA提供的修改的Ubuntu(13.04或更高版本)Linux发行版。
NVIDIA提供电路板支持包和包含CUDA工具包,OpenGL 4.4驱动程序和NVIDIA VisionWorks™工具包的软件堆栈。
导入Jetson TK1 CUDA样品到Nsight
在安装了CUDA Toolkit并在主机系统上设置路径后,在命令行中键入“nsight”(不带引号)
或在Ubuntu仪表板中找到Nsight图标,即可启动Nsight。
加载Nsight后,导航到File-> New-> CUDA C / C ++ Project并导入现有的CUDA示例以启动“项目创建”向导
对于项目名称,输入“boxfilter-arm”,并在工程类型中选择“导入CUDA样本”,并在工具链中选择“CUDA Toolkit 6.0”
接下来,选择可以在Imaging类别下找到的Boxfilter样本
向导中剩余的选项可以选择哪些GPU和CPU架构来生成代码
我们将选择由nvcc编译器生成的GPU代码。
由于Jetson TK1包括NVIDIA Kepler™GPU,选择SM32 GPU二进制代码和SM30 PTX中间代码。(后者是任何开普勒级GPU可以运行此应用程序。)
向导中的下一页可以让您决定是否希望为ARM系统进行本机x86开发或交叉编译
要交叉编译ARM,请在CPU架构下拉框中选择ARM体系结构
构建您的第一个Jetson TK1应用程序:
CUDA样本是可以导入和运行在各种硬件配置上的通用代码示例
对于这种交叉构建练习,必须首先解决此应用程序使用的ARM库依赖关系。
以下是您可以解决的问题:
1.右键单击项目并导航到Properties->Build->Settings->Tool Settings->NVCC Linker->Libraries ,并更新路径以指向 linux/armv7l而不是 linux/x86_64。
这将解决libGLEW库依赖关系。
也删除GLU的条目,因为该库未被使用。
2.单击Miscellaneous选项卡,并添加一个新的-Xlinker选项“-unresolved-symbols = ignore-in-shared-libs”(不带引号)
3.在终端窗口中,使用scp实用程序从Jetson TK1中复制剩余的库:
scp ubuntu@your.ip.address:/usr/lib/arm-linux-gnueabihf/libglut.so.3 /usr/arm-linux-gnueabihf/lib folder, with a symlink to libglut.so
scp ubuntu@your.ip.address:/usr/lib/arm-linux-gnueabihf/tegra/libGL.so.1 /usr/arm-linux/gnueabihf/lib folder, with a symlink to libGL.so
scp ubuntu@your.ip.address:/usr/lib/arm-linux-gnueabihf/libX11.so.6 /usr/arm-linux-gnueabihf/lib folder, with a symlink to libX11.so
注意:您只需为第一个CUDA样本复制这些ARM库。您可能需要其他样品的其他库。
ARM交叉开发的构建过程与本地构建过程类似。
只需点击工具栏菜单中的“hammer”图标即可构建一个调试ARM二进制文件。
作为编译过程的一部分,Nsight将为GPU代码和arm-linux-gnueabihf-g++-4.6交叉编译器为CPU代码启动nvcc
如下所示:
Building file: ../src/boxFilter_kernel.cu
Invoking: NVCC Compiler
/usr/local/cuda-6.0/bin/nvcc -I"/usr/local/cuda-6.0/samples/3_Imaging" -I"/usr/local/cuda-6.0/samples/common/inc"
-I"/home/satish/cuda-workspace_new/boxfilter-arm" -G -g -O0 -ccbin arm-linux-gnueabihf-g++-4.6 -gencode arch=compute_30,
code=sm_30 -gencode arch=compute_32,code=sm_32 --target-cpu-architecture ARM -m32 -odir "src" -M -o "src/boxFilter_kernel.d"
"../src/boxFilter_kernel.cu"
/usr/local/cuda-6.0/bin/nvcc --compile -G -I"/usr/local/cuda-6.0/samples/3_Imaging" -I"/usr/local/cuda-6.0/samples/common/inc"
-I"/home/satish/cuda-workspace_new/boxfilter-arm" -O0 -g -gencode arch=compute_30,code=compute_30 -gencode arch=compute_32,
code=sm_32 --target-cpu-architecture ARM -m32 -ccbin arm-linux-gnueabihf-g++-4.6 -x cu -o "src/boxFilter_kernel.o"
"../src/boxFilter_kernel.cu"
Finished building: ../src/boxFilter_kernel.cu
在编译步骤之后,链接器将解析所有库引用,为您提供一个可以运行的boxfilter-arm二进制文件。
从Nsight运行您的第一个Jetson TK1应用程序:
要运行目标Jetson TK1系统上的代码,请单击Run As->Remote C/C++ Application来设置目标系统用户和主机地址。
完成远程目标系统配置设置后,单击运行图标,您将看到一个新条目,以在Jetson TK1上运行boxfilter-arm二进制文件。
注意:框过滤器应用程序依赖于驻留在应用程序的数据/子文件夹中的数据文件,这些数据文件将需要复制到目标系统。
使用scp实用程序将这些文件复制到Jetson TK1上的/tmp/nsight-debug/data/文件夹中。
接下来,按如下所示编辑boxfilter.cpp文件:
1.要确保应用程序在正确的显示设备上运行,请将此行添加到主函数的顶部:
setenv(“DISPLAY”, “:0”, 0);
2.将以下行添加到显示功能的顶部,以便应用程序在几秒钟后自动终止。
在多个应用程序运行中收集确定性执行数据是必需的,稍后我们将在分析部分中
static int icnt = 120;
while(!icnt--)
{
cudaDeviceReset();
_exit(EXIT_SUCCESS);
}
单击运行以在Jetson TK1上执行修改后的Box Filter应用程序
调试您的第一个Jetson TK1应用程序在Nsight
您之前在Nsight中设置的远程目标系统配置也将在工具栏中的调试器图标下可见。
在启动调试器之前,请注意,默认情况下,Jetson TK1不允许任何应用程序在100%的时间内完全占用GPU。
为了运行调试器,我们需要解决这个问题。
在您的Jetson TK1上,以root用户身份登录(sudo su),然后按照以下步骤禁用超时(在将来的CUDA版本中,调试器将自动处理):
root@tegra-ubuntu:/home/ubuntu# echo N > sys/kernel/debug/gk20a.0/timeouts_enabled
现在我们可以使用主机系统上的调试图标启动调试器。
Nsight将切换到其调试器的角度,并打破CPU代码中的第一条指令。
您可以单步一步查看CPU上的执行情况,并在更新变量和寄存器时进行监视。
要在GPU上执行的任何和所有CUDA内核,请转到Nsight右上窗格中的断点选项卡,然后单击多维数据集图标下拉列表。
然后选择“应用程序内核启动”功能,突破CUDA内核启动的第一条指令。
您现在可以恢复应用程序,直到第一个断点在CUDA内核中。
从这里,您可以在左上角的窗格中浏览CPU和GPU调用堆栈。
您还可以在右上窗格中查看变量,寄存器和HW状态。
您可以看到,Jetson TK1的GPU正在执行16个64个线程,每个线程都运行在该GK20A GPU的单个流式多处理器(SMX)上。
您还可以切换到反汇编视图,并通过单击i->图标来观察正在更新的寄存器值,以执行GPU指令级单步执行。
要“引导”(专注于)特定的GPU线程,请双击右上窗格中CUDA选项卡中感兴趣的线程。
固定的CUDA线程将显示在左上角的窗格中,允许您选择和单步执行这些线程。
(请记住,单步执行给定线程会导致同一个warp的剩余线程同步,因为它们共享一个程序计数器。)
您可以通过固定属于不同经线的线程来实验并观察。
通过从调试图标下拉列表中进入调试配置设置,您可以找到更多有用的调试功能,例如启用cuda-memcheck并附加到正在运行的进程(仅在主机系统上)。
要退出正在调试的应用程序,请单击调试器透视图中的红色停止按钮。
在Nsight中分析您的第一个Jetson TK1应用程序
让我们切换回C ++项目编辑器视图来启动分析器运行。
您在Nsight早期设置的远程目标系统配置也将在工具栏中的profiler图标下可见。
在启动概要分析器之前,请注意,您需要使用包含在编译选项中的-lineinfo创建发行版本。
这告诉编译器生成源到指令关联的信息。为此,首先,通过右键单击左侧窗格中的项目,进入项目设置。然后导航到 Properties->Build->Settings->Tool Settings->Debugging ,并选中“生成行号...”框,然后单击应用。
回到主窗口,点击build hammer下拉菜单,创建一个发布版本。解决任何构建问题,就像在上面的第一个运行中所做的一样,然后单击 Run As->Remote C/C++ Application 来运行应用程序的发行版本。
此时,Nsight将使用您要配置文件的发行版二进制覆盖Jetson TK1系统并运行一次。
然后点击配置文件图标下拉菜单,选择配置文件配置,您必须选择“配置文件远程应用程序”,因为二进制文件已经在Jetson TK1上。
然后,Nsight将在您运行应用程序时将其转换到剖析器视图,以收集所有CUDA运行时和驱动程序API调用以及在GPU上执行的内核的执行时间线视图。
属性选项卡显示从此时间轴中选择的任何事件的详细信息; 事件的详细信息也可以在文本窗体的“详细信息”选项卡中查看。
在下方窗格中的时间轴视图下方,还有一个“分析”选项卡对于性能调优非常有用。
它将引导您逐步解决应用程序中的性能瓶颈。
您可以通过点击“分析”选项卡下的图标,在引导和非指导分析之间切换。
您还可以获得源到指令的相关视图,其中显示红色的热点(指令执行计数特别高),如下图所示。
您可以从引导分析模式中获取此视图,方法是首先单击“检查个体内核”,并从已检查内核列表中选择排名最高的(100)内核,然后单击“执行内核分析”,然后单击“执行计算分析”。
从那里,单击“显示内核配置文件”将在右窗格中显示d_boxfilter_rgba_a内核。
双击内核名称以查看源到指令视图。单击给定的源代码行将突出显示相应的GPU指令。
您可以看到,无论您是NVIDIA®Nsight™Eclipse Edition还是新一代的Nsight用户,Nsight都可以轻松简单地为Jetson TK1平台创建CUDA应用程序,同时支持所有支持CUDA的GPU。
参考:
http://elinux.org/Jetson/Tutorials/Nsight
https://devblogs.nvidia.com/parallelforall/nvidia-nsight-eclipse-edition-for-jetson-tk1/
https://developer.nvidia.com/nsight-visual-studio-edition-downloads
https://developer.nvidia.com/nsight-eclipse-edition
jetson用什么编译器_TK1入门教程软件篇-安装Nsight相关推荐
- Turtlebot4入门教程-软件-软件包安装
来源:Turtlebot4入门教程-软件-软件包安装 - 创客智造 说明: 介绍Turtlebot4相关软件包的安装 TurtleBot 4 有 4 个主要的软件存储库:turtlebot4.turt ...
- TurtleBot4快速入门教程-软件综述
系列文章目录: Turtlebot4快速入门教程-目录 TurtleBot4快速入门教程-硬件介绍 Turtlebot4快速入门教程-软件综述 TurtleBot4快速入门教程-远程PC安装 Tur ...
- VAPS XT开发入门教程02:安装配置
开工第一步是安装软件 windows下 windows下有安装手册,但是此安装手册在安装包里面,只有在安装完成后才能看到.没有安装手册又无法安装. 先准备安装文件和授权证书. License_Tool ...
- ESP32-C3入门教程 IoT篇⑥——阿里云 物联网平台 EspAliYun RGB LED 实战之设备批量生产工具
阿里云物联网平台ESP32设备批量工具 文章目录 一.前言 二.软件框架 三.阿里云物联网平台API 3.1 查询设备 3.2 添加设备 四.二维码生成 五.csv生成 六.csv转bin 七.bin ...
- ESP32-C3入门教程 环境篇⑥——ESP-IDF编译原理简述(CMakeLists/CMake)和构建自定义项目
文章目录 一.前言 二.ESP-IDF编译原理 2.1 基础知识 2.2 软件组件 2.3 构建过程 2.4 最简单的示例项目 三.构建自定义项目 3.1 项目重命名 3.2 main.c重命名 3. ...
- ESP32-C3入门教程 网络篇⑨——基于esp_https_ota实现史上最简单的ESP32 OTA远程固件升级功能
文章目录 一.前言 二.软件流程 三.全部源码 四.运行演示 一.前言 本文基于VS Code IDE进行编程.编译.下载.运行等操作 基础入门章节请查阅:ESP32-C3入门教程 基础篇①--基于V ...
- Kubernetes入门教程 --- 使用二进制安装
Kubernetes入门教程 --- 使用二进制安装 1. Introduction 1.1 架构图 1.2 关键字介绍 1.3 简述 2. 使用Kubeadm Install 2.1 申请三个虚拟环 ...
- linux usb3.0改2.0,TX1入门教程硬件篇-切换USB2.0与USB3.0
TX1入门教程硬件篇-切换USB2.0与USB3.0 说明: 介绍如何切换TX1USB口的为2.0或3.0版本 步骤: 编辑extlinux.conf文件,修改usb_port_owner_info= ...
- 微信公众号开发入门教程第一篇
微信公众号开发入门教程第一篇 关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/ ...
- wireshark使用教程 linux,Linux入门教程:ubuntu下安装wireshark(以及配置非root),这个强大的工具可以捕...
Linux入门教程:ubuntu下安装wireshark(以及配置非root),这个强大的工具可以捕 Wireshark是世界上最流行的网络分析工具.这个强大的工具可以捕捉网络中的数据,并为用户提供关 ...
最新文章
- php文件的标准格式化,PHP获取文件大小并格式化的几种方法
- python爬虫提取a标签_Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
- 14.JAVA整型变量
- Mac电脑「空格键」的使用技巧
- android商店账号密码错误,安卓:我失去了我的安卓密钥商店,我该怎么办?
- 问题记录:EntityFramework 一对一关系映射
- win11资源管理器历史搜索记录如何删除 Windows11禁用资源管理器历史搜索记录的设置方法
- Response.AddHeader
- 变异数分析_人工智能系统中分析变异的祸害
- mysql5.7审计功能开启_开启mysql的审计功能
- Python3安装Crypto模块
- 趋势科技防毒墙—控管中心
- 学校计算机机房使用登记表,计算机机房使用登记表.xls
- 十大经典排序算法-堆排序算法详解
- 分治法_乒乓球比赛赛程安排(C语言)
- 【完整源码】如何在BSC部署多代层级分红
- 前端写出优雅的代码,融会贯通es6
- 苹果怎么登录服务器未响应,王者荣耀登陆游戏服务器未响应该怎么解决 王者荣耀无法登陆解决办法...
- 饿饿,饭饭「每日一题」
- 中国可信计算机走向世界核心技术领
热门文章
- 【联想拯救者R7000】安装nvidia驱动Perform MOK management 界面键盘失灵现象(已解决)
- 电驴让分享继续 服务器不稳定,为什么越来越多的人不再使用eD2k了?回顾电驴的兴与衰...
- 在页面中加载Apache ECharts 5/百度地图
- 计算机病毒黑色星期五制造者,计算机病毒复习资料
- 【Linux】一个小故事让你秒懂shell外壳程序
- XcodeGhost相关的十个问题
- 微软面试题 经典测试 (博弈论 经典案例)
- Quick Startup(电脑开机启动项管理软件)官方中文版V5.20.1.168 | 如何管理电脑开机启动项
- Mac常用测试工具环境变量配置
- vue自定义一个视频播放器