min*_*nel 14 python performance
在这篇文章中,为什么处理排序数组的速度比随机数组快,它说分支预测是排序数组性能提升的原因.
但我只是尝试使用Python的例子; 我认为排序和随机数组之间没有区别(我尝试了bytearray和数组;并使用line_profile来分析计算).
我错过了什么吗?
这是我的代码:
from array import array
import random
array_size = 1024
loop_cnt = 1000
# I also tried 'array', and it's almost the same
a = bytearray(array_size)
for i in xrange(array_size):
a.append(random.randint(0, 255))
#sorted
a = sorted(a)
@profile
def computation():
sum = 0
for i in xrange(loop_cnt):
for j in xrange(size):
if a[j] >= 128:
sum += a[j]
computation()
print 'done'
Run Code Online (Sandbox Code Playgroud)
我将原始代码移植到Python并使用PyPy运行它.我可以确认排序的数组比未排序的数组处理得更快,并且无分支方法也可以消除具有类似于排序数组的运行时间的分支.我相信这是因为PyPy是一个JIT编译器,因此分支预测正在发生.
[编辑]
这是我使用的代码:
import random
import time
def runme(data):
sum = 0
start = time.time()
for i in xrange(100000):
for c in data:
if c >= 128:
sum += c
end = time.time()
print end - start
print sum
def runme_branchless(data):
sum = 0
start = time.time()
for i in xrange(100000):
for c in data:
t = (c - 128) >> 31
sum += ~t & c
end = time.time()
print end - start
print sum
data = list()
for i in xrange(32768):
data.append(random.randint(0, 256))
sorted_data = sorted(data)
runme(sorted_data)
runme(data)
runme_branchless(sorted_data)
runme_branchless(data)
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |