Какое максимальное ускорение может дать векторизация? - PullRequest
0 голосов
/ 02 мая 2019

Я в основном разрабатываю на 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)
...