任何人都可以给我大概的时间(以纳秒为单位)来访问L1,L2和L3缓存,以及Intel i7处理器上的主内存吗?
虽然这不是一个特别的编程问题,但是对于某些低延迟编程挑战而言,了解这些速度细节是必要的.
以下Python 3.x整数乘法平均在1.66s和1.77s之间:
import time
start_time = time.time()
num = 0
for x in range(0, 10000000):
# num += 2 * (x * x)
num += 2 * x * x
print("--- %s seconds ---" % (time.time() - start_time))
Run Code Online (Sandbox Code Playgroud)
如果我更换2 * x * x
用2 *(x * x)
,它需要之间2.04
和2.25
.怎么会?
另一方面,它与Java相反:2 * (x * x)
Java更快.Java测试链接:为什么2*(i*i)比Java中的2*i*i更快?
我运行了每个版本的程序10次,这里是结果.
2 * x * x | 2 * (x * x)
---------------------------------------
1.7717654705047607 | 2.0789272785186768
1.735931396484375 | …
Run Code Online (Sandbox Code Playgroud) python performance benchmarking python-3.x integer-arithmetic
int suma(int* array, int len)
{
asm(" xor %eax, %eax # resultado = 0 \n"
" xor %edx, %edx # i = 0 \n"
"1: add (%rdi,%rdx,4), %eax # res += array[i] \n"
" inc %edx # ++i \n"
" cmp %edx,%esi # i < len? \n"
" jne 1b # repetir \n"
// " ret \n"
);
}
int main()
{
int v[100];
return suma(v, 100);
}
Run Code Online (Sandbox Code Playgroud)
为什么gcc会ret
在suma()
on 的末尾插入-O0
,但我必须自己添加on -O3
?
来自gcc …
benchmarking ×2
assembly ×1
c ×1
cpu-cache ×1
gcc ×1
java ×1
jvm ×1
jvm-hotspot ×1
latency ×1
low-latency ×1
memory ×1
performance ×1
python ×1
python-3.x ×1