RSS    

   Реферат: Тест на быстродействие микропроцессора

     mov t1,bx

     end;

for i:=1 to N do

proisv:=proisv*i;

     asm

     in al,40h

     mov bl,al {Конечное количество тиков}

     in al,40h

     mov bh,al

     mov t2,bx

     end;

Time1:=t1/(65536*18.2);

time2:=t2/(65536*18.2);

writeln('Время выполнения умножения на Pascal: ',(time2-time1):6:12);

end;

Procedure Mul_Asm(N:word);

var Proisv:integer;

Begin

t1:=0;

t2:=0;

     asm

     in al,40h

     mov bl,al

     in al,40h {Считываем начальное значение тиков от таймера}

     mov bh,al

     mov t1,bx

     xor ax,ax

     xor bx,bx

     @@q:      {Выполняем сложение}

     inc dx

     mul dx

     loop @@q

     in al,40h

     mov bl,al

     in al,40h {Конечное количество тиков}

     mov bh,al

     mov t2,bx

     end;

Time1:=t1/(65536*18.2);

time2:=t2/(65536*18.2);

writeln('Время выполнения умножения на Assembler: ',(time2-time1):6:12);

end;

Begin

clrscr;

{Определяем вид операции}

textcolor(11);

Writeln('Сделайте выбор операции и нажмите клавишу ENTER:');

Writeln('1) Сложение');

Writeln('2) Умножение');

Readln(vid);

textcolor(10);

         Case vid of

         1: begin

            write('Введите сумму ряда, не более 2-х байт (65535: )');

            Readln(NN);

            Writeln;

            textcolor(3);

            Add_Pascal(NN);

            Add_Asm(NN);

            end;

         2: begin

            write('Введите произведение ряда, не более 2-х байт (65535: )');

            Readln(NN);

            Writeln;

            textcolor(3);

            Mul_Pascal(NN);

            Mul_Asm(NN);

            end;

         end;

readln;

End.


§7. Описание программы

Программа написана на алгоритмическом языке Pascal. Состоит из двух блоков. В каждом блоке две процедуры: первая – это выполнение операции на языке Pascal, а вторая – выполнение этой же операции на языке Assembler.

Первый блок.

Состоит из двух процедур, которые выполняют сложение на языке Pascal и Assembler. Производится суммирование ряда чисел. Измерение времени происходит с помощью микросхемы таймера 8253. Сначала считываем начальное число тиков, затем выполняем операцию и снова считываем число с микросхемы. Разница, разделенная на произведение 65535*18,2 и будет временем выполнения операции.

     asm

     in al,40h

     mov bl,al

     in al,40h {Считываем начальное значение тиков от таймера}

     mov bh,al

     mov t1,bx

     end;

{Выполняем операцию}

     asm

     in al,40h

     mov bl,al

     in al,40h {Конечное количество тиков}

     mov bh,al

     mov t2,bx

     end;

Time = t2-t1/(65536*18.2); {ВРЕМЯ ВЫПОЛНЕНИЯ ОПЕРАЦИИ}

Второй блок.

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

 

§8. Экспериментальные данные

 

Для проведения эксперимента вводятся числа:

10;100;1000;5000;10000;15000;20000;25000;30000;35000;50000;60000;65000;

Данные вводятся как для суммирования ряда, так и для вычисления факториала.


§9. Полученные результаты

Все вычисления выполнялись на микропроцессоре AMD Athlon 1000 MHz

Средняя температура процессора при вычислении 64 °С

Вычисление суммы ряда.

СЛОЖЕНИЕ

Введенное знвчение

Pascal

Assembler

10

1,34143E-05 1,84447E-05

100

1,67679E-05 1,34143E-05

1000

4,19198E-05 2,17983E-05

5000

0,000157618 5,19805E-05

10000

0,000301822 9,22234E-05

15000

0,000444349 0,000132466

20000

0,00059023 0,000171033

25000

0,000734434 0,000211276

30000

0,000875284 0,000249842

35000

0,001021165 0,000290085

50000

0,001483959 0,000410814

60000

0,001742185 0,00050136

65000

0,001884712 0,000528189

Вычисление факториала.

УМНОЖЕНИЕ

Введенное знвчение

Pascal

Assembler

10

1,50911E-05 1,34143E-05

100

2,85054E-05 1,34143E-05

1000

0,000159295 2,51519E-05

5000

0,000749525 7,2102E-05

10000

0,001482282 0,000132466

15000

0,002216716 0,000191154

20000

0,002994747 0,000251519

25000

0,003687261 0,000338712

30000

0,00443511 0,000368894

35000

0,005157806 0,000429258

50000

0,007403028 0,000608675

60000

0,00887525 0,000727727

65000

0,009579501 0,000786415


§10. Выводы

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

Проанализируем для каждого из двух случаев:

Сложение.

При применении языка Assembler рост производительности наблюдается от 10 итераций до 25000 и дальше стремиться к постоянному значению равному ~3,7. Даже такое увеличение производительности заметно скажется на работе некоторых приложений, использующих большие вычисления.

Умножение.

С умножением дело обстоит немного иначе: производительность резко увеличивается (от 1 до 10,3) при изменении числа итераций от 10 до 5000 и дальше выравнивается, стремясь к постоянному значению. Можно заметить, что даже при небольшом объеме вычисления наблюдается колоссальный рост производительности. По сравнению со сложением, производительность гораздо выше, хотя время выполнения этих операций в отдельности имеет несущественное различие, но при выполнении этих операций в цикле лидирующее положение занимает умножение.

При имеющихся у нас данных мы можем смело сделать выводы, что компилятор языка Pascal (и многих других языков программирования) расходует ресурсы микропроцессора неэкономно, тратя много времени на различные «лишние» действия, которые приводят, как мы заметили, к заметному снижению производительности.

Проанализируем порядок выполнения операции на языке Pascal, чтобы найти так называемые «лишние» действия.

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

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

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

Сделаем окончательный вывод: на современных компьютерах, которые имеют почти безграничный потенциал для вычисления при использовании обычного программного обеспечения, применение описанного метода увеличения производительности скажется не так заметно, как хотелось бы. Но в недалёком будущем сложность программных продуктов будет расти, повысятся требования ко времени выполнения поставленных перед ПО задач, тогда производители языков программирования, в частности компиляторов, будут обязаны обращать внимание на такие тонкости как экономия времени при вычислении, будут экономнее и более качественно использовать ресурсы микропроцессорного оборудования.


§11. Список литературы

1)   Юров В. «Assembler». Учебник — СПб.: Издательский дом «Питер», 2001 г. 624с.

2)   Юров В. «Assembler: специальный справочник» — СПб.: Издательский дом «Питер», 2001 г. 496с.

3)   Корнеев В.В., Киселёв А.В. «Современные микропроцессоры» — М. «Нолидж», 1998г. — 240с.

4)   Джордейн Р. «справочник программиста персональных компьютеров тип IBM PC, XT и AT: Пер. с англ. /Предисл. Н. В. Гайского. — М.: «Финансы и статистика», 1991 г. —544 с.

5)   Пирогов В. Ю. «Assembler. Учебный курс». — М.: «Нолидж», 2001 г. — 848с.


Страницы: 1, 2, 3, 4, 5


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.