gpt4 book ai didi

c++ - 如何实现综合基准?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:54:35 24 4
gpt4 key购买 nike

我正在用 C++ 和汇编代码编写我的第一个程序。我已经知道如何用 C++ 编程,但是当我尝试用汇编代码编程时,我遇到了很多问题。我想做一个综合基准测试,它

"is designed to mimic a particular type of workload on a component or system. Synthetic benchmarks do this by specially created programs that impose the workload on the component." (Wikipedia)

例如,如果我想计算 <strong>long</strong> fact = pow(3.0, 2000) 的阶乘,如何衡量 C++ 中组件的性能? (而不是整个系统的性能)。

其余代码(事实的计算)是用汇编代码完成的。

最佳答案

以下是我使用汇编代码的基准测试之一(针对 Linux)的一部分,可以在其中执行重复计算而不必担心过度优化。您需要使用具有足够长的基于程序集的循环的高分辨率计时器,以获得合理的执行时间。您可能希望在循环中重复计算以填充管道。

这个重复 20M 加 10 次以找到最大速度。最后检查 IntCount1 值作为简单的完整性检查

  C Code

intCount1 = 0;
max = 0;
for (i=0; i<10; i++)
{
count = intCount1;
start_time();
_mips1Reg();
end_time();
count = intCount1 - count;
mips = (int)((double)count / 1000000.0 / secs + 0.5);
if(mips > max) max = mips;
}
mipsReg[0] = max;
printf(" 1 Register %7d 32 Bit Integer MIPS\n", mipsReg[0]);

########################################################

Hi-Res Timer Used

clock_gettime(CLOCK_REALTIME, &tp1);
theseSecs = tp1.tv_sec + tp1.tv_nsec / 1e9;

########################################################

Assembly Code

global _mips1Reg
_mips1Reg:
push eax
push ebx
push ecx
push edx
push edi
mov edi, 1000000
mov eax, [intCount1]
align 8
dlp:add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 1
add eax, 3
dec edi
jnz dlp
mov [intCount1], eax
pop edi
pop edx
pop ecx
pop ebx
pop eax
ret

关于c++ - 如何实现综合基准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935675/

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