gpt4 book ai didi

c - 测量上下文切换时间 C (Windows)

转载 作者:可可西里 更新时间:2023-11-01 11:22:14 25 4
gpt4 key购买 nike

我需要实现一种方法来测量 Windows 中线程间上下文切换的时间和 CPU 周期。

这是我的代码

#include <stdio.h>
#include <windows.h>
#include <time.h>

LARGE_INTEGER initialTimeStamp, finalTimeStamp, freq;

DWORD ThreadProc(LPVOID lpdwThreadParam)
{
SwitchToThread();
return 0;
}

int main()
{
int result;
HANDLE hThread;
QueryPerformanceFrequency(&freq);
hThread = CreateThread(NULL,0, (LPTHREAD_START_ROUTINE)ThreadProc,NULL, 0, 0);

QueryPerformanceCounter(&initialTimeStamp);
SwitchToThread();
QueryPerformanceCounter(&finalTimeStamp);

result = (1000000 * ((finalTimeStamp.QuadPart - initialTimeStamp.QuadPart) / 2 ) / freq.QuadPart);
printf("Windows Thread - context switch time is %u ns\n", result);

WaitForSingleObject(hThread, INFINITE);
return 0;
}

注意:除以二,是因为我在 initialTimeStamp 和 finalTimeStamp 之间有两个上下文切换。

我不知道这是最好的还是正确的方法...我每次执行的时间都不一样,这不是我所期望的。我不确定如何获得 CPU 周期数。

最佳答案

您实际上必须有一个消耗 CPU 周期的线程才能让 SwitchToThread() 真正进行上下文切换。如果您的 CPU 有多个内核,则不止一个。即便如此,您得到的结果在很大程度上也毫无意义。开销量变化很大,具体取决于拥有获取量程的线程的进程和 TLB 缓存的状态。重新加载 TLB 寄存器和缓存未命中会增加很多时间。抛出的通常数量在 2,000 到 10,000 个周期之间。

关于c - 测量上下文切换时间 C (Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3804631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com