Методика тестирования
Результаты тестирования
Выводы

На производительность ПК влияют все его компоненты, причем во многих случаях наиболее узким местом являются периферийные устройства. Например, если у вас модем на 2400 или даже на 28 800 бит/с, замена процессора 486 на Pentium не повлечет ускорения получения информации из Internet.

О производительности ПК написано немало статей, но вышеприведенное рассуждение о модеме в них нужно еще поискать. И не потому, что их авторам это неизвестно. Производительность персонального компьютера на Западе (большинство статей о тестировании - переводные, а если и не переводные, то наши соотечественники изо всех сил стараются "не отставать" и пишут в духе западных публикаций) понимается гораздо уже, чем у нас в России. Об особенностях этого феномена лучше всего послушать сатирика Михаила Задорнова. Что же касается компьютерной тематики, то если во всем мире научные расчеты принято проводить на машинах Cray, синтез и обработку изображений - на Sun или SGI, а для офисных приложений использовать платформы Intel или Apple, то в России для всего многообразия применений, как правило, используются одни и те же - "совместимые". А раз так, то статьи, в которых подразумевается исключительно офисное использование "писишек", могут либо вообще не нести какой-либо полезной информации для многих отечественных пользователей, либо попросту вводить их в заблуждение.

Для офисных приложений характерно интенсивное использование видеосистемы и жесткого диска, поэтому производительность системы процессор - ОЗУ не очень сильно влияет на быстродействие всего ПК. В частности, использование графического ускорителя может оказаться полезнее увеличения пропускной способности системной шины, а расширение оперативной памяти - эффективнее увеличения тактовой частоты процессора (так как уменьшается количество обращений к диску). Однако часто наиболее критичной оказывается именно вычислительная подсистема, куда помимо ЦП и ОЗУ следует отнести и системную шину, часть характеристик которой определяется набором микросхем (chipset), установленным на системной плате.

Еще одним элементом чисто отечественной специфики является то, что, например, процессор Pentium-166, предназначенный для работы с 66-МГц системной шиной, вам могут либо "разогнать" до 225 МГц, либо установить на плату, шина которой работает на недокументированной тактовой частоте 83 МГц. О надежности и безопасности подобной вычислительной системы разговор отдельный, нас же интересует, как это может повлиять на ее производительность.

Команды современного микропроцессора фирмы Intel или совместимого с ним принято делить на команды процессора - логические, управляющие, команды целочисленной арифметики и т. д., и команды сопроцессора (Floating Point Unit, FPU) - в основном арифметические и тригонометрические операции с вещественными числами (числами с плавающей запятой). Появившийся третий вид команд - MMX - мы рассматривать не будем. Деление команд на два подмножества связано с тем, что на протяжении длительного времени сопроцессор являлся факультативным оборудованием (в том числе и для процессора 486SX). Большая часть офисных программ его не использовала, кроме электронных таблиц, да и тогда объем вычислений был незначителен. Считалось, что 95% программ не используют сопроцессор. Исключение составляли лишь научные программы и графические пакеты типа 3D Studio. В играх сопроцессор до недавнего времени не задействовался - во-первых, для спрайтовой мультипликации в этом не было необходимости, а во-вторых - чтобы не лишать удовольствия поиграть владельцев машин на базе процессоров 386 и 486SX и не уменьшать за их счет рынок продаж. Во многих же современных играх, где действие ведется от первого лица, а изображение на экране просчитывается с учетом перспективы, сопроцессор (теперь уже в обязательном порядке входящий в состав ЦП) нужен в первую очередь в связи с необходимостью использования тригонометрических функций.

В тех приложениях, где компьютер работает в качестве "числодробилки", т. е. во всех трех обозначенных ранее областях применения, наличие и производительность сопроцессора играют весьма существенную роль.

Напомним, что все современные процессоры, начиная с 486DX2-50 и Pentium-75, работают с умножением частоты. Это значит, что системная шина и все устройства, установленные на системной плате (кроме подключенных к внешней шине: PCI, ISA и т. д. - у них своя частота), работают на одной тактовой частоте, а ЦП - на другой. Стандартными частотами системной шины для продукции фирмы Intel являются 50, 60 и 66 МГц. Процессоры других фирм (Cyrix и AMD) используют еще 55 и 75 МГц. Системную плату, шину которой можно настроить на частоту 75 МГц, как правило, можно заставить работать и на 83 МГц. Частота системной шины умножается внутри процессора на один из следующих коэффициентов: 1 1/2, 2, 2 1/2, 3 или 3 1/2, отсюда и получается все многообразие тактовых частот процессора. Частота 50 МГц используется только для процессора 75 МГц, для остальных применяется 60 МГц (90, 120, 150, 180) или 66 МГц (100, 133, 166, 200, 233). Мы будем говорить только о процессорах Intel, так как продукция других фирм хотя и превосходит изделия Intel при работе с целыми числами и на 16-разрядных приложениях, уступает им в 32-разрядных и особенно в операциях с плавающей запятой, что как раз и представляет для нас основной интерес (впрочем, для офисных приложений процессоры "третьих" фирм вполне конкурентоспособны). Компании Cyrix и AMD заслуживают упоминания лишь потому, что они существенно расширили диапазон частот системной шины.

Итак, если процессор и встроенный в него кэш первого уровня работают, скажем, на частоте 166 МГц, то кэш второго уровня, установленный на системной плате, работает на частоте системной шины, т. е. на 66 МГц. Что касается ОЗУ, то оно хотя и работает на той же частоте, не может выдать данные процессору за один такт, продолжительность которого, как нетрудно подсчитать, равна 1/66 000 000 с (15 нс), так как имеет время доступа 60 или 70 нс. Следовательно, обращаясь к оперативной памяти, процессор вынужден ждать несколько тактов. Собственно, для уменьшения таких задержек и необходим кэш второго уровня.

В приведенном примере для получения тактовой частоты процессора 166 МГц частота системной шины была умножена в 2,5 раза. Однако ту же самую частоту процессора можно получить, умножая частоту шины 55 МГц на 3 или 83 МГц на 2. Так как же зависит вычислительная мощь ПК на базе процессоров Pentium и Pentium MMX от тактовой частоты процессора, частоты системной шины, характеристик установленной памяти? Для ответа на этот вопрос были протестированы несколько машин. Две из них (одна на процессоре Pentium, другая - на Pentium MMX) испытывались при различных установках частоты системной шины и коэффициента умножения частоты.

Методика тестирования

Наибольший интерес для нашей задачи представляют программы, использующие инструкции сопроцессора. Классическим тестом в этом случае является программа Whetstone, написанная на языке высокого уровня. Она имитирует "среднестатистическую" научную программу начала 70-х годов и первоначально была написана на Фортране, затем появились и версии на языке Си. К ее недостаткам, с современной точки зрения, можно отнести отсутствие процедур обработки массивов. В связи с тем что абсолютный показатель производительности, определяемый этой программой, очень сильно зависит от используемого компилятора (разница достигает четырех раз), при тестировании были использованы три версии этой программы, а все результаты были отнормированы.

Кроме классического контрольного задания были использованы еще две тестовые программы. Первая связана с решением системы дифференциальных уравнений в частных производных методом конечных разностей. Здесь в основном используются работа с массивами и арифметические операции над числами с плавающей запятой. Так как в программе происходит интенсивный обмен с памятью, а память в современных компьютерах кэширована, в тестировании использовались три варианта программы, различающиеся размером массивов: 40 Кбайт, 400 Кбайт и 4 Мбайт. Вторая программа - вычисление оптических коэффициентов. В ней интенсивно используются тригонометрические функции, что роднит ее с программами генерации трехмерных изображений и расчета перспективы в играх. Эта программа также была представлена в двух вариантах - с использованием 16- и 32-разрядного компиляторов.

Следующая группа тестов - программы, работающие с "командами процессора", т. е. со всеми командами, не использующими числа с плавающей запятой (и инструкции MMX). В их число вошли классический тест Dhrystone, три программы компрессии данных (архиваторы) и две программы поиска простых чисел методом "решета Эратосфена".

Процессы компрессии/декомпрессии широко используются при работе с графикой, в том числе в играх, заставках и при выводе анимации. Программа "решето Эратосфена" демонстрирует интенсивную работу с памятью при наличии простейших арифметических операций и команд управления. По указанным выше причинам также использовались два варианта этого теста - с массивами объемом 3 Мбайт и 3 Кбайт. В первом случае производилась реальная работа с ОЗУ, а во втором - лишь с внутренним кэшем процессора.

Еще одна группа тестов призвана выявить быстродействие памяти "в чистом виде", когда арифметико-логическое устройство процессора простаивает. Это строковые операции: запись данных в память, чтение из памяти и пересылка между различными областями памяти. Такие операции часто используются для отображения на экране заранее сформированного в оперативной памяти изображения. В реальных программах удельный вес таких операций, как правило, незначителен, но в нашем исследовании они представляют интерес как предельный случай работы с памятью (в дальнейшем будем называть эти тесты программами работы с памятью). Для минимизации влияния кэша был выбран 3-Мбайт размер области памяти.

Погрешность большинства используемых тестов лежала в пределах ?0,2-1,5%, тестов с архивацией - до ?2-2,5%, погрешность теста Dhrystone точно не известна, но находится примерно на порядок ниже.

Ни в одном из тестов не использовались специфические команды MMX.

Поскольку результаты, полученные при тестировании, неоднородны (собственно производительность, выраженная в каких-либо единицах; производительность в сравнении с определенным эталоном; время, в течение которого программа выполняла ту или иную работу), а также для более наглядного сравнения при небольших изменениях величин все данные были отнормированы. За 100% в каждой серии измерений по всем тестам принималась производительность какой-либо системы, а для остальных вычислялись их относительные значения.

По мнению автора, результаты измерения следовало бы приводить с точностью до 0,5%. К сожалению, графическое представление данных не позволяет достичь такой точности. Поэтому во избежание потерь информации было решено воспользоваться таблицами. После запятой в результатах указаны десятые доли процента, что хотя и лежит за пределами точности измерений, иногда позволяет точнее угадывать тенденции, оказывающиеся нередко в пределах 1-3%. Округлить данные до разумной величины предоставляется самому читателю.

Результаты тестирования

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

Результаты измерения показали, что производительность в этих условиях строго пропорциональна тактовой частоте. Приводить данные в отчете не имело бы смысла, так как все отклонения от 133% и 166% полностью укладываются в погрешность измерения, если бы не два обстоятельства. Во-первых, как говорится, лучше один раз увидеть, чем сто раз услышать, - и вы можете убедиться в справедливости этого. Во-вторых, таблица прекрасно демонстрирует уровень ошибок измерения, знание которого поможет читателю объективно оценить приводимые ниже данные.


В таблицах приняты следующие сокращения:

Fq. CPU - тактовая частота процессора;
Fq. SB - частота системной шины;
# - номер измерения в серии;
Whetst. - тест Whetstone;
SDE 1 - решение системы дифференциальных уравнений при объеме массивов 40 Кбайт;
SDE 2 - то же при объеме массивов 400 Кбайт;
SDE 3 - то же при объеме массивов 4 Мбайт;
Arch. - архивирование (компрессия) данных;
Dhrst. - тест Dhrystone;
Optic - расчет оптических коэффициентов;
RAM W - заполнение (запись) массива памяти размером 3 Мбайт;
RAM R - чтение из массива размером 3 Мбайт;
RAM T - пересылка данных из одной 1,5-Мбайт области памяти в другую;
S 3M - программа "решето Эратосфена" с массивом 3 Мбайт;
S 3K - то же с массивом 3 Кбайт.

Таблица 1.
Зависимость производительности от частоты при постоянном коэффициенте умножения.

Fq. CPU, МГц Fq. SB, МГц Whets. SDE 1 SDE 2 SDE 3 Arch. Dhrst. Optic RAM W RAM R RAM T S 3M S 3K
100 50 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0
133 66 132,9 133,1 133,3 133,6 133,3 136,4 132,6 133,0 133,1 132,7 133,1 133,2
166 83 166,5 166,1 166,7 166,4 166,6 175,8 166,4 166,3 166,7 166,5 165,7 166,3

II Во второй серии измерений исследовалось, как влияет на производительность системы изменение тактовой частоты процессора при постоянной частоте системной шины, т. е. при изменении коэффициента умножения частоты. Тесты проводились для двух конфигураций: процессор Pentium, системная плата с набором микросхем 430VX (модель ATC-1020 фирмы A-Trend) и памятью EDO RAM (табл. 2) и Pentium MMX, системная плата с тем же набором микросхем (модель VX1C "Gemini") и памятью SDRAM (табл. 3).

Таблица 2.
Зависимость производительности от тактовой частоты процессора.

Fq. CPU, МГц Whetst. SDE 1 SDE 2 SDE 3 Arch. Dhrst. Optic RAM W RAM R RAM T S 3M S 3K
100 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0
133 133,3 129,7 128,4 122,8 132,7 126,7 132,8 100,0 118,1 102,0 112,8 133,3
166 166,5 155,9 150,0 139,0 164,1 156,7 165,1 100,0 133,5 103,3 119,0 165,8
200 199,8 184,7 174,1 158,1 195,4 183,3 197,4 100,0 144,8 103,3 128,2 200,0

Таблица 3.
Зависимость производительности от тактовой частоты процессора.

Fq. CPU, МГц Whetst. SDE 1 SDE 2 SDE 3 Arch. Dhrst. Optic RAM W RAM R RAM T S 3M S 3K
100 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0
125 125,1 122,9 121,1 116,8 124,7 124,2 125,2 100,2 119,1 100,0 105,6 124,9
150 150,3 145,8 141,5 133,6 148,5 151,5 149,9 100,2 133,1 100,0 115,8 144,9

В первом случае измерения проводились в полном диапазоне коэффициентов умножения частоты и при наиболее характерной частоте системной шины. Во втором случае возникли некоторые ограничения, связанные прежде всего с тем, что тестируемый процессор Pentium MMX был рассчитан на тактовую частоту 166 МГц и "разгонять" его до 180 или 200 просто не было желания, а также с тем, что его не удалось заставить работать с коэффициентом умножения 1,5 вопреки документации на системную плату (впрочем, возможно, это нормальное явление - минимальная тактовая частота процессора MMX подразумевает коэффициент умножения не менее двух).

Программы, не использующие большие массивы памяти, т. е. эффективно задействующие кэш, показали увеличение производительности пропорционально тактовой частоте процессора. Программы работы с памятью, в которых осуществлялась запись, "не заметили" увеличения тактовой частоты. Интересно, что чтение из памяти более производительный процессор выполняет быстрее - здесь не обошлось без влияния внутреннего кэша. По-видимому, он достаточно быстро заполняется через 64-разрядную шину данных, тогда как процессор читает из него 16-битными словами. Сыграло свою роль и то, что чтение осуществлялось из последовательных адресов памяти, что существенно облегчило работу блока управления кэшем.

Увеличение скорости работы программ, активно использующих память, заметно отстает от роста тактовой частоты. Особенно отчетливо эти закономерности видны на примере алгоритма "решето Эратосфена", в котором ведется интенсивная запись в память. Один вариант, целиком помещающийся в кэш, показал рост производительности, пропорциональный увеличению тактовой частоты, другой, работающий с большим массивом, продемонстрировал гораздо более скромные результаты. Кроме того, следует отметить, что в целом тандем Pentium MMX - SDRAM лучше справляется с большими массивами, чем Pentium - EDO RAM.

III Третья серия измерений является антиподом второй. В ней, используя различные частоты системной шины и соответственно различные коэффициенты умножения частоты, устанавливалась одна и та же тактовая частота процессора, а именно 166 МГц. Результаты оказались вполне прогнозируемыми: скорость записи в память была пропорциональна частоте системной шины, для чтения выявилась более слабая зависимость (табл. 4). На скорость выполнения программ, не использующих большие массивы памяти, увеличение частоты не оказало влияния, а для программ, интенсивно работающих с памятью, было видно отчетливое изменение производительности, меньшее, однако, чем изменение частоты.

Таблица 4.
Зависимость производительности от частоты системной платы.

Fq. SB, МГц Whetst. SDE 1 SDE 2 SDE 3 Arch. Dhrst. Optic RAM W RAM R RAM T S 3M S 3K
55 99,0 97,9 96,5 94,6 99,6 100,0 98,9 82,7 91,6 82,4 91,0 99,0
66 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0
83 100,1 101,6 103,5 107,2 100,5 105,5 100,2 125,0 104,5 124,9 118,8 100,0

IV Четвертая серия измерений посвящена выявлению различий в производительности процессоров Pentium и Pentium MMX, а также влиянию типа памяти (EDO RAM и SDRAM) на общую производительность системы. К сожалению, организационные трудности ограничили число измерений, поэтому табл. 5 имеет структуру, несколько отличающуюся от предыдущих таблиц. Если ранее в каждой таблице присутствовала базовая строка, относительно которой приводились данные в остальных строках (все цифры в базовой строке - 100,0, поэтому приводить ее в общем-то необязательно), то в пятой таблице для каждой из строк базовая - своя. Чтобы сохранить единообразие, следовало бы вместо одной таблицы привести три, из двух строк каждая. Вместо этого три базовые строки были удалены, а оставшиеся строки, несущие информацию, были объединены в одну таблицу.

Таблица 5.
Зависимость производительности от типа процессора и памяти.

# Whetst. SDE 1 SDE 2 SDE 3 Arch. Dhrst. Optic RAM W RAM R RAM T S 3M S 3K
1 98,7 92,3 92,7 91,6 - - - - - - - -
2 98,3 89,6 87,9 85,1 88,4 85,5 96,8 99,7 77,0 89,6 96,0 100,0
3 98,3 91,7 90,9 87,4 89,0 84,4 97,6 99,7 81,6 88,9 95,5 100,4

В первой строке таблицы приводится отношение производительности процессора Pentium к производительности процессора Pentium MMX, работающих на одной и той же системной плате с частотой шины 83 МГц, с памятью типа SDRAM. Процессоры работали на тактовой частоте 166 МГц. Во второй - отношение производительностей систем в следующих конфигурациях: Pentium + EDO RAM / Pentium MMX + SDRAM при тактовой частоте процессора 166 МГц и частоте шины 66 МГц. В третьей - конфигурации, аналогичные второй, но частота процессоров снижена до 133 МГц. Третий вариант ближе к первому, так как в нем тот же коэффициент умножения, а как мы видели выше, в этих условиях сохраняется пропорциональность между тактовой частотой и производительностью вычислительной системы.

Процессор Pentium MMX оказался на 1,5-2,5% быстрее простого Pentium при вычислениях с плавающей запятой. Кроме того, еще раз подтвердилось, что Pentium MMX лучше работает с длинными массивами (по-видимому, это связано с удвоенным размером внутреннего кэша), что дает еще 6-7% выигрыша для вычислений с плавающей запятой и до 15% - на целочисленной арифметике. Разница между SDRAM и EDO RAM не так заметна; при использовании SDRAM прирост производительности лежит в пределах 0-5% для реальных задач различных типов.

V В пятой серии измерений сравнивалось влияние памяти разных типов (EDO RAM, обычная FPM RAM), а также наборов микросхем (i430FX и i430VX). Для сравнения использовались системы на процессоре Pentium-100. В первой строке табл. 6 - базовая система с набором микросхем i430VX и обычной (FPM RAM) памятью, во второй - отношение производительности такой же системы с памятью EDO RAM к базовой, а в третьей - производительность системы, собранной на основе набора микросхем i430FX с обычной памятью, по отношению к той же базовой. Программы, не использующие большие массивы, "не почувствовали" никакой разницы, максимальное увеличение производительности за счет использования EDO RAM по сравнению с обычной составило 4%, а снижение при использовании устаревшего набора микросхем - в два раза. Впрочем, возможно, что это особенность не набора микросхем, а конкретной системной платы.

Таблица 6.
Сравнение производительности для разных типов памяти и набора микросхем для Pentium-100.

# Whetst. SDE 1 SDE 2 SDE 3 Arch. Dhrst. Optic RAMW RAMR RAMT S 3M S 3K
1 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
2 100.0 100.0 101.8 102.3 99.1 - 101.1 102.1 107.8 115.3 104.0 100.3
3 100.0 91.0 87.7 75.2 96.7 100.0 100.1 45.9 83.8 55.9 45.9 100.0

Теперь несколько слов об особенностях функционирования памяти. На системной плате присутствует, как правило, не менее двух банков памяти, при этом для функционирования ПК достаточно заполнения лишь одного из них. Главным назначением второго банка является обеспечение, с одной стороны, большей свободы в выборе объема устанавливаемой памяти, а с другой - возможности увеличения объема памяти без замены, простым заполнением второго банка. Кроме того, при заполнении обоих банков одинаковыми объемами памяти становится возможным чередование чтения данных из них, за счет чего можно уменьшить задержки при чтении. Таким образом, заполнение обоих банков должно способствовать ускорению работы приложений, интенсивно использующих ОЗУ.

Первая строка табл. 7 соответствует системе на 100-МГц процессоре Pentium с одним банком памяти, заполненным стандартной FPM RAM с временем доступа 70 нс. Во второй строке - данные для такой же системы, но с более быстрой 60-нс памятью. В третьей - та же система, у которой были заполнены памятью с временем доступа 70 нс оба банка. Увеличение быстродействия памяти на 15%, как и следовало ожидать, сказалось лишь на работе программ, интенсивно использующих большие массивы данных, да и то лишь в пределах нескольких процентов.

Таблица 7.
Сравнение производительности при разных конфигурациях памяти.

# Whetst. SDE 1 SDE 2 SDE 3 Arch. Dhrst. Optic RAM W RAM R RAM T S 3M S 3K
1 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0 100,0
2 100,0 100,0 101,0 103,0 100,0 100,0 99,5 100,4 111,1 105,8 109,7 100,0
3 100,2 103,0 104,0 108,0 100,0 - 99,7 93,4 120,3 99,6 114,5 100,6

Когда заполнены оба банка памяти, программы работы с памятью показывают несколько странные результаты, но все вычислительные программы, работающие с большими массивами, демонстрируют повышение производительности для обработки целых чисел - до 15%, а для чисел с плавающей запятой - до 8%.

Выводы

1. Тактовая частота процессора оказывает определяющее воздействие на производительность системы для большинства приложений.

2. Процессор Pentium MMX оказался быстрее процессора Pentium в операциях с плавающей запятой в среднем на 2%. Кроме того, при использовании программ, интенсивно работающих с памятью, выигрыш в производительности увеличивается еще на 6-7%. Для программ целочисленной арифметики выигрыш может составлять от 0 до 15% в зависимости от того, как программа работает с памятью. (Результаты получены на тестах, не использующих специфические инструкции MMX.)

3. Все характеристики, связанные с изменением тактовой частоты системной шины, а также типом и характеристиками ОЗУ, оказывают влияние лишь на работу программ, интенсивно использующих большие массивы данных. То же самое можно сказать и о типе используемого набора микросхем. К сожалению, отделить влияние набора микросхем от влияния остальных особенностей системной платы можно лишь на основе статистически значимого числа измерений, выполненных на различных системных платах, поэтому сделать какие-либо количественные оценки на основе имеющихся данных не представляется возможным. Остальные характеристики по степени значимости расположились в следующем порядке:

  • заполнение обоих банков памяти - самый эффективный способ повысить производительность вычислительной системы;
  • использование 60-нс памяти, а не 70-нс;
  • тип используемой памяти: лучше всего SDRAM, затем EDO RAM, самый худший вариант - обычная FPM RAM. Хотя сравнение SDRAM с EDO RAM и EDO RAM с обычной FPM RAM не дает впечатляющих цифр, замена обычной FPM RAM на SDRAM может оказаться достаточно эффективной;
  • увеличение частоты системной шины. Хотя при увеличении частоты в полтора раза наблюдается весьма ощутимый прирост производительности, в реальном случае частоту, как правило, можно увеличить не более чем на 25%.
  • Автор выражает благодарность Виктору Кузовлеву, а также сотрудникам фирмы "НЭП Электроникс" Валерию Божину и Андрею Пономаренко за предоставленную технику и помощь при проведении тестирования.


    Сергей Андреевич Андрианов - к.т.н., FIDO: 2:50/430.40@fidonet
    1071