Изменение сродства процессора влияет на производительность других функций

У меня есть код на C, который имеет следующую общую структуру:

while (err > tol){
func_A();
func_B();
func_C();
func_Par();
}

Коды меняют некоторые глобальные переменные и вот как они связаны. В func_Par(), три темы созданы. Все потоки используют одну и ту же функцию, а именно Threads_Func(), На основе номера потока, следующий код используется в Threads_Func() чтобы изменить сродство процессора к каждому потоку:

pthread_t curThread = pthread_self();
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(thread_number, &cpuset);
pthread_setaffinity_np(curThread, sizeof(cpu_set_t), &cpuset);

Вот странное поведение, которое я не могу объяснить. Я измеряю время процессора для func_A, func_B а также func_C и вот результаты (все результаты в микросекундах):

С настройкой соответствия CPU в Threads_Func():

func_A: 439197
func_B: 61129
func_C: 400482
func_Par: 2488662

Без настройки соответствия процессора в Threads_Func():

func_A: 226677
func_B: 30922
func_C: 242516
func_Par: 4843463

Как вы можете видеть, хотя функции выполняются в последовательном порядке, установка сходства cpu удваивает время в других функциях. Я пытаюсь выяснить, что я должен установить привязку к процессору (чтобы улучшить производительность в func_Par) избегая снижения производительности в других функциях.

К вашему сведению, я компилирую код, используя gcc и с -O0 флаг, чтобы убедиться, что компилятор не меняет порядок. Более того, я использую четырехъядерный процессор, а ОС Linux Ubuntu.

Любая помощь приветствуется.
Заранее спасибо за помощь.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …