工具与软件:
您好!
我运行的是没有操作系统的 am64x 演示板。
是否有方法或示例可测量 CPU 运行周期?
CPU 的运行速度。
谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
您好!
我运行的是没有操作系统的 am64x 演示板。
是否有方法或示例可测量 CPU 运行周期?
CPU 的运行速度。
谢谢
不、我只是想知道 CPU 的运行速度。
Bootloader_socCpuGetClock (corid);并且其频率为800MHz。 CPU 以800MHz 运行
然后、我自己进行测量。
StartTime = ClockP_getTimeUsec ();
int jjj=0;
for (jjj=0;jjj<1000000;jjj++);
EndTime = ClockP_getTimeUsec ();
结束时间-开始时间为 13814
13814 /1000000 (循环计数)= 13纳秒、对于一个虚拟指令、这不正确? 太慢了。
它应该有最多2纳秒的时间来运行一个虚拟增量 jj++ instrunion 在800MHz 系统上,对吗?
您好!
该循环是多条指令。 至少这必须使一个寄存器递增、然后将其与1000000进行比较、如果小于该值、则返回。
如果您使用的是版本编译、编译器将消除该循环。 在调试编译(没有优化)中、在每个循环中、可能会从内存中读取和写入 jj。
由于处理器需要加载的值之后才能递减和比较、因此还可能存在负载使用危险。
接下来、您应该考虑代码和数据所在的位置以及访问延迟是什么。 TCM 和 L1缓存为单周期、 SRAM 将为数十个周期、DDR 将超过100个周期。
假设这会在 L1缓存中全部运行、你可以查看反汇编来看看指令构成你的循环、然后检查 ARM Cortex-R5文档中的指令周期时序、然后查看这是否与每个周期1.25ns 相匹配。 要进行反汇编、请使用 CCS 汇编视图或 objdump。
为了使你的生活更加复杂、如果指令适用、R5甚至可以在单周期中执行两条指令。
->可能是一个有趣的练习,但可能不值得努力。
此致、
Dominic
您好、 Swargam Anil
是的、我正在查看指令工作原理。