2016-12-22 9 views
0

Мой вопрос очень прост.Почему в качестве увеличения контуров потоков Заблокировано медленнее?

Почему Interlocked-Increment в многопоточности медленнее, чем 1-нить?

Это просто из-за отскока линии кэширования (конфликт в отношении кэш-памяти)?

Или есть еще одна причина?

Я использую Intel i7, visual studio 2012. Я проверил счетный номер, используя функцию блокировки-прибавления. и результат теста был таков.

1 Тема - 610385971

2 Thread - 497804468

3 Тема - 351516659

4 Тема - 333275249

+0

Ваш вопрос как сформулированный является неопределенным и неопровержимым. Вы не показали нам свой код, который может быть медленным по другим причинам; вы не сказали нам, какую платформу/аппаратную архитектуру вы используете; и вы не дали нам никаких цифр, показывающих производительность, которую вы видите. Обратитесь в [справочный центр] (http://stackoverflow.com/help/how-to-ask) для получения информации о том, как лучше задать вопрос. – antiduh

+0

Мне очень жаль! Я использую Intel i7, visual studio 2012. Я проверил номер подсчета с помощью функции блокировки-приращения. и результат теста был тот. 1 Тема - 610385971 2 Тема - 497804468 3 Тема - 351516659 4 Тема - 333275249 в этом тесте, как вы видите, что увеличение производительности нить вниз. Мне просто интересно, какая причина производительности. хорошо провести день! – chfhrqnfRhc

+0

Поместите эти заметки в исходное сообщение. – antiduh

ответ

2

Если я понимаю, код от вашего словесного описания правильно, то да, Основной причиной снижения производительности является конкуренция за одну и ту же линию кэша между разными ядрами. Например, для успешного выполнения блокированного приращения ядро ​​должно получить строку кэша к E, используя что-то вроде https://en.wikipedia.org/wiki/MESIF_protocol, для которого требуется межядерная координация и поэтому заметно медленнее по сравнению с выполнением блокированного приращения на одном ядре.

+0

Большое вам спасибо! Я думал, что есть еще одна главная причина снижения производительности! Я должен изучить кеш больше :) – chfhrqnfRhc

+0

@chfhrqnfRhc: См. Также http://stackoverflow.com/questions/39393850/can-num-be-atomic-for-int-num для получения дополнительной информации о деталях низкого уровня реализации ЦП инструкция x86 asm 'lock inc [mem]' внутренне и почему она атома, но 'inc [mem]' is not (без префикса 'lock' x86) и как это имеет значение для C atomics. –

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

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