C语言 皮秒计时器是否可行?

axr492tv  于 2023-08-03  发布在  其他
关注(0)|答案(3)|浏览(112)

给予

我想做一个装置,根据电磁波从一个点(计算机\微控制器)到另一个点的时间来测量距离。我不考虑相移法。
我想要厘米精度(至少)。
为此,两台计算机的时钟周期分辨率均应至少为33.3 ps。
如果把时钟看作是一个计数器循环,每次只增加uint64_t变量,我需要这个循环每秒迭代300亿次,暂停时间为33.3 ps。

问题

this question中,回答问题的评论员和用户表示,CPU性能受到其大小的限制,因为信息的传播速度不能超过光速。有道理。
“我的想法"
然而,存在CPU每秒百万指令表。
让我们来考虑一下,英特尔酷睿i5- 11600 K:它具有6个内核和346 × 350 MIPS,主频为4.92 GHz。很明显,3450亿条指令是用于多线程程序的(或者甚至不是?),但是,每一个内核的速率应该是346/6 = 57 000 MIPS。
57 000 MIPS意味着每个内核每秒570亿条指令,周期约等于17 ps。
电磁波每17 ps通过5 mm。
Threadreaper的每个内核有36万亿条指令,这意味着8 um的波传播根本不在。
因此,按照这种逻辑,无论如何都不应该奏效。有什么诀窍吗?难道皮秒计时器还可能吗?

更新

如果您要使用多线程作为论据,请在我提供的上表中查看英特尔®酷睿™ 2至尊处理器X6800,它只有2个内核和27000 MIPS,即13 500 MIPS每核心,这仍然是相当快的,应该是不可能的(光将通过只有2. 3厘米)。

cl25kdpy

cl25kdpy1#

你参观过工厂吗?比如说一个汽车工厂。
它经历了许多不同的阶段。有些工人在给车身喷漆,然后晾干,然后其他一些工人装上车轮,其他一些工人装上座椅,等等。
一辆特斯拉(就用这个例子吧,因为数据是公开的)需要12周的时间来完成整个过程(从开始制造到工作车出厂需要12周)。
特斯拉每天生产1000辆汽车
如果说1/(12*7)=0.0119辆汽车每天行驶,那将是一个错误。如果一家工厂每天生产1000辆汽车,那么它在86.4秒内就能生产出来。
这不仅仅是因为线程或并行性。同样,在我的例子中,人们可以说“但是一家工厂每天不会生产1000辆汽车,特斯拉工厂不止一家”。其中,有6个。6、如果你愿意尽管如此,推断出制造特斯拉需要518秒(86.4×6)而不是12周是错误的。这也是因为过程本身:油漆车身的工人正在油漆第二辆车的车身,而另一个工人正在安装第一辆车的车轮。一辆车在整个链条中传播需要时间。86400/1000*6的计算只有在一个工人同时工作的情况下才有效(在汽车喷漆或干燥时,没有人照顾车轮)。
所以,不,你不能从每秒指令的数量推断出指令的长度。你不能再从工厂的生产速度(每天1000/6)推断出制造特斯拉所需的时间(12周)。
(我可以用很多其他的类比。例如,既然你提到了信号传播:你可能知道,当你打开电灯时,一个电子需要几个小时,才能从你刚刚关上的开关到达灯泡。然而,每秒有几万亿分之一的粒子通过了光团:D

dojqjjoe

dojqjjoe2#

正如其他人评论的那样,你不能期望任何CPU在33皮秒内完成一次循环迭代。
为了解决您的困惑:
57 000 MIPS意味着每个内核每秒570亿条指令,周期约等于17 ps。
57,000 MIPS * 并不 * 意味着CPU每秒可以退出57 e9条指令。MIPS基本上没有意义,因为它与VAX单元的性能相比。IOW,CPU每秒可以退出相当于57,000条VAX指令。
看钟更有用。在5GHz下,一个 * 单个 * 时钟周期需要200皮秒,实际上没有指令需要一个单个时钟周期-它们都需要多个(但由于流水线,您可以 * 退休 * 一个指令/周期)。

qni6mghb

qni6mghb3#

5GHz CPU的时钟周期为200 ps。一个内核能够在每个时钟周期运行4到6条指令意味着它们在200 ps期间并行重叠发生,而不是它们一个接一个地运行以细分200 ps时钟周期。(Modern Microprocessors A 90-Minute Guide!非常适合介绍超标量CPU流水线)。
(多核也没有帮助;它们的时钟甚至不一定彼此同相或处于相同的时钟速度,尽管英特尔客户端(非服务器)CPU确实将所有内核绑定到相同的频率,至少对于非turbo。它们在执行指令方面当然是相互独立的。)
在现代CPU上,每个时钟周期可能有两个或三个(缓存)加载,但它们都在同一时间读取缓存,而不是在时钟周期内的3个不同时间。(L1 d缓存是多端口的,因此可以并行进行3次不同的读取,沿着一次写入。)离核流量需要更长的时间。
除此之外,I/O所需的时间远远超过1个时钟周期。在现代x86上,仅使用CPU指令,每200 ps轮询一次I/O引脚是完全不可能的。核心和任何I/O引脚之间的流量必须经过连接所有核心、存储器控制器和“系统代理”(PCIe通道连接的地方)的环形总线。由于争用,可能存在延迟的可变性。最快的片外连接是PCI-Express通道,比5GHz慢得多。
您可能会排除rdtsc和其他东西中的大部分可变性(大约需要20个时钟周期),但即使您可以排除所有I/O时序可变性并以CPU内核的频率进行I/O,在5GHz i7上最多也只有200 ps的精度。
在实践中,它会更不精确。

相关问题