ProfileCount: различия между версиями

Материал из wikiru.visual-prolog.com

(Новая: Для замера времени выполнения предикатов можно использовать класс '''profile\profileCount'''. Перед его использо...)
 
м
 
(не показано 8 промежуточных версий этого же участника)
Строка 1: Строка 1:
Для замера времени выполнения предикатов можно использовать класс '''profile\profileCount'''. Перед его использованием необходимо добавить опцию компилятора '''/PROFILE''' и перестроить проект. Также необходимо вставить вызовы запускающие профилирование ''''start'''', обычно при инициализации приложения, останова ''''stop'''' и вывода результатов ''''print''''(обычно в конце приложения).
Для измерения времени выполнения предикатов можно использовать класс '''profileCount''' из пакета '''pfc\profile'''. Перед его использованием необходимо добавить опцию компилятора '''/PROFILE''' и перестроить проект. Также необходимо вставить вызовы запускающие профилирование '''start''', обычно при инициализации приложения, останова '''stop''' и вывода результатов '''print''' (обычно в конце приложения).  


Вот типичный пример использования в консольном приложении:


[[Категория:VipPfc]]
<vip>
clauses
    run():-
        console::init(),
        profileCount::start(),       
        try
            главныйПредикат()
        finally       
            profileCount::stop(),
            Out = console::getConsoleOutputStream(),
            profileCount::print(Out)
        end try.
</vip>
 
Для всех предикатов выводится количество их вызовов, а для некоторых и суммарное время выполнения. Следует учесть, что данный инструмент (как впрочем и все) влияет на выполняемую программу (даже если предикат '''start''' не был выполнен). Программа становится больше и выполняется медленней. Это надо учитывать при анализе полученных результатов. {{note|picsize=30|content=Самое главное, не забыть убрать опцию '''/PROFILE''' после, того, как все замеры будут произведены.}} Если модуль построен без опции '''/PROFILE''', то предикат '''start''' не имеет никакого эффекта.
 
 
Пример результат работы:
 
Predicate invocations count information:
    1.                          outputStream::write/0...        1  0.00017656
    2.                        bufferSupport::getBuffer/2        2  0.00014974
    3.                          outputStream::write/0...        1  0.00009526
    4.          outputStream_console::writeToStdDevice/4        2  0.00007683
    5.                              outputStream::flush/0        1  0.00007599
    6.              outputStream_console::bufferFullCB/2        2  0.00006397
    7.                                  list::filter/2->        1  0.00003436
    8.                                      авто::new/1->        3  0.00003241
    9.                            list::getMember_nd/1->        6  0.00002123
  10.                          fileSystem_api::lf_crlf/4        2  0.00002039
  11.    outputStream_console::convertLF2CRLF_ifNeeded/4        2  0.00001062
  12.                                      main::run$1/0        3  0.00000726
  13.                  fileSystem_api::searchLineFeeds/6        2  0.00000698
  14.                                    авто::цена/0->        4  0.00000670
  15.                                stream::getMode/0->        4  0.00000615
  16.                                console::write/0...        1  0.00000615
  17.                                        авто::new/1        3  0.00000475
  18.        fileSystem_api::convertToCRLF_IfNeeded/4->        2  0.00000419
  19.                      console_api::getStdHandle/1->        2  0.00000391
  20.                        fileSystem_api::getSize/2->        2  0.00000363
  21.                        outputSupport::doNotFlush/0        1  0.00000307
  22.                console::getConsoleOutputStream/0->        1  0.00000251
 
 
 
[[Категория:Profile]]

Текущая версия на 14:28, 19 декабря 2007

Для измерения времени выполнения предикатов можно использовать класс profileCount из пакета pfc\profile. Перед его использованием необходимо добавить опцию компилятора /PROFILE и перестроить проект. Также необходимо вставить вызовы запускающие профилирование start, обычно при инициализации приложения, останова stop и вывода результатов print (обычно в конце приложения).

Вот типичный пример использования в консольном приложении:

clauses
    run():-
        console::init(),
        profileCount::start(),        
        try
            главныйПредикат()
        finally        
            profileCount::stop(),
            Out = console::getConsoleOutputStream(),
            profileCount::print(Out)
        end try.

Для всех предикатов выводится количество их вызовов, а для некоторых и суммарное время выполнения. Следует учесть, что данный инструмент (как впрочем и все) влияет на выполняемую программу (даже если предикат start не был выполнен). Программа становится больше и выполняется медленней. Это надо учитывать при анализе полученных результатов.

Если модуль построен без опции /PROFILE, то предикат start не имеет никакого эффекта.


Пример результат работы:

Predicate invocations count information:
   1.                           outputStream::write/0...        1   0.00017656
   2.                         bufferSupport::getBuffer/2        2   0.00014974
   3.                           outputStream::write/0...        1   0.00009526
   4.           outputStream_console::writeToStdDevice/4        2   0.00007683
   5.                              outputStream::flush/0        1   0.00007599
   6.               outputStream_console::bufferFullCB/2        2   0.00006397
   7.                                   list::filter/2->        1   0.00003436
   8.                                      авто::new/1->        3   0.00003241
   9.                             list::getMember_nd/1->        6   0.00002123
  10.                          fileSystem_api::lf_crlf/4        2   0.00002039
  11.    outputStream_console::convertLF2CRLF_ifNeeded/4        2   0.00001062
  12.                                      main::run$1/0        3   0.00000726
  13.                  fileSystem_api::searchLineFeeds/6        2   0.00000698
  14.                                     авто::цена/0->        4   0.00000670
  15.                                stream::getMode/0->        4   0.00000615
  16.                                console::write/0...        1   0.00000615
  17.                                        авто::new/1        3   0.00000475
  18.         fileSystem_api::convertToCRLF_IfNeeded/4->        2   0.00000419
  19.                      console_api::getStdHandle/1->        2   0.00000391
  20.                        fileSystem_api::getSize/2->        2   0.00000363
  21.                        outputSupport::doNotFlush/0        1   0.00000307
  22.                console::getConsoleOutputStream/0->        1   0.00000251