问题标签 [intel-inspector]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Intel Inspector 在我的自旋锁实现中报告了数据竞争
我使用 Windows 中的 Interlocked 函数制作了一个非常简单的自旋锁,并在双核 CPU(增加变量的两个线程)上对其进行了测试;
该程序似乎工作正常(每次都给出相同的结果,但不使用同步时情况并非如此),但英特尔 Parallel Inspector表示在值 += j处存在竞争条件(请参见下面的代码)。使用关键部分而不是我的 SpinLock 时,警告会消失。
我的 SpinLock 实现是否正确?这真的很奇怪,因为所有使用的操作都是原子的并且具有适当的内存屏障并且它不应该导致竞争条件。
测试程序:
c++ - 英特尔 Inspector XE 2012 警告 #12367 - 对传递给 vector::erase() 的迭代器参数进行切片
我收到警告#12367 when running Build | Build Solution for Intel Static Analysis
,但我的代码看不到问题。任何人的想法?
警告 #12367:由于隐式类型转换,在调用“std::_Vector_iterator > > std::vector >::erase(std::_Vector_const_iterator > >)”中对作为实际参数 2 传递的对象进行切片
c++ - Intel Inspector 报告 std::mutex 内存泄漏
即使是最简单的 std::mutex 示例,英特尔 Inspector 也会报告内部内存泄漏:
Intel Inspector XE 2013 报告如下:
我在这里做错了什么,或者这些已知的内核内部内存泄漏是我无法控制的?
使用英特尔 C++ 编译器使用多线程调试 /MTd 标志编译示例,在 Windows 7 上运行 Visual Studio 2012 Update 3,并使用所有最新更新。
std::lock_guard
还泄漏内存:
英特尔 Inspector XE 2013std::lock_guard
报告:
c++ - 英特尔 Inspector 检查 dll
我想使用 Intel Inspector 分析 DLL。此 DLL 用于插件应用程序。它转到一个扩展文件夹,是从另一个应用程序 mainApp.exe 运行的。
但是,在 Intel Inspector 中,当我从 UI 创建一个新项目时,打开的选项卡需要对应用程序进行分析,并且只接受扩展名为 .exe 的文件。
我无法在 .exe 文件中编译源代码。这是因为我没有主。我必须启动另外两个 .exe 来运行 DLL:mainApp.exe,然后是 SDKapp.ex,我从 mainApp 的菜单栏中运行它。我尝试编译,具体来说,我得到了 LNK 2019 错误,它不会消失将子系统更改为控制台。
那么,我应该继续使用其他分析器,例如 AQTime,还是有办法从 Intel Inspector 分析我的 DLL。
c++11 - Intel Inspector 在 atomic_store 和 atomic_load 中报告 shared_ptr 的数据竞争
我正在使用 Visual Studio 2015 Preview 构建下面的代码(但我在 Visual Studio 2013 上遇到过类似的问题,因此它不是特定于 2015 年),然后在 Intel Inspector XE 2013 Update 9(内部版本 328075)下运行该程序. Intel Inspector 在代码中报告了几个数据竞争,围绕对 shared_ptr 及其原子内容的访问。众所周知,Intel Inspector 会报告误报竞赛,我只是想确认确实如此,并了解这是否是 Inspector 或 Microsoft STL 实施中的问题......
这是代码,有 2 个线程,它们同时原子地修改指向原子 int 的 shared_ptr,其中一个线程还打印点(因此您可以观察控制台上打印的活动):
这是报告的数据竞赛之一,摘录:
我想英特尔 Inspector 不会将 shared_ptr 内部自旋锁识别为同步机制......
问题:
- 根据标准,上面的示例代码是否无数据竞争?
如果是这样,atomic_store/atomic_load 的 MS STL 实现是否符合标准?它完全忽略了内存顺序参数并且似乎使用了全局自旋锁,这是否意味着它始终强制执行内存操作的顺序一致性并作为编译器屏障工作(即使我通过 memory_order 放松)?
/li>这是微软实施的问题,英特尔 Inspector 无法识别自旋锁,还是英特尔 Inspector 的问题?我想找到一些解决方法,我怀疑 Inspector 在我们的代码中报告的许多其他数据竞争可能是误报,因为它们在我们使用 atomic_load 和 atomic_store 的地方附近。我知道atomic_load 和 atomic_store 将来可能会被弃用,但我想在那之前以某种方式解决那些误报......
c++ - Intel Inspector 找不到调试符号 Visual C++ MFC
我刚刚开始在我的 Visual C++ MFC 项目中尝试使用 Intel Inspector 软件进行内存分析。分析运行良好,该工具发现了一些错误。但是,我无法导航到问题源文件和代码行,因为 Intel Inspector 说“未找到符号信息”。
此外,它还给出了建议:“在项目属性对话框搜索选项卡中指定位置,然后重新解析结果”。
我已经导航到 Intel Inspector Project Properties 对话框并显式添加了 Debug 目录(当创建了构建的 .exe 和 .pdb 文件时)并尝试重新分析应用程序,但这没有任何区别。我错过了哪一部分,为什么找不到任何符号?
我正在运行 VS2010(尝试将 Intel Inspector 作为 VS2010 插件以及具有相同结果的独立版本运行),x64 调试构建配置,在 Properties->Linker->Debugging 中将调试数据设置为“是”。
c++ - 为什么 SHGetFolderPath() 会出现内存泄漏?(C++)
我正在运行 Intel Inspector 以查找应用程序中的内存泄漏。现在,情况是这样的:假设有一个名为 MyGetPath() 的函数执行以下操作:
当我运行 Intel Inspector 时,它会报告 40 个字节的泄漏,并且分配站点是 SHGetFolderPath 行。但是为什么会出现泄漏,以及如何避免呢?
c++ - MKL dgemv - 动态分配数组的内存访问无效
我用这个简单的代码做了一个 blas 矩阵/向量产品:
虽然显示的结果符合预期 ([18, 23]),但英特尔 Inspector在调用 dgemv 时发现 1 个无效内存访问和 2 个无效部分内存访问。无效的内存访问和一次无效的部分内存访问与向量b对应分配的内存有关。第二个无效的部分内存访问与分配给 A 的内存有关。如果我使用静态数组,我不会收到任何错误。
其他 MKL 函数也会发生这种情况,例如 dgesv 或当我尝试使用 cblas_dgemv 时。我使用 Intel Inspector XE 2016 和带有 MKL 顺序的 Intel C++ Compiler 16.0。
我的 dgemv 调用是错误的,还是误报。有人经历过吗?
谢谢
编辑:
正如 Josh Milthorpe 所建议的那样:该错误仅出现在小型数组上,可能是因为 MKL 试图以大块的形式访问内存以提高效率。
我做了几次测试,M 至少需要 20 才不会出错。N 可以是任何正数。我想这不是一个错误,MKL 只是访问为矩阵分配的空间之外的内存,但不会改变或真正使用它。
c++ - c++ Intel 检查器显示许多错误与提升 - 我需要担心吗?
我当前的程序有问题。由于某种原因,它总是在 Windows 上的最后一行代码之后崩溃。我收到“应用程序不再响应”错误或类似情况。所以我尝试了英特尔检查员。幸运的是,它在我的项目中告诉了我一些错误,我访问了一些未初始化的内存。
除了我理解的这个明显的问题之外,我还得到了一些:
- 不正确的 memcpy 调用:
boost::algorithm::trim()
- 未初始化的部分内存访问:
myptree.get<boost::posix_time::ptime>("path.to.node")
wheremyptree
is of typeboost::property_tree::ptree
- 未初始化的内存访问 in:
cout << myptime
wheremyptime
is of typeboost::posix_time::ptime
...
这是否意味着我没有正确使用 boost 库函数?或者这是误报?
我只是感到困惑,因为这些功能可以正常工作,它们会按照我的意愿去做,而且我没有收到任何错误消息。
最后我还收到了一个内存未释放的警告(来自 [Unknown] 来源)。
修剪示例:
给我一个不正确的 memcpy 调用...