Многоядерное программирование - PullRequest
5 голосов
/ 11 декабря 2008

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

Ответы [ 8 ]

6 голосов
/ 11 декабря 2008

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

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

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

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

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

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

4 голосов
/ 11 декабря 2008

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

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

2 голосов
/ 11 декабря 2008

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

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

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

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

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

1 голос
/ 11 декабря 2008

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

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

1 голос
/ 11 декабря 2008

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

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

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

1 голос
/ 11 декабря 2008

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

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

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

1 голос
/ 11 декабря 2008

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

0 голосов
/ 11 декабря 2008

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

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

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

Дайте мне знать, если это поможет! JFV

...