2009-02-19 6 views
10

Как разработчик программного обеспечения, работающий в основном с языками программирования высокого уровня, я не уверен, что я могу сделать, чтобы должным образом обратить внимание на предстоящее многозначное присутствие многоядерных компьютеров. Я пишу в основном обычные и не требовательные приложения, тем не менее, я думаю, важно знать, нужно ли мне менять какие-либо парадигмы программирования или даже язык, чтобы овладеть будущим.Возникает ли появление архитектуры MultiCore на меня как разработчика программного обеспечения?

Мой вопрос таким образом:
How to deal with increasing multicore presence in day-by-day hacking?

ответ

2

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

Если вы работаете с .NET, посмотрите на параллельные расширения. Они позволяют легко выполнять множество задач параллельного программирования.

3

Узнайте преимущества параллелизма и пределы (например, закон Амдаля).

Таким образом, вы можете, по возможности, использовать единственный маршрут для более высокой производительности, который будет открыт. Существует много инновационной работы, которая происходит на более простых подходах (фьючерсы и библиотеки задач), а старая работа заново открыта (функциональные языки и неизменные данные).

Свободный обед закончился, но это не значит, что эксплуатировать нечего.

2

Чтобы воспользоваться более чем одним ядром, вы должны рассмотреть возможность распараллеливания кода. Несколько новых, неизменяемых типов и минимальная синхронизация - ваши новые друзья.

2

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

Некоторые приложения приносят пользу из того факта, что они запускаются на процессоре mutli-core, тогда как другие. Если ваше приложение может извлечь выгоду из многоуровневого факта, вы должны быть готовы к параллельной работе. Свободный обед закончился; то есть: в прошлом ваше приложение стало быстрее, когда был выпущен новый процессор, и вам не пришлось прикладывать никаких усилий в своем приложении, чтобы получить дополнительную скорость. Теперь, чтобы воспользоваться преимуществами многоядерных процессоров, вы должны убедиться, что ваше приложение может воспользоваться им. То есть: вы, чтобы увидеть, какие задачи могут быть выполнены многопоточный/одновременно, и это приносит некоторые вопросы к столу ...

2

Learn Erlang/F # (в зависимости от платформы)

0

Мне задали один и тот же вопрос, и ответ «зависит от этого». Если ваш Джо Winforms, может быть, не так много. Если ваш код написания должен быть выполнен, да. Одна из самых больших проблем, которую я вижу при параллельном программировании, заключается в следующем: если что-то не может быть парализовано, и вы лжете и говорите, что время выполнения должно выполняться параллельно, оно не будет терпеть крах, это просто сделает что-то неправильно , и вы получите результаты дерьма и обвините фреймворк.

4

Большинство проблем не требуют большого количества процессорного времени. Действительно, одиночные ядра достаточно быстры для многих целей. Когда вы обнаружите, что ваша программа слишком медленная, сначала просмотрите ее и посмотрите на свой выбор алгоритмов, архитектуры и кеширования. Если этого недостаточно, попробуйте разделить проблему на отдельные процессы. Часто это стоит делать просто для изоляции разломов и поэтому вы можете понять использование ЦП и памяти для каждого процесса.Кроме того, как правило, каждый процесс запускается на конкретном ядре и хорошо использует кэши процессора, поэтому вам не придется испытывать существенные накладные расходы, чтобы поддерживать непрерывность строк кэша. Если вы идете на многопроцессорный дизайн и по-прежнему обнаруживаете, что проблема требует большего времени процессора, чем у вас на машине, у вас есть возможность расширить ее работу над кластером.

Бывают ситуации, когда вам нужно несколько потоков в одном и том же адресном пространстве, но будьте осторожны, что потоки действительно трудно получить. Условия гонки, особенно на небезопасных языках, иногда требуют отладки недель; часто простое добавление трассировки или запуск под отладчиком изменяет тайминги, чтобы скрыть проблему. Простое размещение замков повсюду часто означает, что вы получаете много блокировки накладных расходов, а иногда и столько разводов, что вы действительно не получаете преимущества параллелизма, на который вы надеялись. Даже если у вас есть права на блокировку, вам необходимо настроить профиль для согласования кеширования. В конечном счете, если вы хотите действительно настроить некоторый высококонкурентный код, вы, вероятно, столкнетесь с конструкциями без блокировки и более сложными схемами блокировки, чем те, которые существуют в текущих многопоточных библиотеках.

0

Изучите OpenMP и MPI для кода C и C++.

OpenMP также применяется к другим языкам, а также к Fortran, я полагаю.

0

Написать меньше программ.

Другие языки/стили кода позволят вам делать многопоточность лучше (хотя многопоточность по-прежнему очень сложна на любом языке), но большая выгода для обычных разработчиков IMHO - это способность выполнять множество небольших программ одновременно, чтобы выполнить некоторые большая задача.

Итак, привыкните разбивать свои проблемы на независимые компоненты, которые можно запускать, когда захотите.

Вы также создадите более удобное программное обеспечение.

2
  • Предпочитаете неизменные структуры данных, их использование упрощает понимание программ не только в параллельных программах.

  • Изучите инструменты параллелизма на вашем языке (например, java.util.concurrent, JCIP).

  • Изучите функциональный язык (например, Haskell).

 Смежные вопросы

  • Нет связанных вопросов^_^