gpt4 book ai didi

从 QueryPerformanceCounter() 计算周期/字节

转载 作者:太空宇宙 更新时间:2023-11-04 01:53:55 27 4
gpt4 key购买 nike

我已经对这里找到的 PRIMATEs 密码做了一些切片实现:http://primates.ae/ (我用的是 120 位版本)。

我只用 C 语言制作并使用了 Intel Intrinsics,这样我就可以使用 AVX2 指令集。

自从我做了一个有点切片的实现,我想优化它的速度,从而衡量性能,我计算每个字节的周期。为此,我使用 Windows 提供的 QueryPerformanceCounter() 函数

事情是现在。在我的计算中,我得出每个字节使用 1.91 个周期,这看起来reeeaaally 不错。我觉得我一定做错了什么(我不是一个很好的编码员)。我是这样做的:

//Size of testdata
int testDataSize = 4000; //bytes

//Get CPU frequency (cycles per sec)
LARGE_INTEGER start, finish;
double cpu_frequency;
QueryPerformanceFrequency(&start);
cpu_frequency = (double)(start.QuadPart)

QueryPerformanceCounter(&start);
encrypt(data);
decrypt(data);
QueryPerformanceCounter(&finish);

double cyclesUsed = (double)(finish.QuadPart - start.QuadPart);
double bytesSecond = (cpu_frequency / cyclesUsed) * testDataSize;
double bytesCycle = bytesSecond / cpu_frequency;
double cycles_per_byte = 1 / bytesCycle;

在运行时,两次 QueryPerformanceCounter 调用之间花费的周期(即加密和解密的时间)是开始完成之间的差值,大约为 7674 个周期。这是4000字节的时间。

自然地,我每个字节只使用大约 1.9 个周期,但这看起来真的很好......我是否正确实现了周期/字节计算并且我是否正确理解了 QueryPerformanceCounter() 的使用?或者我现在正在计算一些随机数。

此外,万一有人知道:这通常是使用现代密码加密/解密数据的现实值(value)吗?我知道这在该领域是主观的并且很难回答,但值得一试......无论哪种情况,我现在最想知道的是我是否正确实现它,因为我可以看到我的测试 vector 通过有了这些结果。

我在关闭 Intel TurboBoost 且只有 1 个 CPU 内核的情况下进行测试......我无法关闭超线程(感谢简化的 Lenovo BIOS),但我怀疑它会有所不同,因为我的代码是单线程的.

最佳答案

您的代码是正确的,但您误解了数据。 QueryPerformanceFrequency() 不会为您提供 CPU 频率,而是为您提供性能计数器频率。这意味着您是根据任意滴答而不是周期来计算的。使用 Windows 性能计数器(CPU 频率通常是动态的)没有简单的方法来获取循环计数,但您可以获得不错的执行时间。

关于从 QueryPerformanceCounter() 计算周期/字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38013877/

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