Nsight Eclipse的使用方法

1.      打开night eclipse: 命令行输入night,会提示你选择工作目录,自己选即可。

2.      在界面上方菜单栏:File -> New –> cuda C/C++ project:


可以选择新建空项目,标准运行时项目,还可以从样例程序中导入,以及新建C++的Thrust项目:


其余都是按照默认跳过即可。

3.      完成后在左侧Project栏里,添加新文件。


4.      写完代码以后,右击工程名–> build Project ,生成makefile<Debug 目录下>以及bin<Binaries目录下>文件,如果有错误,会在底部,Problems里面报出,同样在写程序的时候,会跟SQL似得会自动给你检测的,写错了可以随改正。


5.      然后右击工程名 -> Run As local c/c++ application,运行程序,结果会在下面打印


6.      Nsight可以直接用profiler查看函数的时间轴:


右击bin文件,选择profile as local C/C++ Application,就可以在新标签页中看profile的结果了。

其中:


runtime API一栏的时间轴,表示的是CPU端调用Cuda的runtime函数的时间,当然不包括kernel的时间。<其中有launch kernel的时间>。

同理,Driver API时间轴表示的是CPU调用cuda驱动函数的时间。

MemcpyHtoD MemcpyDtoH两行时间轴表示的是整个程序中,每次数据拷贝的时间,在下边属性栏里,可以看到调用的次数和时间值。

下面的compute栏,里面的函数是内核函数,前面的百分比表示的是各个内核函数在GPU上运算时占据的时间比重,谁的百分比大,表明谁计算的时间更长。

最下面的stream一栏,就是memcpy, memset以及内核函数在整个程序执行的过程中占据的时间。次序表面调用顺序。

各个关系是这样的<绝对个人理解,仅供参考,切勿当真>runtime driver API那两栏,其实类似于在程序语句中加入clock_t函数测试得到的时间,<clock函数表示的是:“这个函数返回从开启这个程序进程程序中调用clock()函数时之间的CPU时钟计时单元(clock tick)数”>,因为在程序中kernel函数是属于瞬间返回<according to you guys>的,用clock是测不出时间的,但是是个函数总归要有执行过程,就是有执行时间的,这时候就看底下compute那一栏,这是在GPU上函数执行时间,这个时间时间上测试加速比的时候并未用到<”瞬间返回”>,但是通过stream一栏的时间轴,我们可以看出哪个函数在GPU上占据的时间更长,也就是说能看到程序的时间更多的耽误在了哪里。这个地方我个人理解的是,通过看runtime driver API底下的这些时间轴,可以看到的是在GPU上各个函数的时间状况,而我们测试加速比的时候是用的runtime, driverAPI上类似的时间,所以看底下的时间轴更多的是一个参考吧,给编程人员一个参考看看内核有没有改进处,看看流的执行成没成功。等等等等,这只是我个人理解,因为这一块一直不是很清楚,我就一直这么理解的。。。。。。

7.    关于Debug,windows下面不同的是,linux下的nsight不仅可以在GPU代码加断点,也可以在CPU代码加断点,加断点方法与VS中差不多,双击左边那个边框,点击上面工具栏的甲虫图标:


F6单步跳过,F5单步跳入。


这边可以看变量的值。这一部分我了解的不多,单步跳到有关cudaruntime函数时会报出:所有cuda设备函数都不能被debug.

这部分暂搁置。

8.    导入已有工程: File -> new  ->makefile project with exsiting code. 

不过,早上说到的会报错问题,所以这个功能基本是不可用的。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android 中,如果希望在黑夜模式下不使用 `res/values-night` 目录下的资源(如颜色、样式、尺寸等),可以使用以下方法: 1. 在代码中动态设置 可以在代码中通过 `getResources().getConfiguration().uiMode` 获取当前的 UI 模式,并根据 UI 模式来判断是否使用 `res/values-night` 目录下的资源。如果是黑夜模式,则不使用 `res/values-night` 目录下的资源,而使用 `res/values` 目录下的资源。具体示例代码如下: ```java int nightModeFlags = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) { // 是黑夜模式,不使用 res/values-night 目录下的资源 int color = getResources().getColor(R.color.my_day_color); } else { // 是白天模式,使用 res/values 目录下的资源 int color = getResources().getColor(R.color.my_color); } ``` 2. 使用 AppCompat 库 如果应用使用了 AppCompat 库,可以通过 `getDelegate().getLocalNightMode()` 获取当前的夜间模式设置,并根据夜间模式设置来判断是否使用 `res/values-night` 目录下的资源。如果是黑夜模式,则不使用 `res/values-night` 目录下的资源,而使用 `res/values` 目录下的资源。具体示例代码如下: ```java int nightMode = AppCompatDelegate.getDefaultNightMode(); switch (nightMode) { case AppCompatDelegate.MODE_NIGHT_YES: // 是黑夜模式,不使用 res/values-night 目录下的资源 int color = ContextCompat.getColor(this, R.color.my_day_color); break; case AppCompatDelegate.MODE_NIGHT_NO: case AppCompatDelegate.MODE_NIGHT_UNSPECIFIED: // 是白天模式,使用 res/values 目录下的资源 int color = ContextCompat.getColor(this, R.color.my_color); break; } ``` 以上两种方法都可以实现在黑夜模式下不使用 `res/values-night` 目录下的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值