А.А. Жевак
ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ БК, И НЕ ТОЛЬКО...
Для оценки производительности ЭВМ в настоящее время существует очень много самых различных тестов. Эти тесты с успехом применяются не только для оценки эффективности какой-то отдельно взятой ЭВМ, но также и для сравнения ЭВМ разных типов друг с другом. Они же служат и для сравнения эффективности работы разных программ на одной и той же ЭВМ.
В данной статье публикуются данные, полученные в результате тестирования многих ЭВМ с помощью одной и той же программы приведенной в [1]:
100 REM
110 PRINT "НАЧАЛО"
120 К=0
130 DIM M(5)
140 К=К+1
150 А=К/2*3+4-5
160 GOSUB 230
170 FOR L=l TO 5
180 M(L)=A
190 NEXT L
200 IF K<1000 THEN 140
210 PRINT "КОНЕЦ"
220 END
230 RETURN
Для читателя, знающего Бейсик, эта программа не покажется сложной. Она не занимается решением какой-то серьезной задачи, а выполняет ряд типовых действий, встречающихся в реальных программах (арифметические действия, вызов подпрограмм, организация циклов и т.п.), что дает возможность получить некоторые усредненные данные о скорости выполнения программ.
В этой тестовой программе не содержится специфических операторов, поэтому она выполняется, на всех типах ЭВМ и на всех версиях языка Бейсик.
Для того, чтобы сравнить производительность интерпретирующих и компилирующих языков программирования, можно переписать эту программу на "диалекте" соответствующего языка. Например, чтобы определить производительность "Borland C++", исходный текст программы преобразится так:
#include <process.h>
#include <conio.h>
void subr(void);
void main(void)
{
int k,l;
float a,m[5];
cputs("\nНачало");
k=0;
do
{
k=k+l;
a=k/2*3+4-5;
subr();
for (1=0; 1<5; 1++) m[l]=a;
} while(k<1000);
cputs("\nКонец");
exit(0);
}
void subr(void)
{
return;
}
Для тестирования "Turbo Pascal" исходный текст будет таким:
Program test(output);
Procedure Subr;
Begin
End;
Var
k,l: integer;
a: real;
m: array[1..5] of real;
Begin
writeln("Начало");
k:=0;
repeat
k:=k+l;
a:=k/2*3+4-5;
Subr;
for l: = l to 5 do
m[l]:=a;
until k<1000;
writeln("Конец");
End.
Как видно из приведенных листингов, логика работы программы во всех трех ее "воплощениях" неизменна.
Анализ полученных данных показывает, что самым медленным является калькулятор, а самым быстрым - "Turbo Pascal" на IBM PC/AT. Время решения одной и той же задачи на протестированных средствах вычислительной техники может различаться в 1000 и более раз. Так, например, если на IBM PC/AT на расчет какой-либо задачи уходит почти весь рабочий день (а такой сложности задачи для НИИ самое привычное дело), то дома на калькуляторе вам придется решать эту же задачу... сколько бы вы думали? — год!!! Не верите — посчитайте сами!
Но самым любопытным оказалось, что скорость счета на такой невзрачной с виду ЭВМ как БК-0010 почти в полтора раза выше, чем на... IBM PC/XT. Интересно и то, что IBM PC/AT решает "задачки" только в 5-6 раз быстрее IBM PC/XT.
Еще один важный вывод из полученных данных: при очень сложных задачах с большим количеством вычислений лучше использовать компиляторы. Применительно к IBM PC такой переход позволит получить ответ в 20-80 раз быстрее. Если же задача небольшая, то имеет смысл решать ее в среде интерпретатора: ведь в интерпретирующих языках нет потери времени на компиляцию, и поэтому программа по окончании ввода будет сразу готова к работе. Впрочем, право выбирать, что необходимо для решения задач, всегда остается за пользователем и зависит от его реальных технических возможностей и знаний.
В заключение несколько слов о языке Си. Судя по таблице, скорость счета в "Borland C++" ниже чем в "Turbo Pascal" раза в четыре, но это не следует (как и другие данные таблицы) принимать за эталон скорости. Дело в том, что реальные задачи разные, а тестировалась только одна. Язык Си - это язык управляющий, а Паскаль - вычислительный. В Си легко и просто написать программу (драйвер) для управления оборудованием или устройством, и выполняться такая программа будет очень быстро.
Очевидно, не зря многие операционные системы, написанные на Ассемблере, заново переписывают на Си. Делать же подобное на Паскале нерентабельно.
В следующей таблице приводятся результаты тестирования различных ЭВМ.
Время, [сек] | Тип ЭВМ и условия проведения тестирования |
0.0635 | IBM PC/AT, -12 МГц, Turbo Pascal v.6.0 (*) |
0.2378 | IBM PC/AT, 12 МГц, Borland C++ v.2.0 (*) |
4.9 | IBM PC/AT, 8 МГц, BASICA |
5.0 | IBM PC/AT, 8 МГц, TurboBasic (в режиме интерпретатора) |
5.0 | IBM PC/AT, 12 МГц, GWBASIC |
7.5 | IBM PC/AT, 8 МГц, GWBASIC |
24.5 | БК-0010.01, Бейсик |
32.2 | IBM PC/XT, 4.77 МГц, BASICA |
37 | IBM PC |
46 | Apple IIe |
49 | Искра-226 |
51 | Tandy Color |
56 | Электроника НЦ-80-20 |
92 | "Радио-86РК", 1.77 МГц, Бейсик "Микрон" |
101 | Epson HX-20 |
104 | СМ-1800 |
> 1200 | Casio FX-702P (калькулятор) |
8400 | "Электроника МК-52"(**) |
9900 | "Электроника БЗ-34"(**) |
Примечания:
(*): измерение времени выполнения программы производилось с помощью специальной программы "Turbo Profiler".
(**): от редакции: эти данные почерпнуты из статьи В. Хмелюка "Самый маленький и самый персональный" //Вычислительная техника и ее применение, N2. — М.: Знание, 1992.
Литература:
1.Черемных C.В.. Гиглавый А.В., Поляк Ю.Е. От микропроцессоров к персональным ЭВМ. - М.: Радио и связь, 1988. Стр.93
Распознавание и преобразование в гипертекст: Владислав М. Антонов
2004 г.