Как вы пользуетесь Multicore? - PullRequest
61 голосов
/ 12 декабря 2008

Как человеку из мира HPC , пришедшему из мира корпоративной веб-разработки, мне всегда любопытно посмотреть, как разработчики в "реальном мире" используют преимущества параллельных вычислений. Это гораздо более актуально сейчас, когда все чипы собираются многоядерными , и это будет еще более актуально, когда на чипе тысячи ядер вместо нескольких.

Мои вопросы:

  1. Как это влияет на ваш программный план?
  2. Меня особенно интересуют реальные истории о том, как многоядерный процессор влияет на разные программные области, поэтому укажите в своем ответе, какие разработки вы делаете ( например, на стороне сервера, клиентские приложения, научные вычисления, и т.д.).
  3. Что вы делаете со своим существующим кодом, чтобы использовать преимущества многоядерных машин, и с какими проблемами вы столкнулись? Используете ли вы OpenMP , Erlang , Haskell , CUDA , TBB , UPC или что-то еще?
  4. Что вы планируете делать, когда уровни параллелизма продолжают расти, и как вы будете иметь дело с сотнями или тысячами ядер?
  5. Если ваш домен не легко извлекает выгоду из параллельных вычислений, то объясните, почему это тоже интересно.

Наконец, я сформулировал это как многоядерный вопрос, но не стесняйтесь говорить о других типах параллельных вычислений. Если вы портируете часть своего приложения для использования MapReduce или если MPI на больших кластерах - это парадигма для вас, то определенно упомяните об этом тоже.

Обновление: Если вы ответите # 5, укажите, считаете ли вы, что все изменится, если будет больше ядер (100, 1000 и т. Д.), Чем вы можете обеспечить доступной пропускной способностью памяти (см. Как как пропускная способность становится все меньше и меньше на ядро). Вы все еще можете использовать оставшиеся ядра для своего приложения?

Ответы [ 22 ]

0 голосов
/ 28 декабря 2014

Я пользуюсь многоядерным использованием C, PThreads и реализацией передачи последовательных процессов на платформе OpenVPX в Linux с помощью планировщика набора исправлений PREEMPT_RT. Все это приводит к почти 100% -ной загрузке ЦП в нескольких экземплярах ОС, при этом процессорное время не используется для обмена данными между процессорными картами в корпусе OpenVPX, а также очень низкая задержка. Также используется sFPDP для объединения нескольких шасси OpenVPX в один компьютер. Я не использую внутренний DMA Xeon, чтобы уменьшить нагрузку на память внутри ЦП (DMA по-прежнему использует пропускную способность памяти за счет ядер ЦП). Вместо этого мы оставляем данные на месте и передаем право собственности на них способом CSP (так мало похоже на философию библиотеки параллельных потоков данных .NET для задач).

1) Дорожная карта программного обеспечения - мы стремимся максимально использовать недвижимость и доступную мощность. Необходимо максимально использовать новейшее оборудование

2) Программная область - эффективно Научные вычисления

3) Что мы делаем с существующим кодом? Постоянно разбивая его на части и перераспределяя его части по потокам, чтобы каждое ядро ​​работало максимально эффективно, не нарушая требования реального времени. Новое оборудование требует значительного переосмысления (более быстрые ядра могут сделать больше в данный момент времени, не желая, чтобы они использовались недостаточно). Не так плохо, как кажется - основные подпрограммы очень модульные, поэтому их легко собрать в куски размером с нить. Несмотря на то, что мы планировали отобрать контроль над потоками у Linux, нам пока не удалось извлечь из этого значительную дополнительную производительность. Linux довольно хорош в получении данных и кода в более или менее одном и том же месте.

4) В действительности уже есть - общее количество компьютеров уже составляет тысячи ядер

5) Параллельные вычисления очень важны - это система MISD.

Если это звучит как большая работа, так и есть. некоторые работы требуют огромных усилий, чтобы максимально использовать доступное оборудование и отказаться от всего, что на высоком уровне. Мы обнаруживаем, что общая производительность машины зависит от пропускной способности памяти ЦП, а не от скорости ядра ЦП, размера кеша L1 / L2 / L3.

0 голосов
/ 03 февраля 2009

Я работаю в C # с потоками .Net. Вы можете комбинировать объектно-ориентированную инкапсуляцию с управлением потоками.

Я прочитал несколько сообщений Питера, в которых рассказывается о новой книге от Packt Publishing, и я нашел следующую статью на веб-странице Packt Publishing:

http://www.packtpub.com/article/simplifying-parallelism-complexity-c-sharp

Я прочитал книгу о параллельном программировании в Windows, книгу Джо Даффи. Теперь я жду "Потокового программирования C # 2008 и 2005", книга Хиллар - http://www.amazon.com/2008-2005-Threaded-Programming-Beginners/dp/1847197108/ref=pd_rhf_p_t_2

Я согласен с Сзунди "Нет серебряной пули"!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...