Многоядерное программирование

Я хочу углубиться в многоядерное программирование (не для конкретного языка) и подумать, какое оборудование можно порекомендовать для изучения этой области. Моя цель - обновить мой рабочий стол.

11.12.2008 18:15:00
8 ОТВЕТОВ

Я бы порекомендовал хотя бы четырехъядерный процессор.

1
11.12.2008 18:16:54

Вы можете попробовать поработать с CUDA . Это бесплатно, не что трудно использовать и будет работать на все последнюю карту NVIDIA.

Кроме того, вы можете получить PlayStation 3 и Linux SDK и поработать над программированием процессора Cell. Обратите внимание, что следующий самый дешевый вариант для разработки Cell BE на порядок дороже, чем PS3.

И, наконец, любая современная материнская плата, которая будет оснащена процессором Core Quad или четырехъядерным процессором Opteron (приобретите хорошую у Asus или другого известного производителя), позволит вам поэкспериментировать с многоядерной системой ПК за разумную сумму денег.

1
11.12.2008 18:20:51

Я согласен с другими, где я бы перейти на четырехъядерный процессор. Я также большой поклонник материнских плат ASUS (P5Q Pro отлично подходит для процессоров Core2Quad и Core2Duo)!

Преимущество многоядерного программирования в том, что у вас есть больше ресурсов для более быстрого выполнения задач. Если вы серьезно относитесь к многоядерному программированию, то я бы обязательно получил четырехъядерный процессор. Я не верю, что вы должны заставить новую архитектуру i7 от Intel использовать преимущества многоядерной обработки, потому что все, что написано с использованием преимуществ Core2Duo или Core2Quad, будет работать лучше на более новой архитектуре.

Если вы собираетесь заниматься многоядерным программированием, то я бы получил хороший процессор Core2Duo. Помните, дело не только в том, сколько ядер у вас есть, но и в том, насколько БЫСТРЫЕ ядра используются для обработки заданий. Мой Core2Duo, работающий на частоте 4 ГГц, обычно выполняет задания быстрее, чем мой Core2Quad, работающий на частоте 2,4 ГГц, даже с многоядерной программой.

Позвольте мне знать, если это помогает! JFV

0
11.12.2008 18:39:46

Четырехъядерный, потому что это позволит вам решать задачи, где число одновременных процессов> 2, что часто не тривиализирует проблемы.

Я хотел бы также, для чистого выродка Squee , подобрать хорошую NVidia карту и использовать API CUDA. Если у вас есть деньги, есть отдельная рабочая станция CUDA, которая подключается к вашему главному компьютеру через кабель и слот расширения.

4
11.12.2008 18:44:08

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

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

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

1
11.12.2008 18:55:59

Если это вообще возможно, я бы предложил приобрести машину с двумя сокетами, желательно с четырехъядерными чипами. Вы, конечно, можете получить машину с одним сокетом, но с двумя сокетами вы начнете видеть некоторые эффекты памяти NUMA, которые будут усиливаться по мере того, как число ядер будет увеличиваться и возрастать.

Почему тебе не все равно? В настоящее время многоядерные разработчики сталкиваются с двумя огромными проблемами:

  1. Модель программирования. Параллельное программирование сложно, и (в настоящее время) этого не избежать. Четырехъядерная система позволит вам начать играть с реальным параллелизмом и всеми популярными парадигмами (потоки, UPC, MPI, OpenMP и т. Д.).

  2. Память Каждый раз, когда вы начинаете использовать несколько потоков, возникает конкуренция за ресурсы, и стена памяти становится все больше и больше. Недавняя статья в Arstechnica излагается некоторые (очень предварительные) исследования в Sandia , что показывает, насколько плохо это может стать , если нынешние тенденции сохранятся. Многоядерные машины должны будут поддерживать все питание, а для этого необходимо, чтобы люди были хорошо знакомы со своей системой памяти. Двойная розетка добавляет NUMA к миксу (по крайней мере, на машинах AMD), что должно помочь вам начать этот сложный путь.

Если вас интересует дополнительная информация о несоответствиях производительности с компьютерами с несколькими сокетами, вы также можете обратиться к этому техническому отчету по этому вопросу.

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

6
11.12.2008 23:31:48

Это зависит от того, что вы хотите сделать.

Если вы хотите изучить основы многопоточного программирования, то вы можете сделать это на своем существующем одноядерном ПК. (Если у вас 2 потока, то ОС будет переключаться между ними на одноядерном ПК. Затем при переходе на двухъядерный ПК они должны автоматически работать параллельно на отдельных ядрах для ускорения в 2 раза). Это имеет преимущество быть свободным! Недостатки в том, что вы не увидите ускорения (на самом деле параллельная реализация, вероятно, немного медленнее из-за накладных расходов), и у ошибочного кода есть немного больше шансов на работу.

Однако, несмотря на то, что вы можете научиться многопоточному программированию на одноядерном процессоре, двухъядерный (или даже HyperThreading) процессор будет очень полезен.

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

Если вы хотите узнать об алгоритмах для работы на видеокартах, что сильно отличается от многоядерности x86, то приобретите CUDA и купите обычную видеокарту nVidia, которая ее поддерживает.

2
11.12.2008 19:08:22

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

Когда я был студентом, одним из наших проектов было создание поточно-ориентированной реализации библиотеки malloc для C. Даже на одноядерном процессоре этого было более чем достаточно, чтобы вылечить меня от моего желания заняться многопоточным программированием. Я бы попробовал что-то маленькое, прежде чем думать о том, чтобы тратить много денег.

1
11.12.2008 19:56:16