Member 13849020 Ответов: 1

Количество используемых процессоров полностью меняет профилирование моего кода


Привет всем!
У меня есть один простой вопрос: почему количество процессоров, используемых при компиляции моего кода с помощью инструмента профилирования, не уменьшает время, затрачиваемое на каждую функцию? Например, если я компилирую первый раз с 1 процессором, а затем с четырьмя, я ожидаю увидеть тот же плоский профиль (например, тот же процент и те же самые дорогие функции и т. д.), Но только с временем, потраченным на каждую функцию, разделенную на четыре. Но это не тот случай... У меня есть совершенно другой список функций, и время не является последовательным. Почему??
PS: я использую Gprof.
Спасибо!

Что я уже пробовал:

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

1 Ответов

Рейтинг:
7

Daniel Pfeffer

Функция обычно выполняется в контексте одного потока. Наличие дополнительных процессоров не улучшит его скорость.

Дополнительные процессоры полезны, когда ваша программа может быть разделена на несколько потоков. В этом случае, чем больше процессоров, тем больше потоков может выполняться одновременно (истинная многозадачность, а не нарезка времени). Это имеет свои пределы (см. закон Амдала) и проблемы (например, синхронизация между потоками).

Многозадачность требует иного подхода к программированию, чем однозадачность, но правильно реализованная она может значительно ускорить работу многих программ.


Member 13849020

Хорошо, большое спасибо, я понял, что количество процессоров и скорость моей программы напрямую не связаны, но почему самые дорогие функции с одним процессором не совпадают с 4?

CPallini

5.

Daniel Pfeffer

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

Заметьте, что это только предположение. Было бы невозможно дать вам лучший ответ без полного анализа данных профилирования.

Member 13849020

да, конечно! Спасибо за уделенное время!