Как я могу распараллелить алгоритм на машине с несколькими процессорами? - PullRequest
5 голосов
/ 27 августа 2010
  • Например, Intel Core2Duo должен иметь один кристалл, но два ядра .

  • Итак, должна быть возможность контролировать то, что обрабатывается на каком ядре, что означает, что мой алгоритм может использовать два ядра параллельно.

Вопрос в том, как?

Нужно ли переходить на уровень ядра, чтобы сделать это, или есть более простой способ?Чтобы быть более конкретным, что нужно для реализации двухъядерной сортировки слиянием?

Ответы [ 6 ]

3 голосов
/ 27 августа 2010

Чтобы реализовать алгоритм, использующий преимущества нескольких ядер, рассмотрим OpenMP .

Конечно, алгоритмы с сильными зависимостями данных могут плохо распараллеливаться.

3 голосов
/ 27 августа 2010

Судя по вашим прошлым вопросам, я бы сказал, что вы хотите реализовать C / C ++, но я думаю, что ответ примерно одинаков, независимо от языка.

Если вы хотите распараллелить какую-либо операцию, сделайте ее многопоточной. У вас может быть столько параллельных, параллельных потоков, сколько у вас ядер.

Вот связанный вопрос: Как реализовать алгоритмы «разделяй и властвуй» в C # с использованием многопоточности?

Насколько я понимаю, привязка определенного потока к ядру или процессору называется привязка процессора . Как правило, это не очень хорошая идея, потому что цель операционной системы состоит в том, чтобы перемещать потоки между процессорами. Вряд ли вы справитесь с этим лучше, чем ОС.

1 голос
/ 27 августа 2010

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

Сродство к процессору

Надеюсь, это поможет.

0 голосов
/ 28 августа 2010

Хотя потоки POSIX (pthreads), вероятно, являются хорошей идеей для начала, это не исключение.

Многопоточность в C на самом деле не тривиальна, поэтому я бы посоветовал fork().

запустите одну рабочую ветвь для каждого ЦП с подразделом вашего алгоритма сортировки слиянием, а затем снова соберите их в диспетчере менеджера.

При работе над параллельным решением я рассматриваю форки перед потоками, поскольку их проще реализовать, и вы получаете быстрый предварительный результат. Как только это сработает, вы можете потратить некоторое время и поработать с pthreads.

0 голосов
/ 28 августа 2010

Это зависит от того, на каком языке программирования вы хотите добиться этого.Например, для:

Просто выберите язык и найдите возможности параллельной обработки на этом языке.

Удачи!

0 голосов
/ 27 августа 2010

Образец параллельного программирования: реализация сортировки с параллельным слиянием . А вот один в Эрланг . Для более точных ответов вам нужно задать более точный вопрос.

...