Nsight Eclipse插件版入门指南
使用Nsight Eclipse插件版的用户指南。
1. 简介
本指南介绍了Nsight Eclipse插件版,并提供了开始使用该工具所需的说明。Nsight Eclipse基于Eclipse CDT项目。有关Eclipse CDT功能的详细描述,请查阅Nsight内置帮助中的"C/C++开发用户指南"(通过帮助->帮助内容菜单访问)。
1.1. 关于Nsight Eclipse插件版
NVIDIA® Nsight™ Eclipse 版本是一个统一的CPU加GPU集成开发环境(IDE),用于在Linux和Mac OS X系统上为x86、POWER和ARM平台开发CUDA®应用程序。它旨在帮助开发人员完成软件开发流程的各个阶段。Nsight Eclipse插件可以通过标准的帮助->安装新软件...菜单安装在原生Eclipse上。主要功能如下:
编辑、构建、调试和分析CUDA-C应用程序
支持CUDA的源代码编辑器 - 提供语法高亮、代码补全和内联帮助功能
用于调试异构应用的图形用户界面
性能分析器集成 – 将可视化性能分析器作为外部应用程序启动,与在此IDE中构建的CUDA应用程序配合使用,轻松识别性能瓶颈
有关Eclipse平台的更多信息,请访问http://eclipse.org
2. 使用Nsight Eclipse版本
2.1. 安装Nsight Eclipse版本
Nsight Eclipse插件存档是CUDA工具包的一部分。可以通过Eclipse中的帮助 -> 安装新软件...菜单来安装Nsight Eclipse插件存档
2.1.1. 安装CUDA工具包
安装CUDA工具包:
访问NVIDIA CUDA Toolkit下载页面:https://developer.nvidia.com/cuda-downloads
选择适合的操作系统。Nsight Eclipse Edition 在 Mac OS X 和 Linux 工具包中提供。
下载并安装CUDA驱动。
下载并安装CUDA工具包。
按照说明在您的系统上配置CUDA驱动程序和工具包。
2.1.2. 配置CUDA工具包路径
使用数据收集页面
要开始使用,必须在安装了Nsight插件的Eclipse中配置CUDA Toolkit路径:
打开偏好设置页面,路径为 窗口 > 首选项。
前往CUDA工具包部分。
-
选择Nsight要使用的CUDA工具包路径。安装在默认位置的CUDA工具包将自动显示。
也可以在项目属性页面中指定CUDA工具包路径,以便为项目使用不同的工具包。
如果您希望向NVIDIA发送使用数据,请启用使用数据收集功能。
点击按钮将cuda-gdb和Visual Profiler设为默认启动器。
-
对于QNX系统: 当选择QNX作为目标操作系统时,如果尚未设置QNX_HOST和QNX_TARGET环境变量,将显示对话框进行设置。
QNX_HOST环境变量用于标识包含主机相关组件的目录:
QNX_TARGET环境变量用于标识包含目标系统相关组件的目录:
2.2. Nsight Eclipse主窗口
首次运行时,Eclipse会要求选择工作空间位置。工作空间是一个文件夹,Nsight将在此存储其设置、本地文件历史记录和缓存。应选择一个空文件夹以避免覆盖现有文件。
选择工作区位置后,主Nsight窗口将打开。主窗口分为以下区域:
编辑器 - 显示已打开用于编辑的源文件。
项目资源管理器 - 显示项目文件
大纲 - 显示当前编辑器中源文件的结构。
问题 - 显示IDE静态代码分析或编译期间检测到的错误和警告。
控制台 - 在构建过程中显示make输出或运行应用程序的输出。
2.3. 创建新项目
从主菜单中,打开新建项目向导 - 文件 > 新建... > CUDA C/C++ 项目
指定项目名称和项目文件位置。
指定项目类型,例如可执行项目。
从工具链列表中选择CUDA工具链。
在下一个向导页面中指定项目配置。
完成向导。项目将显示在项目资源管理器视图中,并且源代码编辑器将被打开。
点击主工具栏上的锤子按钮来构建项目。
创建新项目后的Nsight主窗口
2.4. 导入CUDA示例
CUDA示例是CUDA工具包安装中的可选组件。Nsight提供了一种机制,可以轻松导入这些示例并进行操作:
注意
使用CUDA驱动API(后缀为“Drv”)的示例不受Nsight支持。
从主菜单中打开新建项目向导 - 文件 > 新建... > CUDA C/C++ 项目
指定项目名称和项目文件位置。
在项目类型树中的可执行文件下选择导入CUDA示例。
从工具链选项中选择CUDA工具链。
在下一个向导页面,选择您想要导入的项目示例。同时选择目标CPU架构。点击下一步...
在下一个向导页面中指定项目参数。
完成向导。项目将显示在项目资源管理器视图中,并且源代码编辑器将被打开。
点击主工具栏上的锤子按钮来构建项目。
2.4.1. cuHook示例
cuHook示例项目会同时构建库文件和可执行文件。cuHook示例应按照以下步骤作为"makefile"项目导入。
从主菜单中,打开新建项目向导 - 文件 > 新建... > CUDA C/C++ 项目
选择项目类型“Makefile项目”并选择“空项目”
指定项目名称和项目文件位置。
完成向导。该项目将显示在项目资源管理器视图中。
右键点击项目 - 导入... > 常规 > 文件系统
在下一个向导页面中,选择cuHook示例的位置(Samples/7_CUDALibraries/cuHook)
选择所有源文件和makefile并完成向导
点击主工具栏上的锤子按钮来构建项目。
要运行示例,从主菜单选择 运行 > 运行配置... > 选择可执行文件 > 转到环境选项卡 > 新建... > 输入名称=LD_PRELOAD,值=./libcuhook.so.1 > 点击运行将执行示例
2.5. 配置构建设置
以下是可为所选项目配置的Nvcc链接器设置类别。
注意
主页面中的所有选项字段均不可编辑,它们是子类别中设置的选项集合。
-
库文件 - 配置库搜索路径(-L)和链接库(-l)。当您为不同目标操作系统进行交叉编译时,库搜索路径应指向目标操作系统库所在的适当位置。
杂项 - 设置额外的链接器选项以及与OpenGL库链接的选项。
共享库设置 - 设置构建共享库的选项。
以下是可为所选项目配置的Nvcc编译器设置类别。
注意
主页面中的所有选项字段均不可编辑,它们是子类别中设置的选项集合。
方言 - 选择语言标准和方言选项。
预处理器 - 为预处理器添加已定义和未定义的符号。
Includes - 设置编译器的包含路径和包含文件。
优化 - 设置编译器用于代码生成的优化级别。此外,设置编译器在编译过程中使用的线程数("拆分编译")。拆分编译分为基础版和扩展版,两者不能同时使用。
调试 - 设置选项以生成调试信息。
CUDA - 为相同的虚拟架构生成针对不同实际架构的PTX代码。
2.6. 调试CUDA应用程序
Nsight必须正在运行且至少存在一个项目。
在项目资源管理器视图中,选择您要调试的项目。确保项目可执行文件已编译且项目上没有显示错误标记。
右键点击项目,选择 Debug As(调试方式)> NVIDIA CUDA GDB Debugger 菜单。
首次运行调试器时,系统会提示您切换透视图。点击"是"。透视图是针对特定任务专门设计的窗口布局预设。
应用程序将在主函数中暂停。此时没有GPU代码在运行。
在设备代码中添加一个断点。恢复应用程序运行。
当应用程序到达断点时,调试器将中断。您现在可以检查CUDA设备状态、逐步执行GPU代码或恢复应用程序运行。
调试CUDA应用程序
可以在调试配置对话框中通过"运行 > 调试配置..."菜单设置其他调试器选项。
调试CUDA应用程序
2.7. CUDA应用的远程开发
从CUDA Toolkit 6.0开始,Nsight Eclipse Edition还支持CUDA应用程序的远程开发。下图展示了Nsight Eclipse Edition如何用于本地和远程开发:
对于远程开发,您的本地主机系统无需配备任何NVIDIA GPU。远程目标系统可以是搭载NVIDIA GPU的Linux x86/POWER系统,或基于Tegra的ARM系统。请注意Nsight集成开发环境和用户界面工具仅支持在x86和POWER系统上运行。
Nsight Eclipse插件支持针对远程设备的交叉编译模式。
在交叉编译模式下,项目位于主机系统上,交叉编译也在主机系统上完成。交叉编译模式仅在Ubuntu x86主机系统上受支持。
2.8. 远程调试CUDA应用程序
远程调试功能自CUDA Toolkit 5.5版本开始提供。使用Nsight远程调试界面不需要专用GPU,但调试目标机上仍需配备专用GPU。目前仅支持Linux目标系统。调试主机与目标机可运行不同操作系统或具有不同CPU架构。远程机器必须能通过SSH访问,且两台机器都必须安装CUDA Toolkit。
注意
如果主机和目标之间存在防火墙,必须将其设置为允许RSP消息通过,或者必须使用SSH端口转发。
-
选择项目并右键点击,然后进入"调试方式..." > "NVIDIA CUDA GDB调试器(远程)"菜单项。
-
输入本地可执行文件的完整路径,或使用“本地文件...”按钮选择一个。
从下拉列表中选择一个远程连接,或点击"添加连接..."按钮创建新连接。
-
如果正在创建新的远程连接,请输入主机名(或IP地址)以及用户名。选择SSH作为系统类型。对于QNX目标设备还需勾选QNX复选框,然后点击完成。
-
针对安卓设备: 要通过安卓调试桥配置远程连接,请从远程连接下拉列表中选择安卓调试桥,安卓设备必须通过USB端口连接到主机系统。
点击管理按钮,输入或选择adb工具的路径。您需要安装安卓SDK平台工具才能使用安卓调试桥。点击检测按钮查找通过ADB可用的安卓设备。
可选: 点击"连接"按钮验证所选的远程连接。
点击下一步按钮。
-
输入远程系统上cuda-gdbserver的完整路径,或使用“浏览...”按钮选择一个。
点击“添加新路径”或浏览...按钮,指定远程应用程序依赖的共享库路径。
点击完成按钮以结束新的调试配置向导并开始调试应用程序。
首次运行调试器时,系统会提示您切换透视图。点击"是"。透视图是针对特定任务预设的窗口布局。
调试器将在应用程序的主例程处停止。您现在可以设置断点,或继续运行应用程序。
调试远程CUDA应用程序
2.8.1. 提升远程调试性能
在进行远程调试时,将目标库的副本存放在本地sysroot中会很有帮助。从CUDA 11.5开始,这个功能可以在调试器配置 -> 调试器选项卡中找到。您可以修改'CUDA GDB sysroot (用于远程调试)'指向本地sysroot目录,以提高调试性能。
2.9. 分析CUDA应用程序
Nsight必须正在运行且至少存在一个项目。调试会话进行时无法使用性能分析器。
Nsight Eclipse Edition的分析功能基于NVIDIA Visual Profiler (nvvp)代码。Nsight Eclipse插件版将启动Visual Profiler作为外部工具,并携带所选项目的可执行文件及其他信息。
在项目资源管理器视图中,选择您想要进行分析的项目。确保项目可执行文件已编译且项目上没有显示错误标记。
-
选择项目并右键点击,进入 Profile As(性能分析)> NVIDIA Visual Profiler 菜单。
Nsight Eclipse将启动Visual Profiler,利用从选定项目传递的可执行文件信息来指定额外的性能分析器选项。
分析CUDA应用程序
2.10. 在Docker容器内构建CUDA项目
您可以在Docker容器中使用Nsight Eclipse Edition构建和调试C/C++及CUDA项目。首先需要拉取并安装封装了CUDA工具包和跨平台工具链的Docker镜像。这些Docker镜像可从NVIDIA GPU Cloud获取。然后您就可以使用Nsight Eclipse Edition在Docker容器中构建CUDA项目。
打开Nsight Eclipse Edition并配置容器设置。
-
打开首选项页面,选择 窗口 > 首选项,然后进入:CUDA > 容器设置
如果希望在Docker容器内构建项目,请选择此选项。确保CUDA首选项中指定的CUDA工具包路径是Docker容器内的CUDA工具包路径。
选择连接后,Image下拉菜单将显示当前安装的所有Docker镜像。选择您想要用于构建/调试项目的docker镜像。此处设置的偏好将自动显示在项目设置向导中。您可以选择在项目设置向导中修改单个项目的容器设置。
要创建项目,请从主菜单打开新建项目向导:文件 > 新建... > CUDA C/C++ 项目
指定项目名称和项目文件位置。并从工具链列表中选择CUDA工具链。
-
在项目设置向导的最后一页,将显示容器选项。此处会展示偏好设置页面中的默认容器配置。您可以选择在此容器设置页面中修改本项目的相关设置。
完成项目设置向导。项目将被创建并显示在项目资源管理器视图中。
项目源代码目录将自动挂载到docker容器中。
如果需要挂载包含头文件/库文件等其他目录到docker容器中,可以通过项目属性页面挂载这些目录。
-
右键点击项目并选择属性。进入 C/C++ 构建 > 设置 > 容器设置选项卡。可通过此属性页挂载其他目录。
点击主工具栏上的锤子按钮构建项目。项目现在会在选定的Docker容器中构建,可执行文件将可在主机上使用。
2.11. 在Docker容器内使用CUDA GDB进行远程调试
通过Nsight Eclipse,您可以使用运行在主机上Docker容器内的CUDA GDB远程调试目标设备上运行的应用程序。主机上必须已安装包含CUDA GDB和CUDA工具包的Docker镜像。远程机器必须可通过SSH访问,且目标机器上必须安装CUDA工具包。
注意
如果主机和目标之间存在防火墙,必须将其设置为允许RSP消息通过,或者必须使用SSH端口转发。
从主菜单中,转到运行>调试配置...菜单项。
在CUDA GDB容器启动器下创建一个新的调试配置,可以通过双击或使用右键菜单完成。
-
在“远程”选项卡中配置远程连接详细信息。如果要创建新的远程连接,请点击远程连接中的管理按钮,输入主机名(或IP地址)以及用户名。选择SSH作为系统类型。同时选择目标机器上的CUDA工具包位置,并选择可执行文件的上传位置。
在“本地”选项卡中选择要上传到目标设备的项目和可执行文件。
-
在“容器”选项卡中,选择包含CUDA GDB的Docker镜像及对应连接。您还可以选择需要挂载到Docker容器中的任意主机目录。
从“调试器”选项卡中选择调试器选项。确保在Docker容器内输入CUDA GDB可执行文件路径。并在“环境”选项卡中添加所需的环境变量。
点击应用按钮保存更改,然后点击调试按钮开始调试会话。此操作会将本地可执行文件上传到目标系统,并在目标上启动CUDA GDB服务器。同时将在主机上启动Docker容器,运行在docker容器内的CUDA GDB将与目标建立远程调试会话。
首次运行调试器时,系统会提示您切换透视图。点击"是"。透视图是针对特定任务预设的窗口布局。
调试器将在应用程序的主例程处停止。您现在可以设置断点,或继续运行应用程序。
调试远程CUDA应用程序
2.12. 导入Nsight Eclipse项目
使用Nsight Eclipse Edition创建的项目可以通过Nsight Eclipse插件导入到Eclipse工作台中。
打开Nsight Eclipse版本并选择需要导出的项目。
-
右键点击Nsight Eclipse项目,选择 - 导出 > C/C++ > C/C++项目设置 > 下一步菜单。
选择要导出的项目和设置。
指定“导出到文件”的位置。
设置将存储在给定的XML文件中。
转到需要导入项目设置的Eclipse工作台。
从主菜单文件 > 新建 > CUDA C/C++ 项目创建CUDA C/C++项目
指定项目名称并选择带有CUDA工具链的空项目类型。
右键点击项目以导入源文件。选择 导入 > 常规 > 文件系统 > (从目录) 或从现有项目中复制源文件。
通过右键菜单导入项目设置,如包含路径和符号:导入 > C/C++ > C/C++ 项目设置 > 下一步...
-
选择项目设置文件的位置,并在下一个向导页面中选择项目和配置。
完成向导。项目设置将从Nsight Eclipse Edition导出的文件中导入。
点击主工具栏上的锤子按钮来构建项目。
2.13. 在Eclipse中启用深色主题
为了在黑暗环境中舒适工作,Eclipse提供了易于启用的深色主题模式:
-
打开Eclipse首选项:
点击顶部菜单中的“Windows”。
从下拉菜单中选择“偏好设置”。
-
访问外观设置:
在偏好设置窗口中,左侧选择"通用"。
点击“外观”。
-
选择深色主题:
找到“主题”下拉菜单。
选择您偏好的深色主题选项。
-
应用并享受:
点击“应用并关闭”以保存设置。
见证Eclipse在新暗黑主题下的华丽蜕变。
享受编程乐趣,减轻眼睛疲劳,焕然一新的视觉体验!
2.14. 更多信息
有关Eclipse CDT功能及其他主题的更多信息,请参阅帮助内容。要访问帮助内容,请从Nsight主菜单中选择帮助->帮助目录。
有关CUDA、CUDA工具包及其他工具的更多信息,请访问CUDA官网页面:http://developer.nvidia.com/cuda
3. 已知问题
必须存在可执行文件才能首次启动调试会话
首次为指定项目启动调试会话时,Nsight不会自动执行构建操作。必须手动触发构建。在后续启动调试会话时,Nsight将自动重新构建可执行文件。
注意
要手动构建项目,请在项目资源管理器视图中选择该项目(或项目中的任何文件),然后点击主窗口工具栏上的锤子图标。
对于新创建项目中的文件,源代码编辑器可能会在有效代码上显示错误标记。
这些标记将在Nsight索引包含的头文件后被清除。
Mac OS X用户在首次运行Nsight Eclipse Edition时可能会被提示安装Java运行时环境(JRE)。
Nsight Eclipse插件版需要本地系统安装可运行的Java运行时环境才能使用。
Nsight Eclipse插件版不支持使用QNX的qcc和q++编译器进行编译。
使用qcc和q++进行编译的变通方法是
-
在项目属性对话框的工具包配置页面中,在CCBIN字段指定q++路径,如下图所示。您可以通过点击主菜单 项目 > 属性 > C/C++构建 > CUDA Toolkit 来访问工具包配置页面。
-
在文件 ${QNX_HOST}/etc/qcc/gcc/5.4.0/default 中将默认 CONF 修改为 gcc_ntoaarch64le,如下所示
CONF=gcc_ntoaarch64le
4. 附加许可义务
有关许可的更多详情,请访问NVIDIA SDK许可协议补充条款的CUDA工具包页面:https://developer.nvidia.com/cuda-downloads
5. 通知
5.1. 注意事项
本文档仅供信息参考之用,不应视为对产品功能、状态或质量的保证。NVIDIA公司(“NVIDIA”)对本文件所含信息的准确性或完整性不作任何明示或暗示的陈述或保证,并对其中可能存在的错误不承担任何责任。NVIDIA对于因使用此类信息而产生的后果、或因使用该信息导致的第三方专利或其他权利侵权概不负责。本文件不构成对开发、发布或交付任何材料(定义见下文)、代码或功能的承诺。
NVIDIA保留随时对本文件进行更正、修改、增强、改进以及任何其他变更的权利,恕不另行通知。
客户在下单前应获取最新的相关信息,并确认这些信息是最新且完整的。
除非NVIDIA与客户授权代表签署的单独销售协议中另有约定,否则NVIDIA产品的销售均以订单确认时提供的NVIDIA标准销售条款和条件为准(以下简称"销售条款")。NVIDIA特此明确反对将任何客户通用条款适用于本文件所述NVIDIA产品的采购。本文件不直接或间接构成任何合同义务。
NVIDIA产品并非设计、授权或保证适用于医疗、军事、航空、航天或生命支持设备,也不适用于那些可以合理预期NVIDIA产品故障或失灵会导致人身伤害、死亡、财产或环境损害的应用场景。NVIDIA对于在此类设备或应用中使用和/或包含NVIDIA产品不承担任何责任,因此客户需自行承担相关风险。
NVIDIA不声明或保证基于本文档的产品适用于任何特定用途。NVIDIA未必会对每个产品的所有参数进行测试。客户应全权负责评估和确定本文档所含信息的适用性,确保产品适合并满足客户计划的应用需求,并执行必要的应用测试以避免应用或产品出现故障。客户产品设计中的缺陷可能会影响NVIDIA产品的质量和可靠性,并可能导致超出本文档范围的其他或不同的条件和/或要求。对于任何因以下原因导致的故障、损坏、成本或问题,NVIDIA不承担任何责任:(i) 以违反本文档的任何方式使用NVIDIA产品或(ii) 客户产品设计。
本文档不授予任何NVIDIA专利权、版权或其他NVIDIA知识产权的明示或暗示许可。NVIDIA发布的关于第三方产品或服务的信息,不构成NVIDIA对这些产品或服务的使用许可或担保认可。使用此类信息可能需要获得第三方基于其专利或其他知识产权的许可,或需要获得NVIDIA基于其专利或其他知识产权的许可。
本文件中的信息仅可在获得NVIDIA事先书面批准、未经改动完整复制且完全符合所有适用的出口法律法规,并附带所有相关条件、限制和声明的情况下进行复制。
本文件及所有NVIDIA设计规格、参考板、文件、图纸、诊断工具、清单和其他文档(统称及单独称为"材料")均以"现状"提供。NVIDIA不对材料作出任何明示或默示的保证,包括但不限于对不侵权、适销性和特定用途适用性的默示保证免责。在法律允许的最大范围内,NVIDIA不就因使用本文件导致的任何损害承担责任,包括但不限于任何直接、间接、特殊、附带、惩罚性或后果性损害,无论损害成因如何,也无论责任理论为何,即使NVIDIA已被告知发生此类损害的可能性。不论客户因任何原因可能遭受的任何损害,NVIDIA对客户就本文所述产品的全部及累计责任应受产品销售条款的限制。
5.2. OpenCL
OpenCL是苹果公司的商标,经Khronos Group Inc.授权使用。
5.3. 商标
NVIDIA和NVIDIA标识是美国及其他国家NVIDIA公司的商标或注册商标。其他公司及产品名称可能是其各自关联公司的商标。