Комментарии
1. Реализация, использующая алгоритм бинарного дерева (программа sortBT), интенсивно использует процессор; кроме того, память в ней распределяется отдельно для каждой записи.
2. Применение отображения файлов и чтение файла в предварительно выделенный буфер обеспечивают примерно одинаковую производительность, но в этих тестах отображение файлов ничем особенным себя не проявило, а в некоторых случаях даже значительно ухудшало результаты. Вместе с тем, в ряде случаев как sortFL, так и sortHP обеспечивали превосходные результаты.
3. Суммарное пользовательское и системное время иногда превышает истекшее время, даже если используется только один поток.
4. Программа sortMT демонстрирует возможности SMP-систем. В некоторых случаях использование дополнительных потоков приводило к повышению производительности и на однопроцессорных системах.
Таблица В.4. Показатели производительности программ сортировки файлов
|
ЦП |
Pentium LT |
Celeron LT |
Xeon |
4×Xeon |
ОС |
W2000 |
XP |
W2000 |
W2000 |
Файловая система |
NTFS |
NTFS |
NTFS |
NTFS |
sortBT |
Реальное время |
- |
9,61 |
- |
- |
Пользовательское время |
- |
1,84 |
- |
- |
Системное время |
- |
7,44 |
- |
- |
sortFL |
Реальное время |
11,15 |
0,78 |
1,74 |
5,38 |
Пользовательское время |
4,81 |
0,41 |
0,26 |
5,19 |
Системное время |
0,15 |
0,09 |
0,09 |
0,02 |
sortHP |
Реальное время |
1,76 |
0,34 |
1,52 |
1,30 |
Пользовательское время |
1,62 |
0,22 |
0,15 |
1,28 |
Системное время |
0,11 |
0,05 |
0,03 |
0,04 |
sortMM |
Реальное время |
0,99 |
1,44 |
1,92 |
1,39 |
Пользовательское время |
0,31 |
0,18 |
0,15 |
0,38 |
Системное время |
0,68 |
0,47 |
0,36 |
1,03 |
sortMT1 |
Реальное время |
3,18 |
3,58 |
6,80 |
0,14 |
Пользовательское время |
0,01 |
0,95 |
0,01 |
0,05 |
Системное время |
0,46 |
0,16 |
0,16 |
0,11 |
sortMT2 |
Реальное время |
2,10 |
1,22 |
6,70 |
0,13 |
Пользовательское время |
0,01 |
1,05 |
0,01 |
0,02 |
Системное время |
0,40 |
0,16 |
0,16 |
0,13 |
sortMT4 |
Реальное время |
2,20 |
1,49 |
6,22 |
0,13 |
Пользовательское время |
0,01 |
1,18 |
0,01 |
0,12 |
Системное время |
0,16 |
0,15 |
0,16 |
0,09 |
Множество потоков, соревнующихся между собой за обладание единственным ресурсом
Целью этой серии тестов являлось сравнение эффективности различных стратегий реализации функций управления очередями программы 10.4 с использованием программы 10.5 (трехступенчатый конвейер) в качестве тестового приложения. Тесты выполнялись на четырехпроцессорной (Intel Xeon, 1 ГГц) системе Windows 2000 Server с организацией 1, 2, 4, 8, 16, 32 и 64 потоков, но во всех семи случаях каждого потока поручалось выполнение 1000 единиц работы. В идеальном случае можно было бы ожидать линейного увеличения реального времени с увеличением количества потоков, но соревновательность между потоками за право владения единственным мьютексом (или объектом CS) может приводить к нелинейному снижению этого показателя). Обратите внимание, что эти тесты не затрагивают файловую систему.
Использовались шесть различных стратегий реализации, результаты применения которых представлены в отдельных столбцах табл. В.5.
Таблица В.5. Производительность многопоточных реализаций на четырехпроцессорном сервере
К-во потоков |
|
Широковещат.модель |
Широковещат.модель |
Широковещат. модель |
Сигнальная модель |
Сигнальная модель |
Сигнальная модель |
Mtx, Evt |
CritSec, Evt |
Mtx, Evt |
Mtx, Evt |
CritSec, Evt |
Mtx, Evt |
Т/О 5мс |
Т/О 25мс |
SigObjWait |
Т/О неопределен |
Т/О неопределен |
SigObjWait |
1 |
Реальное время |
0,03 |
0,03 |
0,05 |
0,05 |
0,03 |
0,05 |
Пользовательское время |
0,03 |
0,06 |
0,03 |
0,05 |
0,08 |
0,05 |
Системное время |
0,06 |
0,02 |
0,09 |
0,08 |
0,02 |
0,06 |
2 |
Реальное время |
0,14 |
0,27 |
0,09 |
0,08 |
0,06 |
0,08 |
Пользовательское время |
0,13 |
0,05 |
0,14 |
0,17 |
0,11 |
0,08 |
Системное время |
0,11 |
0,06 |
0,16 |
0,09 |
0,11 |
0,17 |
4 |
Реальное время |
0,39 |
0,59 |
0,23 |
0,19 |
0,16 |
0,20 |
Пользовательское время |
0,18 |
0,17 |
0,22 |
0,26 |
0,17 |
0,19 |
Системное время |
0,30 |
0,22 |
0,41 |
0,31 |
0,22 |
0,31 |
8 |
Реальное время |
0,83 |
0,92 |
0,73 |
0,36 |
0,34 |
0,36 |
Пользовательское время |
0,34 |
0,36 |
0,55 |
0,52 |
0,45 |
0,45 |
Системное время |
0,98 |
1,00 |
1,00 |
0,69 |
0,39 |
0,75 |
16 |
Реальное время |
2,42 |
2,30 |
2,38 |
0,75 |
0,69 |
0,75 |
Пользовательское время |
1,17 |
1,31 |
1,22 |
0,81 |
0,81 |
0,88 |
Системное время |
3,69 |
3,05 |
3,39 |
1,45 |
1,08 |
1,33 |
32 |
Реальное время |
7,56 |
7,50 |
7,98 |
1,50 |
1,50 |
1,50 |
Пользовательское время |
3,33 |
3,73 |
2,56 |
1,75 |
1,69 |
1,78 |
Системное время |
12,52 |
10,72 |
11,03 |
3,13 |
2,00 |
2,69 |
64 |
Реальное время |
27,72 |
26,23 |
29,31 |
3,14 |
2,95 |
3,20 |
Пользовательское время |
7,89 |
10,75 |
7,22 |
3,73 |
3,69 |
3,47 |
Системное время |
46,70 |
40,33 |
36,67 |
6,28 |
3,89 |
5,47 |
В комментариях, помещенных вслед за программой 10.4, обсуждаются результаты и разъясняются преимущества различных реализаций, а здесь мы лишь отметим, что результаты для сигнальной модели изменяются пропорционально изменению количества потоков, тогда как в случае широковещательной модели, особенно для вариантов с 32 и 64 потоками, это не так. Можно также видеть, что в случае широковещательной модели система потребляет значительную долю процессорного времени, ибо выполняются, вычисляют предикат и осуществляют немедленный возврат в состояние ожидания множество потоков.
Читать дальше