Многопоточное поведение меняется с компьютера на другой - PullRequest
0 голосов
/ 06 января 2019

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

рассматривают его как дерево, где каждый узел выполняет операцию независимо от других. поэтому я создаю поток для каждой операции узла.

Я проверил производительность этого кода на 2 машинах, и время выполнения без графов потоков показано ..

Мой вопрос ... с тем же кодом. почему такая разница может произойти? (почему машина насыщается быстрее, чем другая)

также, выполнение того же кода для 48 машин дает худшие результаты?

enter image description here

Характеристики машины RED line : ЦП: 16 Он-лайн список процессоров: 0-15 Резьба (ы) на ядро: 1 Сердечник (и) на сокет: 4 Разъем (ы): 4 NUMA узел (ы): 2

Технические характеристики машины Blue Line : ЦП: 8 Он-лайн список процессоров: 0-7 Резьба (ы) на ядро: 1 Сердечник (и) на сокет: 4 Разъем (ы): 2 NUMA узел (ы): 1

одинаковая скорость ядра для обоих значений кэша .

Подтверждено из ответа :: попробовал

numactl --cpunodebind = 0 --membind = 0 {exe}

для запуска на одном узле numa и результаты согласованы .. это была проблема numa

1 Ответ

0 голосов
/ 06 января 2019

Машины очень разные. Один это НУМА, другой нет. Потоки, работающие на разных узлах NUMA, значительно увеличили затраты на синхронизацию. Даже способ распределения памяти очень важен для производительности.

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

В качестве меры задержки можно повысить производительность в случае NUMA, если прикрепить процесс к ядрам, расположенным на том же узле NUMA.

...