fortran中的以下循环几乎没有时间
def got_three?(array)
array.chunk_while(&:==).any?{|g| g.size >= 3}
end
但我只是不明白,我们的cpu大约是GHz,这意味着一秒钟就会有10 ^ 9个循环,而上面的循环周期远远超过10 ^ 9,为什么它几乎不需要时间?
似乎在编译时不计算这些值。我们可以添加外循环,直到
j=0
do i=1,1000000000000000000
j=j+1
end do
print*,j
现在我的电脑需要一秒钟
修改
我正在使用windows,intel parallel studio 15,没有额外的编译选项:只需do m=1,1000000000
do i=1,1000000000000000000
j=j+1
end do
end do
print*,j
。定时方法很简单,只需在命令行按Enter后执行.exe
答案 0 :(得分:1)
j
的值可以在编译时计算。
所以上面的代码将缩减为
print 1000000000000000000
关于周期和指令的逻辑是有缺陷的。现代CPU在硬件级别上并行化代码,即使代码是串行的:
cpu有更多的ALU可以并行计算算术指令
指令在流水线中执行,因此在任何一点,并行执行连续指令的不同阶段。
所以"每个周期最多一条指令"没有。
increment by one
也是CPU中最快的指令之一。