使用Nsight来确定银行冲突和合并
Using Nsight to determine bank conflicts and coalescing
如何使用并行nsight知道非联合读/写和库冲突的数量
此外,当我使用nsight是探查器时,我应该看什么?哪些重要字段可能会导致我的程序速度减慢?
我不使用NSight,但您将使用探查器查看的典型字段基本上是:
- 内存消耗
- 在函数中花费的时间
更具体地说,使用CUDA,您将小心GPU的占用率
其他有趣的值是编译器设置本地变量的方式:在寄存器或本地内存中。
最后,您将检查在GPU之间来回传输数据所花费的时间,并将其与计算时间进行比较。
对于银行冲突,您需要监视warp serialization
。请参见此处。
这里有一个关于监控记忆融合的讨论<——基本上,您只需要观看Global Memory Loads/Stores - Coalesced/Uncoalesced
并标记Uncoalesced
。
M。Tibbits基本上回答了您需要了解的关于银行冲突和非合并内存事务的信息。
对于可能导致我的程序速度减慢的重要字段/内容(使用Nsight探查器时(的问题:
- 使用"应用程序"或"系统跟踪"来确定是CPU绑定、内存绑定还是内核绑定。这可以通过查看时间轴来完成
a。CPU绑定–您将看到没有内核或内存复制发生的大区域,但您的应用程序线程(线程状态(为绿色
b。内存绑定–内核执行在设备之间的内存传输中被阻止。您可以通过查看内存行来看到这一点。如果您在内存复制上花费了大量时间,那么您应该考虑使用CUDA流来传输应用程序。这可以使内存传输和内核重叠。在更改代码之前,您应该比较传输和内核的持续时间,并确保您将获得性能提升。
c。内核绑定–如果应用程序的大部分时间都花在等待内核完成上,那么您应该切换到"配置文件"活动,重新运行应用程序,并开始收集硬件计数器,看看如何加快内核的实际执行时间。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 使用C++程序合并排序没有得到正确的输出
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 链表中写入访问冲突的未知原因
- 用于合并排序的合并函数
- 在声明中合并两个常量"std::set"(不是在运行时)
- C++中的openCV Mat访问冲突
- 如何将一个数组值合并为一个整数c++
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 将向量的 N 段合并到位C++
- 在C++中合并两个库
- C++尝试深度复制唯一指针时出现内存访问冲突
- 错误:使用通用引用的声明冲突
- 以迭代方式合并标准::unordered_map
- 删除/最小化GIT合并冲突
- 使用Nsight来确定银行冲突和合并