Максимальное использование процессора с запросом - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь выполнить этот поиск для самой маленькой сущности. В списке «Титулы» есть около 5 миллионов. предметы и это список. Каждый заголовок будет помещен против объекта.

Мой вопрос, как я могу оптимизировать этот поиск? Для меня возможно максимальное использование процессора при параллельном поиске?

Приветствуются любые советы или руководства по исследованиям.

Заранее спасибо.

    for we in titles:
        dist = stringdist.levenshtein_norm(we, ent)

        if dist < best_1:
            best_1 = dist
            best_match_1 = we

        elif dist < best_2:
            best_2 = dist
            best_match_2 = we

1 Ответ

0 голосов
/ 28 марта 2020

Ваша лучшая ставка - использовать модуль python multiprocessing. Превратите это в проблему уменьшения карты, используя рабочий пул для запуска stringdist.levenshtein_norm над всем в titles, и каждая функция возвращает (dist,ent) в виде кортежа. Затем возьмите min(), который даст вам как минимальный балл, так и запись.

Если вы работаете в системе с 96 ядрами, вы увидите ускорение ≈96x.

Если вы работаете в системе с 1 ядром, вы не увидите ускорения.

Вы также можете сделать это быстрее, переписав stringdist.levenshtein_norm для работы на GPU или в машинном коде.

...