获取特定进程正在运行的处理器数
Get number of processors a particular process is running on
我有一个与进程关联的进程ID。我使用CreateProcess()
函数创建了这个进程。在运行过程中,我想跟踪它在多少处理器上运行,以及这个可执行文件在多核机器上使用了多少时间。
我想写同样的C++代码;有人能帮我吗?
我使用的是WinXP多核计算机。
GetProcessAffinityMask
:
检索指定进程的进程关联掩码和系统的系统关联掩码。
GetProcessTimes
:
检索指定进程的计时信息。
您可以使用Windows事件跟踪(ETW)和CSwitch事件(在每个上下文开关上发出)在Vista或更高版本上捕获此级别的详细信息。
各种工具(如Windows性能工具包)捕获并可视化这些数据。
但是,这在Windows XP上不受支持。
如果你只想知道你的典型并发是什么(即在给定的时间有多少线程在运行),你可以定期对perfmon线程数据进行采样(从HKEY_PERFORMANCE_data)。"线程状态"计数器将为您提供进程中每个线程的即时状态(即每个线程是否正在运行)。显然,这个采样过程将最大并发限制为(处理器数-1)。
但你真的需要这么多细节吗?GetProcessTimes通常就足够了。
更新
您可以在测试机器上运行应用程序,并使用perfmon简单地测量每个CPU的利用率。您还应该测量每个进程的CPU利用率,以确保没有其他进程意外运行。
若要捕获报表的数据,请以管理员身份运行perfmon。
- 导航到右侧的"性能监视器"以显示实时性能图表。选择要监视的对象/计数器(即所有处理器和进程的"%处理器时间")。Perfmon应该开始实时捕获数据
- 右键单击图形并选择捕获频率(例如,如果您的应用程序运行数小时,您可能不希望每秒都有数据)
- 右键单击右侧树中的"性能监视器"节点,然后选择"新建| Data Collector集"。输入它的名称,然后单击其他默认值
- 导航到右侧的Data Collector Set(位于"Data Collector Sets|User Defined"下)。您可以使用工具栏按钮(或右键单击)启动和停止数据采集
- 现在,您已经将一些数据返回到性能监视器图形,并选择"查看日志数据"(第二个工具栏按钮)。从"源"选项卡中选择日志文件。这将显示捕获数据的图形
- 右键单击图形并选择"将数据另存为…"您可以选择CSV或TSV
就是这样。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 不同/较旧的处理器运行c++代码的方式是否不同
- 用于在运行时选择变量的 C++ 预处理器指令
- 如何仅在本地标头上运行预处理器
- 在32位和64位处理器上运行混合的mpi可执行文件
- 如何在运行时取消定义和定义预处理器值
- 基于使用 make 命令或生成文件运行预处理器
- 如何在许多处理器上运行 boost::threads
- 多处理器加速::线程?所有线程都在一个处理器上运行
- 获取特定进程正在运行的处理器数
- 设置处理器与将在 Linux 上运行的C++的相关性
- Qt5应用程序立即崩溃,除非运行与图形处理器
- 如何使用文件系统直接在处理器中运行代码?
- 在 ARM 处理器上运行 pcl::MovingMinimumSquares 代码时出现双释放或损坏运行时错误
- 在四核处理器上运行 MPICH 时出错
- VS2015的多处理器编译在运行cl时会产生"not enough quota is available to process this command".exe