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图标,即可启动Ns​​ight。

加载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相关推荐

  1. Turtlebot4入门教程-软件-软件包安装

    来源:Turtlebot4入门教程-软件-软件包安装 - 创客智造 说明: 介绍Turtlebot4相关软件包的安装 TurtleBot 4 有 4 个主要的软件存储库:turtlebot4.turt ...

  2. TurtleBot4快速入门教程-软件综述

     系列文章目录: Turtlebot4快速入门教程-目录 TurtleBot4快速入门教程-硬件介绍 Turtlebot4快速入门教程-软件综述 TurtleBot4快速入门教程-远程PC安装 Tur ...

  3. VAPS XT开发入门教程02:安装配置

    开工第一步是安装软件 windows下 windows下有安装手册,但是此安装手册在安装包里面,只有在安装完成后才能看到.没有安装手册又无法安装. 先准备安装文件和授权证书. License_Tool ...

  4. ESP32-C3入门教程 IoT篇⑥——阿里云 物联网平台 EspAliYun RGB LED 实战之设备批量生产工具

    阿里云物联网平台ESP32设备批量工具 文章目录 一.前言 二.软件框架 三.阿里云物联网平台API 3.1 查询设备 3.2 添加设备 四.二维码生成 五.csv生成 六.csv转bin 七.bin ...

  5. ESP32-C3入门教程 环境篇⑥——ESP-IDF编译原理简述(CMakeLists/CMake)和构建自定义项目

    文章目录 一.前言 二.ESP-IDF编译原理 2.1 基础知识 2.2 软件组件 2.3 构建过程 2.4 最简单的示例项目 三.构建自定义项目 3.1 项目重命名 3.2 main.c重命名 3. ...

  6. ESP32-C3入门教程 网络篇⑨——基于esp_https_ota实现史上最简单的ESP32 OTA远程固件升级功能

    文章目录 一.前言 二.软件流程 三.全部源码 四.运行演示 一.前言 本文基于VS Code IDE进行编程.编译.下载.运行等操作 基础入门章节请查阅:ESP32-C3入门教程 基础篇①--基于V ...

  7. Kubernetes入门教程 --- 使用二进制安装

    Kubernetes入门教程 --- 使用二进制安装 1. Introduction 1.1 架构图 1.2 关键字介绍 1.3 简述 2. 使用Kubeadm Install 2.1 申请三个虚拟环 ...

  8. 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= ...

  9. 微信公众号开发入门教程第一篇

    微信公众号开发入门教程第一篇 关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/ ...

  10. wireshark使用教程 linux,Linux入门教程:ubuntu下安装wireshark(以及配置非root),这个强大的工具可以捕...

    Linux入门教程:ubuntu下安装wireshark(以及配置非root),这个强大的工具可以捕 Wireshark是世界上最流行的网络分析工具.这个强大的工具可以捕捉网络中的数据,并为用户提供关 ...

最新文章

  1. php文件的标准格式化,PHP获取文件大小并格式化的几种方法
  2. python爬虫提取a标签_Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
  3. 14.JAVA整型变量
  4. Mac电脑「空格键」的使用技巧
  5. android商店账号密码错误,安卓:我失去了我的安卓密钥商店,我该怎么办?
  6. 问题记录:EntityFramework 一对一关系映射
  7. win11资源管理器历史搜索记录如何删除 Windows11禁用资源管理器历史搜索记录的设置方法
  8. Response.AddHeader
  9. 变异数分析_人工智能系统中分析变异的祸害
  10. mysql5.7审计功能开启_开启mysql的审计功能
  11. Python3安装Crypto模块
  12. 趋势科技防毒墙—控管中心
  13. 学校计算机机房使用登记表,计算机机房使用登记表.xls
  14. 十大经典排序算法-堆排序算法详解
  15. 分治法_乒乓球比赛赛程安排(C语言)
  16. 【完整源码】如何在BSC部署多代层级分红
  17. 前端写出优雅的代码,融会贯通es6
  18. 苹果怎么登录服务器未响应,王者荣耀登陆游戏服务器未响应该怎么解决 王者荣耀无法登陆解决办法...
  19. 饿饿,饭饭「每日一题」
  20. 中国可信计算机走向世界核心技术领

热门文章

  1. 【联想拯救者R7000】安装nvidia驱动Perform MOK management 界面键盘失灵现象(已解决)
  2. 电驴让分享继续 服务器不稳定,为什么越来越多的人不再使用eD2k了?回顾电驴的兴与衰...
  3. 在页面中加载Apache ECharts 5/百度地图
  4. 计算机病毒黑色星期五制造者,计算机病毒复习资料
  5. 【Linux】一个小故事让你秒懂shell外壳程序
  6. XcodeGhost相关的十个问题
  7. 微软面试题 经典测试 (博弈论 经典案例)
  8. Quick Startup(电脑开机启动项管理软件)官方中文版V5.20.1.168 | 如何管理电脑开机启动项
  9. Mac常用测试工具环境变量配置
  10. vue自定义一个视频播放器