0

В настоящее время я сравниваю последовательный и параллельный реализации некоторого кода на четырехъядерном процессоре. Одна из вещей, которые я хотел бы понять/измерить, - это то, как выполняется серийный код, когда он работает на одном ядре.Понимание оптимизации gcc -o3 в многоядерной системе

Когда я скомпилировал серийный код, я использую опцию gcc -O3, и сначала я заметил, что серийный код не слишком убогий. Тем не менее, я заметил, что когда я запускаю другой интенсивный процесс на одном из ядер, производительность серийной версии падает.

Вот некоторые цифры:

Total Time elapsed: 1s, 233ms <- only serial code is running 
Total Time elapsed: 1s, 238ms <- only serial code is running 
Total Time elapsed: 2s, 128ms <- serial code run but other code is running on another core 
Total Time elapsed: 2s, 220ms <- serial code run but other code is running on another core 

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

Что мне интересно, есть ли основания полагать, что какой-то шаг в процессе O3 позволяет коду использовать преимущества четырехъядерного ядра, или, быть может, более точно, почему предполагается, что " серийная версия "работает лучше, когда доступны другие ядра? Я пытался понять документацию GCC, и я собрал несколько ссылок на потоки. Но я действительно не понимаю, и мне интересно, может ли кто-нибудь помочь мне понять, что O3 может или не может сделать, чтобы использовать более одного ядра.

Для чего это стоит, я использую Intel (R) Core, (TM) i7-3820 CPU @ 3.60GHz и бегу Linux Mint 13.

Благодаря

ответ

1

-O3 не в лицо более чем одного ядра.

Вы видите эффекты ресурсов на вашем процессоре: пропускная способность и кеш памяти.

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