Olej писал(а): ↑11 фев 2022, 13:13
движемся в сторону умощнения
Ну и, наконец, настоящий SMP -
1U сервер DELL R420 - 2 процессора по 20 ядер каждый, из которых 10 физических + 10 гипертрэдинговых:
Код: Выделить всё
olej@R420:~/2022/Go/probes$ inxi -Cxxx
CPU: Topology: 2x 10-Core model: Intel Xeon E5-2470 v2 bits: 64 type: MT MCP SMP arch: Ivy Bridge rev: 4
L2 cache: 50.0 MiB
flags: avx lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx bogomips: 192097
Speed: 2800 MHz min/max: 1200/3200 MHz Core speeds (MHz): 1: 2800 2: 2800 3: 2800 4: 2800 5: 2800 6: 2800 7: 2800
8: 2800 9: 2799 10: 2800 11: 2802 12: 2800 13: 2800 14: 2800 15: 2800 16: 2800 17: 2800 18: 2799 19: 2800 20: 2803
21: 2799 22: 2804 23: 2800 24: 2800 25: 2798 26: 2800 27: 2800 28: 2800 29: 2802 30: 2800 31: 2800 32: 2800
33: 2800 34: 2800 35: 2800 36: 2800 37: 2800 38: 2800 39: 2800 40: 2800
Увеличиваю приоритет, с помощью nice, для сильно рассредоточенной системы:
Код: Выделить всё
olej@R420:~/2022/Go/probes$ sudo nice -19 ./mtime -b 2
единичное выполнение: 746385311ns | 0.746385 s
число процессоров в системе: 40
Выполнение 2 ветвей...
... потребовало: 1052282711ns | 1.052283s
Код: Выделить всё
olej@R420:~/2022/Go/probes$ sudo nice -19 ./mtime -b 4
единичное выполнение: 988448898ns | 0.988449 s
число процессоров в системе: 40
Выполнение 4 ветвей...
... потребовало: 1050231944ns | 1.050232s
Код: Выделить всё
olej@R420:~/2022/Go/probes$ sudo nice -19 ./mtime -b 8
единичное выполнение: 992893109ns | 0.992893 s
число процессоров в системе: 40
Выполнение 8 ветвей...
... потребовало: 1110658341ns | 1.110658s
Код: Выделить всё
olej@R420:~/2022/Go/probes$ sudo nice -19 ./mtime -b 19
единичное выполнение: 695376305ns | 0.695376 s
число процессоров в системе: 40
Выполнение 19 ветвей...
... потребовало: 979487630ns | 0.979488s
Код: Выделить всё
olej@R420:~/2022/Go/probes$ sudo nice -19 ./mtime -b 25
единичное выполнение: 959440888ns | 0.959441 s
число процессоров в системе: 40
Выполнение 25 ветвей...
... потребовало: 1393401498ns | 1.393401s
Код: Выделить всё
olej@R420:~/2022/Go/probes$ sudo nice -19 ./mtime -b 40
единичное выполнение: 760297726ns | 0.760298 s
число процессоров в системе: 40
Выполнение 40 ветвей...
... потребовало: 1349117658ns | 1.349118s
Код: Выделить всё
olej@R420:~/2022/Go/probes$ sudo nice -19 ./mtime -b 80
единичное выполнение: 641925681ns | 0.641926 s
число процессоров в системе: 40
Выполнение 80 ветвей...
... потребовало: 2478083613ns | 2.478084s
Код: Выделить всё
olej@R420:~/2022/Go/probes$ sudo nice -19 ./mtime -b 120
единичное выполнение: 625304809ns | 0.625305 s
число процессоров в системе: 40
Выполнение 120 ветвей...
... потребовало: 3618422589ns | 3.618423s
Код: Выделить всё
olej@R420:~/2022/Go/probes$ sudo nice -19 ./mtime -b 160
единичное выполнение: 637959344ns | 0.637959 s
число процессоров в системе: 40
Выполнение 160 ветвей...
... потребовало: 4624825501ns | 4.624826s
Код: Выделить всё
olej@R420:~/2022/Go/probes$ sudo nice -19 ./mtime -b 200
единичное выполнение: 635790957ns | 0.635791 s
число процессоров в системе: 40
Выполнение 200 ветвей...
... потребовало: 5778834978ns | 5.778835s
В последнем случае мы наблюдаем как 200 параллельных ветвей разделяют мощности 40 процессоров.
Время выполнения
многих ветвей (длительностью 1с) в сумме - пропорционально кратности
числа ветвей числу процессоров (40).
P.S. Конечно, времена несколько "гуляют", могут быть выбросы и показаны только средние результаты ... но даже там где "выпадает" (а это есть как в плюс, так и в минус), это происходит незначительно.
P.P.S. Это связано с особенностями диспетчирования потоков в системе Linux ( O(1) ), и несколько специфичным толкованием в Linux понятия приоритетов и nice... Более точно можно это посмотреть можно запуская программу с
приоритетом реального времени (chrt -
редкие полезные команды)
Код: Выделить всё
olej@R420:~/2022/Go/probes$ sudo nice -19 ./mtime -b 1000
единичное выполнение: 632881435ns | 0.632881 s
число процессоров в системе: 40
Выполнение 1000 ветвей...
... потребовало: 28299636371ns | 28.299636s
28,299636÷(1000÷40) = 1,132 - что лишний раз подтверждает описываемую модель с высокой точностью: 1000
параллельных ветвей распределяются по 40 процессорам в среднем по 25 штук на процессор, выполняются на каждом процессоре
последовательно, и выполняются (в среднем) в те же 25 раз длиннее.