Что польза многоядерная 64-разрядный “Привет Мировая” программа?

Я записал сообщение в блоге об этом выпуске .

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

update t
set hitCount = hitCount + 1
where pk = @id

if @@rowcount < 1 
begin 
   begin tran
      update t with (serializable)
      set hitCount = hitCount + 1
      where pk = @id
      if @@rowcount = 0
      begin
         insert t (pk, hitCount)
         values (@id,1)
      end
   commit tran
end

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

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

6
задан Alex R 31 October 2009 в 16:41
поделиться

3 ответа

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

OpenMP

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

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

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

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

2
ответ дан 17 December 2019 в 07:06
поделиться

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

Важная вещь, которую нужно сохранить. Имейте в виду, что 64-битные или многоядерные процессоры действительно не могут делать то, что НЕ МОГУТ делать одноядерные процессоры, по сути, они просто делают это быстрее и с большими числами.

1
ответ дан 17 December 2019 в 07:06
поделиться

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

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

1
ответ дан 17 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: