Вопрос

Я использую многопоточную версию FFTW (библиотеку БПФ), чтобы попытаться ускорить выполнение некоторого кода на машине с двумя процессорами.Вот результат времени с одним потоком:

131.838u 1.979s 2:13.91 99.9%

Вот оно с двумя потоками:

166.261u 30.392s 1:52.67 174.5%

Время пользователя и процент загрузки процессора, похоже, указывают на то, что потоки выполняются довольно эффективно, но время настенных часов (что меня действительно волнует) подсказывает мне (я думаю), что на обработку потоков требуется около 28 дополнительных секунд. .Это точное описание ситуации?Если да, то нормально ли это или у меня что-то неправильно настроено?Спасибо за любой свет.

Это было полезно?

Решение

Я довольно часто использовал FFTW и обнаружил, что, если вы не собираетесь использовать более двух процессоров, почти всегда более чистым решением будет просто использовать однопоточную версию.Это быстрее, потому что меньше межпоточного взаимодействия, по крайней мере, так показал мой опыт.

Несколько вещей, которые стоит проверить:

  1. Правильно ли вы настраиваете свою мудрость и используете ее?Мудрость, однажды созданная, заставит вашу трансформацию проходить намного быстрее.Если вы его не используете, вам следует это сделать.
  2. Вы вызываете библиотеку из одного потока или из двух?Это всегда была моя проблема: блокировка вызовов нескольких потоков в библиотеке становилась болезненной.
  3. Насколько велики ваши преобразования?Вы сначала пытаетесь использовать небольшой проект, просто чтобы посмотреть, как пойдет, а затем расширяете его?
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top