2013-04-09 2 views
1

info:Измерять стоимость миграции потоков?

  1. Я кодирую в C/C++;
  2. У меня есть многопоточная программа, и я хочу ее оптимизировать, т. Е. Уменьшить время процессора (рассчитанное «clock_gettime» с указанным «CLOCK_THREAD_CPUTIME_ID»), потребляемое каждой функцией;
  3. Мое предположение заключается в том, что оно может соответствовать моей цели, используя «pthread_setaffinity_np», чтобы привязать каждый поток к его конкретному процессору, т. Е. Избежать затрат, связанных с миграцией потоков;
  4. предварительный тест показывает, что моя догадка кажется правильной.

вопросы:

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

ответ

4

Какова стоимость миграции нитей?

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

является обязательной нитью для CPU, действительно полезной?

В некоторых случаях это может помочь; в других, это может повредить производительность. Например, потоки, связанные с одним и тем же ядром, должны ждать друг друга, в то время как несвязанные потоки могут быть запланированы немедленно на любом доступном ядре. Если вам действительно нужен такой уровень настройки производительности, вам нужно будет измерить эффект.

Можно ли узнать, сколько раз произошла миграция потоков во время выполнения процесса? если возможно, как это сделать?

Это зависит от платформы. В Linux вы можете увидеть много статистики планирования (включая миграцию) в /proc/<pid>/sched

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