Я в основном разрабатываю на Python.Там я заметил, что vecotrizing numpy операции дает ОГРОМНОЕ ускорение;иногда в 1000 раз быстрее.
Я только что слышал о Производительность: SIMD, векторизация и настройка производительности Джеймса Рейндерса (бывший директор Intel), что векторизация дает самое большее ускорение в 16 раз (минута)03:00 - 03:09), но распараллеливание может увеличить скорость до 256 раз.
Откуда взялись эти числа?Я думал, что ускорение для распараллеливания - это число потоков, поэтому на моем Intel i7-6700HQ ?
пример векторизации Python * в 8 раз
Это один пример, где я вижуогромная разница:
import timeit
import numpy as np
def print_durations(durations):
print('min: {min:5.1f}ms, mean: {mean:5.1f}ms, max: {max:6.1f}ms (total: {len})'
.format(min=min(durations) * 10**3,
mean=np.mean(durations) * 10**3,
max=max(durations) * 10**3,
len=len(durations)
))
def test_speed(nb_items=1000):
print('## nb_items={}'.format(nb_items))
durations = timeit.repeat('cosine_similarity(mat)',
setup='from sklearn.metrics.pairwise import cosine_similarity;import numpy as np;mat = np.random.random(({}, 50))'.format(nb_items),
repeat=10, number=1)
print_durations(durations)
durations = timeit.repeat('for i, j in combinations(range({}), 2): cosine_similarity([mat[i], mat[j]])'.format(nb_items),
setup='from itertools import combinations;from sklearn.metrics.pairwise import cosine_similarity;import numpy as np;mat = np.random.random(({}, 50))'.format(nb_items),
repeat=10, number=1)
print_durations(durations)
print('First vectorized, second with loops')
test_speed(nb_items=100)
test_speed(nb_items=200)
test_speed(nb_items=300)
test_speed(nb_items=400)
test_speed(nb_items=500)