Что такое хорошая многоядерная 64-битная программа "Hello World"? - PullRequest
6 голосов
/ 31 октября 2009

Недавно я обновил свой домашний ПК до четырехъядерного процессора и 64-разрядной ОС. У меня есть некоторый опыт работы с C / C ++, и я действительно испытываю «жажду» попробовать некоторые возможности 64-битного процессора. Что такое хорошая программа типа "Hello World", которая демонстрирует 64-битные многоядерные возможности, выполняя некоторые простые вещи, которые не работают вообще в 32-битном одноядерном коде?

Я просто пытаюсь понять, как эти новые процессоры могут влиять на производительность кода C / C ++ в крайних случаях.

Ответы [ 3 ]

2 голосов
/ 31 октября 2009

OpenMP будет простым способом поиграть с многоядерным программированием на C ++. Пример из Википедии на самом деле ничего не требует от процессора, но вы можете заменить 'cout' на некоторую независимую, долго работающую функцию.

OpenMP

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

Увеличена пропускная способность, поскольку все элементы данных шире, процессор может обрабатывать больше данных в любой заданный тактовый цикл. Взгляните на некоторые тесты Microsoft для Exchange Server, теперь они перешли на поддержку 64-разрядных только потому, что увеличение пропускной способности невероятно.

Больше регистров, так как 64-битная архитектура имеет большое количество регистров, большинство параметров функции и возвращаемое значение могут быть переданы с использованием регистров.

В ABI x86 с некоторыми соглашениями о вызовах один или, может быть, два параметра могут быть переданы через регистры, а остальные должны быть помещены в стек. При обычном соглашении о вызовах, таком как cdecl, ни один параметр или возвращаемое значение не помещается в регистр. Поскольку стек расположен в основной памяти, это может сильно повлиять на производительность.

1 голос
/ 31 октября 2009

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

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

1 голос
/ 31 октября 2009

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

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

...