并行诊断工具(并发运行时)
更新:2010 年 6 月
Microsoft Visual Studio 2010 为调试和分析多线程应用程序提供了广泛的支持。
调试
Visual Studio 调试器中添加了新的**“并行堆栈”窗口和“并行任务”**窗口。 有关更多信息,请参见演练:调试并行应用程序。
分析
Visual Studio Team Developer Edition 分析工具 提供三种数据视图,用于显示有关多线程应用程序如何与自身和其他程序交互的图形、表格和数字信息。 利用这些视图,可以快速标识关注区域,并从图形显示上的点导航到调用堆栈、调用站点和源代码。 有关更多信息,请参见并发可视化工具。
事件跟踪
在发生各种事件时,并发运行时会使用 Windows 事件跟踪 (ETW) 来通知检测工具(如探查器)。 这些事件包括在激活或禁用计划程序时,在上下文开始、结束、停滞、恢复运行或让步时以及在并行算法开始或结束时。
并发可视化工具等工具利用了此功能;因此,您通常不必直接处理这些事件。 但是,如果您开发自定义探查器或使用事件跟踪工具(如 Xperf),则这些事件很有用。
并发运行时仅在启用跟踪功能时才引发这些事件。 调用 Concurrency::EnableTracing 函数可启用事件跟踪,调用 Concurrency::DisableTracing 函数可禁用跟踪。
下表介绍了在启用事件跟踪时运行时引发的事件。
事件 |
说明 |
值 |
---|---|---|
并发运行时的 ETW 提供程序标识符。 |
f7b697a3-4db5-4d3b-be71-c4d284e6592f |
|
标记与上下文相关的事件。 |
5727a00f-50be-4519-8256-f7699871fecb |
|
标记调用 Concurrency::parallel_for 算法的入口和出口。 |
31c8da6b-6165-4042-8b92-949e315f4d84 |
|
标记调用 Concurrency::parallel_for_each 算法的入口和出口。 |
5cb7d785-9d66-465d-bae1-4611061b5434 |
|
标记调用 Concurrency::parallel_invoke 算法的入口和出口。 |
d1b5b133-ec3d-49f4-98a3-464d1a9e4682 |
|
标记与任务计划程序相关的事件。 |
e2091f8a-1e0a-4731-84a2-0dd57c8a5261 |
|
标记与虚拟处理器相关的事件。 |
2f27805f-1676-4ecc-96fa-7eb09d44302f |
并发运行时定义但目前不引发以下事件。 运行时保留了这些事件以便将来使用:
Concurrency::ConcRT_EventType 枚举指定事件跟踪的可能操作。 例如,在 parallel_for 算法的入口,运行时会引发 PPLParallelForEventGuid 事件并提供 CONCRT_EVENT_START 作为操作。 在 parallel_for 算法返回以前,运行时会再次引发 PPLParallelForEventGuid 事件并提供 CONCRT_EVENT_END 作为操作。
以下示例说明如何为针对 parallel_for 的调用启用跟踪。 运行时不跟踪对 parallel_for 的第一次调用,因为它没有启用跟踪。 调用 EnableTracing 可使运行时跟踪对 parallel_for 的第二次调用。
// etw.cpp
// compile with: /EHsc
#include <ppl.h>
using namespace Concurrency;
int wmain()
{
// Perform some parallel work.
// Event tracing is disabled at this point.
parallel_for(0, 10000, [](int i) {
// TODO: Perform work.
});
// Enable tracing for a second call to parallel_for.
EnableTracing();
parallel_for(0, 10000, [](int i) {
// TODO: Perform work.
});
DisableTracing();
}
运行时会跟踪您调用 EnableTracing 和 DisableTracing 的次数。 因此,如果您多次调用 EnableTracing,则必须调用 DisableTracing 相同的次数才能禁用跟踪。
请参见
概念
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2010 年 6 月 |
添加了有关事件跟踪的信息。 |
信息补充。 |