Подтвердить что ты не робот

Начало работы с параллельным программированием

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

Итак, мой вопрос: как лучше всего начать работу с многопроцессорным программированием? Я знаком с главным образом развитием Linux в C/С++ и Obj-C на Mac OS X с почти нулевым опытом Windows. Также мой запланированный программный проект потребует БПФ и, возможно, с плавающей точкой сравнения большого количества данных.

Есть OpenCL, OpenMP, MPI, потоки POSIX и т.д. С какими технологиями я должен начать?

Вот пара вариантов стека, которые я рассматриваю, но не уверен, что они позволят мне экспериментировать с моей целью:

  • Должен ли я получить Snow Leopard и попытаться получить программы OpenCL Obj-C для запуска выполнение на графическом процессоре ATI X1600 на моем ноутбук? или
  • Должен ли я получить Playstation и попробуйте написать код C для бросить через свои шесть доступных ячеек ядра SPE? или
  • Должен ли я создать ящик Linux с картой Nvidia и попробуйте работать с CUDA?

Заранее благодарим за помощь.

4b9b3361

Ответ 1

Я бы предпочел сначала начать работу с OpenMP и MPI, но не уверен, что это важно, что вы выбираете первым, но вам определенно нужно (по моему мнению:-)) изучить как общие, так и распределенные подходы к параллельной работе.

Я предлагаю сначала избегать потоков OpenCL, CUDA, POSIX: получить хорошее обоснование в основах параллельных приложений, прежде чем вы начнете бороться с подструктурой. Например, гораздо проще научиться использовать широковещательную связь в MPI, чем программировать их в потоках.

Я бы придерживался C/С++ на вашем Mac, так как вы уже знакомы с ними, и есть хорошие библиотеки OpenMP и MPI с открытым исходным кодом для этой платформы и этих языков.

И, и для некоторых из нас это большой плюс, независимо от того, что вы узнаете о C/С++ и MPI (в меньшей степени это относится и к OpenMP), вам будет хорошо, когда вы закончите настоящие суперкомпьютеры.

Все субъективные и аргументированные, поэтому игнорируйте это, если хотите.

Ответ 2

Если вы заинтересованы в parallelism в OS X, обязательно зайдите в Grand Central Dispatch, тем более, что технология были открыты с открытым исходным кодом и вскоре могут увидеть гораздо более широкое применение.

Ответ 3

Традиционное и императивное "совместное состояние с замками" - не единственный ваш выбор. Rich Hickey, создатель Clojure, Lisp 1 для JVM, делает очень убедительный аргумент против общего состояния. Он в основном утверждает, что почти невозможно получить право. Возможно, вам захочется прочитать сообщения, передающие актеры или исполнители Erlang или библиотеки STM.

Ответ 5

Вам не нужны специальные аппаратные средства, такие как графические карты и ячейки, для параллельного программирования. Ваш простой многоядерный процессор также получит прибыль от параллельного программирования. Если у вас есть опыт работы с C/С++ и objective-c, начните с одного из них и научитесь использовать потоки. Начните с простых примеров, таких как матричное умножение или решение лабиринта, и вы узнаете об этих неприятных проблемах (параллельное программное обеспечение не является детерминированным и полным Heisenbugs).

Если вы хотите перейти к массированному многопараллельности, я бы выбрал openCL как самый портативный. У Cuda все еще есть более обширное сообщество, больше документации и примеров, и это немного проще, но у вас будет карточка nvidia.

Ответ 6

Возможно, ваша проблема подходит для MapReduce парадигмы. Он автоматически заботится о балансировке нагрузки и проблемах concurrency, исследовательский документ от Google уже является классическим. У вас есть одномоторная реализация под названием Mars, работающая на графических процессорах, это может сработать для вас. Существует также Phoenix, который выполняет преобразование карт на многоядерные и симметричные мультипроцессоры.

Ответ 7

Я бы начал с MPI, когда вы узнаете, как работать с распределенной памятью. Книга Пачеко - это старина, но хорошая штучка, а MPI отлично работает на OS X, что дает неплохую многоядерную производительность.