Пример
time a.out
Результат
4.0 real # время выполнения программы 0.1 user # время использования процессора 0.1 sys # время выполнения системных функций (ввод/вывод и др.)В разных shell оболочках имеются разные варианты time , для SPP лучше использовать bs
/bin/time a.out
для SPP
px time a.out
для Parsytec
Для оценки времени выполнения можно
использовать также программный таймер. При помощи
обращения к функции dtime(),
etime() и др. можно
оценить время выполнения программы или
какой-либо ее части.
Пример
program main
. . . . . . . . . . . . . . . . . . . . . . . .
real tt1(2),tt2(2) ! массивы для dtime() . . . . . . . . . . . . . . .
. . . . . . . . .
t1=dtime(tt1) ! 1-ый выполняемый оператор . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
t2=dtime(tt2) ! последний выполняемый оператор print *,'Real time =',t2-t1 stop endПервый вызов dtime() измеряет время выполнения данного процесса. Следующие вызовы dtime() измеряют время выполнения от предыдущего вызова. tt1(1) - содержит User's time , tt1(2) - System time.
Пример
. . . . . . . . . . . . . . . . . . . . . . . .
extern float dtime_();
. . . . . . . . . . . . . . . . . . . . . . . .
void main()
{
. . . . . . . . . . . . . . . . . . . . . . . .
float tt1(2),tt2(2) ; // массивы для dtime() . . . . . . . . . . . . .
. . . . . . . . . . .
t1=dtime_(tt1) ; // 1-ый выполняемый оператор . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
t2=dtime_(tt2) ; //
последний выполняемый оператор
printf("Real time =%f\n",t2-t1);
}
Строка вызова компилятора должна включать библиотеку
cc prog.c -lU77 ! для SPP и С серий
B Фортран программе для Parsytec необходимо использовать имя dtime_().
px f77 -o prog.px prog.f /usr/lib/libxlfpad.a ! для Parsytec
Для построения простейшего профиля программы можно использовать стандартный профилировщик prof ( кроме SPP серии ), осуществляющий профилирование программы по всем вызываемым функциям. Для этого необходимо скомпоновать выполняемый файл с опцией -p. При использовании данной опции генерируется код, вычисляющий число вызовов и время вызова каждой функции. При нормальном выполнении программы создается профильный файл mon.out , используемый затем профилировщиком prof для генерирования отчета.
Пример
fc -o prog -p prog.f
! компоновка выполняемого модуля
prog
! выполнение prog
prof
prog > prog.prof ! вывод отчета профилирования
В отчете выводятся следующие характеристики по каждой функции :
%time cumsecs
#call ms/call name
56.9
2.38 1 2380.00
_recon_
25.6
3.45 25704 0.04
_coef_
7.4
3.76
310ms mcount
1.7
3.83 418
0.17 _wrt_EMfloat$n
1.4
3.89
60ms _for$d_ecvt_a$n
1.0
3.93 10
4.00 ___ap$open
1.0
3.97 4
10.00 _for$do_fio
0.7
4.00 15
2.00 ___ap$stat
0.5
4.02 1
20.00 _MAIN__
0.5
4.04 28
0.71 ___ap$fstat
Результаты профилирования зависят
от системных условий и поэтому необходимо несколько раз
повторять профилирование кода программы
для сравнения. Более надежные и подробные характеристики
производительности программы можно
получить при использовании CXpa.
Основные измеряемые характеристики .
Процессорное
время ( CPU time ) .
Время решения
( Wall clock time ) .
Количество вызовов
п/программ, функций, базовых блоков ( call counts ) .
Граф динамических
вызовов (dynamic call graph)
.
Включают следующие характеристики :
Низкое значение % CPU означает, что большинство данных процессором взято из кэша. Если значение %CPU велико, значительная часть процессорного времени затрачивается на поиск данных в памяти .
Процессорные ( on - processor events ) .
Включают следующие характеристики :
Низкое значение % Hits указывает на наложение строк кэша ( cache thrashing ) .
Среднее быстродействие команды вычисляется по следующей формуле :
V = ( number of instructions completed ) / ( wall clock time (in sec.)) = N / wall_clock .
Теоретически пиковая производительность ( peak MIPS rate ) для Hewlett Packard PA - RISC 7100/7200 с частотой 100 MHz равна 200 MIPS .
оконный
( X Window ) ;
строчный
( line ) ;
пакетный
( batch ) .
X Window режим реализует
многооконный интерфейс для визуализации характеристик производительности
программы, в том числе 2-х и 3-х -мерных гистограммы характеристик, графа
динамических вызовов подпрограмм и т.д., а также текстовые отчеты.
Двухмерная гистограмма отображает
характеристики процесса в целом, трехмерная - нитей процесса для параллельных
участков кода и подрограмм для последовательных участков. Графики могут
быть сохранены в PostScript
или xwd форматах
для печати или в ASCII
формате для экспорта в другие
системы.
X Window режим позволяет
анализировать характеристики различных вариантов программ, в том числе
выполнявшихся на компьютерах разной архитектуры HP SPP.
Line режим позволяет получать
характеристики производительности в текстовом виде .
Batch режим позволяет использовать
script для
запуска файлов сбора характеристик и генерирования отчетов.
Допускаются следующие опции :
Пример. Раздельная компиляция и линкование.
cc -c main.c
!
cc -cxpa -O1 -c sub1.c !
компиляция
cc -cxpa -c sub2.c
!
cc -cxpa main.o sub1.o sub2.o ! линкование
Пример. Компиляция и линкование за один шаг.
cc -cxpa -O1 main.c
Пример
cxpa a.out ? # вызов в X Window режиме
cxpa -nw a.out # вызов в line режиме
Параметры профилирования задаются при помощи следующих команд.
Select - выбор областей исходного кода для профилирования .
Возможны следующие типы областей :
routine
- программы и функции ;
loop
- циклы ;
pregion
- параллельные циклы ;
block
- базовые блоки .
Дополнительные опции команды :
all
- для всех подпрограмм ( функций ) программы ;
in ? список >
- для заданного через пробел списка подпрограмм ;
at ? список > -
для заданных номеров строк ;
Пример
( CXpa ) select
routine all # все программы
( CXpa ) select pregion in sub2 # параллельные
циклы в sub2
Collect - специфицирование характеристик (метрик) ,вычисляемых при профилировании .
Возможны следующие типы метрик :
cpu
- процессорное время ;
wall_clock
- время решения ;
counts
- количество вызовов подпрограмм, итераций циклов ;
call_graph
- граф динамических вызовов
подпрограмм (функций) ;
events
- характеристики эффективности кэша, машинного кода, буфера трансляции
.
Для задания конкретных типов events используется команда :
set event
Пример
( CXpa ) select routine all
( CXpa ) collect
cpu wall_clock events
( CXpa ) set
events data_cache
Пример
( CXpa ) select loop all
( CXpa ) collect
wall_clock cpu
Save executable
- сохранение установок параметров профилирования в исполняемом модуле программы
( или в его копии ) .
Предварительно необходимо снять защиту по записи с исполняемого модуля.
chmod a+w a.out # снятие защиты с модуля a.out
Пример
( CXpa ) select routine all
( CXpa )
collect cpu wall_clock
( CXpa )
save executable #
сохранение установок в текущем
исполняемом модуле
( CXpa )
quit
# выход из CXpa
Пример
( CXpa ) save executable new.a.out
# сохранение установок
в копии исполняемого модуля
# с именем new.a.out
Использование копий исполняемого
модуля с различными установками параметров позволяет сгенерировать объединенный
pdf файл
для анализа вариантов характеристик производительности .
Генерация отчета полученных характеристик осуществляется на основе информации, накопленной в pdf файле. Для создания отчета необходимо вызвать профилировщик CXpa с опцией -pdf и именем pdf файла.
Пример
CXpa -nw -pdf a.out.pdf # вызов в line режиме
( CXpa ) analyze
Командная строка для analyze может включать следующие параметры :
? metric list > - список задаваемых характеристик
Допустимые варианты значений :
call_graph counts cpu wall_clock events?region - type > - спецификация области программы
Допустимые варианты значений :
В случае отсутствия спецификации области отчет формируется для всех профилированных участков программы .
? redirection > - вывод отчета в указанный файл .
Если параметры в команде analyze отсутствуют, отчет генерируется по всем профилированным областям и для всех специфицированных характеристик .
Пример
( CXpa ) analyze wall_clock
Печать времени решения по всем профилированным областям.
( CXpa ) analyze events loop sub2
Печать полученных event характеристик для всех циклов программы sub2 .
( CXpa ) analyze cpu wall_clock call_graph
Печать процессорного времени, времени решения и графа динамических вызовов по всем профилированным областям .
( CXpa ) analyze events cpu > a.rep
Вывод event характеристик
и процессорного времени в файл a.rep .
профилирование значимых программ или функций ( вызывающих наибольшие затраты времени ) на уровне внешних циклов и подпрограмм с добавлением метрики call_graph ;
более детальное мелкозернистое профилирование значимых участков кода программы, включая циклы и подпрограммы более нижнего уровня ;
расширение числа метрик для детального профилирования значимых участков, включая кэш, характеристики и т.д.
Если необходимо осуществлять профилирование по нитям процесса, используется файл cxpb.1
# name : cxp1.1
# batch file report's creation
# region -- routine
analyze routine
> a.lst
quit
# name : cxp1.2
# batch file report's creation
# metrics -- wall_clocks
analyze wall_clock
> a.lst
quit
( start - имя головной программы высшего уровня. Вызывающая программа для нее отсутствует),имена программ, вызываемых из головной программы - после имени головной программы .
После запуска script файла profb образуются следующие файлы характеристик .
Командная строка запуска profb в
фоновом режиме имеет следующий вид :
profb prog [ "llib" ] ?
где prog -
имя программы на Фортране ,
llib
- имя библиотеки если используется.
Для запуска программы на С необходимо
запустить profbc
profbc prog [ "llib" ] ?
где prog -
имя программы на С ,
llib
- имя библиотеки если используется
Для профилирования программы на заданном уровне оптимизации можно использовать файл prof1b .
#!/bin/csh
#
(#!/usr/contrib/bin/tcsh )
# Name: prof1b
# Using shell script for profiling
program on signed optimization and
# profiling levels and generating
report in background mode
#
# Command line for running:
prof1.b "prog" "O" "L" "-llib"
#
where:
# "prog" -- name of Fortran
source code
# "O" -- optimisation level
: [ no, O0, O1, O2, O3 ]
# "L" -- profiling level :
[ 0, 1 ] - invokes file "cxpb.L"
#
0 - routine 1 - threads
# "lib" -- name of library
(if is used)
#
# Output data :
#
# "prog.rpf" -- full output
performance report
# "prog.rp" -- output performance
report ( Wall_Clock , CPU/Wall_Clock)
# "prog.LST" -- short output
performance report ( CPU ,Wall_Clock )
# "prog.opt" -- optimizing
transformations report
# "prog.res" -- output data
(results)
# "prog.cxpa"-- CXpa messages
? protocol
# "prog.cxp"-- profiling's
protocol
# "prog.rf" -- summary (realisations)
full output report
# "prog.L" -- summary (realisations)
short output report
# "prog.R" -- summary (realisations)
output report
#
# CXpa batch files are used :
cxpb.0 (cxpb.1) , cxp1.0 , cxp1.1 , cxp1.2
#
echo '\n Optimisation level: '-$2'
options: '-$2 $4 > $1.cxp
echo '\n Optimisation level: '-$2'
options: '-$2 $4 > $1.opt
echo '\n Optimisation level: '-$2'
options: '-$2 $4 > $1.LST
echo '\n Optimisation level: '-$2'
options: '-$2 $4 > $1.rp
#
fc -o $1 -$2 -cxpa $1.f $4 >>? $1.opt
chmod a+w $1
#
echo '\n Convex performance analyzer
CXpa \n' >> $1.cxp
#echo ' command line:
cxpa -nw -x' cxpb.$3 $1 >> $1.cxp
echo '\n Profiling level ' $3 >>
$1.cxp
#cat cxpb.$3 >> $1.cxp
rm $1.*.pdf >>? $1.tmp
cxpa -nw -x cxpb.$3 $1 >? $1.cxpa
$1 >? $1.res
echo 'command line:
cxpa -nw -pdf '$1.$2.pdf -x cxp1.0 >> $1.cxp
cat cxp1.0 >> $1.cxp
cp $1.*.pdf $1.$2.pdf >>? $1.tmp
cxpa -nw -pdf $1.$2.pdf -x cxp1.0
>>? $1.cxpa
cat a.lst >> $1.cxp
cat a.lst | grep 'CPU Time :' >>
$1.LST
cat a.lst | grep 'Wall Clock Time
:'>> $1.LST
cat a.lst | grep Archit >> $1.LST
#
echo '\n Optimisation level: ' -$2
> $1.rpt
echo '\n Profiling level: ' $3 >>
$1.rpt
echo '\n Convex performance analyzer
CXpa \n' >> $1.rpt
echo ' command line: cxpa -nw -pdf
'$1.$2.pdf' -x cxp1.1 \n' >> $1.rpt
cat cxp1.1 >> $1.rpt
cxpa -nw -pdf $1.$2.pdf -x cxp1.1
>>? $1.cxpa
cat a.lst >> $1.rpt
cxpa -nw -pdf $1.$2.pdf -x cxp1.2
>>? $1.cxpa
cat a.lst >> $1.rp
#
cat $1.rpt >> $1.rr
cat $1.LST >> $1.L
cat $1.rp >> $1.R
#
Командная строка запуска prof1b в фоновом режиме имеет следующий вид :
prof1b prog "O" "L" ["llib"] ?
где prog
- имя программы на Фортране
,
O
- уровень оптимизации ( no,O0,O1,O2,O3 ) ,
L
- уровень профилирования (0 , 1) 0 - программа , 1 - нити
llib -
имя библиотеки если используется.
Для запуска программы на
С запускается prof1bc
.
Запускаемые программы не должны
иметь интерактивного ввода. В случае зависания программы в фоновом режиме
( tty output ) необходимо повторить запуск в интерактивном режиме.
Описанные script файлы и вспомогательные
файлы находятся в каталоге sd2a/boris/prof/cxpa.
CONVEX Fortran (fc) Version 9.5 Tue
Nov 18 18:22:37 1997 Page 0001
Options: -no -LST -tm spp1600 -f90
-fi -o p.o
1
program main
2 c
3
real tt1(2),tt2(2)
4
integer*4 i,n
5
double precision sum,h,f,x
6
f(x)=4.d0/(1.d0+x*x)
7
n=12000000
8
t1=etime(tt1)
!first call
9
h=1.d0/n
! step
10
sum=0.0d0
11 c
12
do 10 i=1,n
13
sum=sum+h*f((i-.50)*h)
14 10 continue
15 c
16
t2=etime(tt2)
! second call
17
print *,'Real time =',t2-t1,'Sum =',sum
18
print *,'Sum - pi =',sum - 3.14159265358979323846d0
19
stop
20
end
Краткий отчет профилирования
( файл p.l ) .
Optimisation level: no options:
-no
CPU Time : 5.403 secs
Wall Clock Time : 16.873 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O0 options: -O0
CPU Time : 4.294 secs
Wall Clock Time : 13.521 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O1 options: -O1
CPU Time : 3.702 secs
Wall Clock Time : 11.756 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O2 options: -O2
CPU Time : 2.314 secs
Wall Clock Time : 7.184 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O3 options: -O3
CPU Time : 2.462 secs
Wall Clock Time : 0.873 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: no options: -no
CPU Time : 5.403 secs
Wall Clock Time : 14.392 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O0 options: -O0
CPU Time : 4.295 secs
Wall Clock Time : 10.726 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O1 options: -O1
CPU Time : 3.702 secs
Wall Clock Time : 9.610 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O2 options: -O2
CPU Time : 2.314 secs
Wall Clock Time : 6.692 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O3 options: -O3
CPU Time : 2.467 secs
Wall Clock Time : 0.877 secs
Architecture : CONVEX SPP-1600 (8
threads)
Данные отчета показывают, что наименьшее время решения при уровне оптимизации O3. При этом коэффициент параллелизации CPU/Wall_clock = 2.59, что указывает на распараллеливание программы.
Отчет профилирования "узких мест" ( файл p.r ) .
Optimisation level: O3 options: -O3
Profiling level: routine
CXpa Version 3.5 Profile Executable : /sd2a/boris/prof/pProfile Data : /sd2a/boris/prof/p.O3.pdf Process State : exited
Routine Performance Analysis
Time to Solution (less children) (plus children) Wall Clock % CPU/Wall Wall Clock % CPU/Wall PS Routine Name ------------ ----- --------- ------------ ----- --------- -- ------------ 0.900 99.6% 2.59 0.900 99.6% 2.59 e start2. Простая тестовая программа приближенного вычисления определителя
1
program main
2 c evaluation
of determinant of a general dense n-by-n matrix A with 3 c random elements
and computation of inverse
c matrix A**(-1)
4
integer NN,N,IER,JOB,ISE
5
PARAMETER (NN=400)
6
INTEGER*4 IPVT(NN)
7
REAL*8 A(NN,NN),DET(2),DETA,WORK(NN)
8
real tt1(2),tt2(2),RAN,a1,a2
9
call dtime(tt1)
10
a1=-1.
11
a2=1.
12
N=385
13
JOB=11
14
ISE=1876
15
DO 20 I=1,N
16
DO 20 J=1,N
17 20 A(I,J)=a1+RAN(ISE)*(a2-a1)
18 c computation of the triangular factorisation of a general
dense n-by-n matrix A
19
CALL DGEFA(A,NN,N,IPVT,IER)
! CONVEX VECLIB
20
IF(IER .EQ.0) THEN
21 c evaluation of det(A)=DET(1)*10.0**INT(DET(2)) and computation
A**(-1)
22
CALL DGEDI(A,NN,N,IPVT,DET,WORK,JOB) ! CONVEX VECLIB
23
ELSE
24
PRINT *,'A is computationally singular'
25
END IF
26
IF (DET(1).EQ.0.0D0) THEN
27
DETA=0.0D0
28
ELSE IF (DET(2).LE.306) THEN
29
DETA=DET(1)*10.0D0**INT(DET(2))
30
ELSE
31
PRINT *,'the determinant of A is too large to evaluate'
32
END IF
33
call dtime(tt2)
34
PRINT *,'det(A) =',DETA,' DET(1)=',DET(1),' DET(2)=',DET(2)
35
PRINT *,' User time = ',tt2(1)-tt1(1)
36
PRINT *,' Sys time = ',tt2(2)-tt1(2)
37
END
Краткий отчет профилирования
( файл d3.l ) .
Optimisation level: no options:
-no -lveclib
CPU Time : 256.498 secs
Wall Clock Time : 213.764 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: O0 options:
-O0 -lveclib
CPU Time : 84.019 secs
Wall Clock Time : 69.633 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: O1 options:
-O1 -lveclib
CPU Time : 161.104 secs
Wall Clock Time : 130.998 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: O2 options:
-O2 -lveclib
CPU Time : 80.393 secs
Wall Clock Time : 70.544 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: O3 options:
-O3 -lveclib
CPU Time : 194.481 secs
Wall Clock Time : 164.786 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: no options:
-no -lveclib
CPU Time : 163.092 secs
Wall Clock Time : 140.288 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: O0 options:
-O0 -lveclib
CPU Time : 132.511 secs
Wall Clock Time : 105.183 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: O1 options:
-O1 -lveclib
CPU Time : 251.750 secs
Wall Clock Time : 216.434 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: O2 options:
-O2 -lveclib
CPU Time : 231.541 secs
Wall Clock Time : 212.228 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: O3 options:
-O3 -lveclib
CPU Time : 322.565 secs
Wall Clock Time : 271.796 secs
Architecture : CONVEX SPP-1600 (8
threads)
Данные отчета показывают, что наименьшее время решения при уровнях оптимизации O0 ,О2 . При этом максимальное значение коэффициента параллелизации CPU/Wall_clock = 1.2 достигается на уровне О3 что указывает на слабую параллелизацию программы. Профилировщик выдает ошибочную информацию относительно использования 8 нитей процесса на уровнях no,...,O2 ( в действительности 1 нить).
Фрагмент отчета профилирования "узких мест" ( файл d3.r ) .
Optimisation level: O0 options: -O0 -lveclib
Routine Performance Analysis
Time to Solution (less children) (plus children) Wall Clock % CPU/Wall Wall Clock % CPU/Wall PS Routine Name ------------ ----- --------- ------------ ----- --------- -- ------------ 323.385 100.0% 0.96 323.385 100.0% 0.96 e startOptimisation level: O2 options: -O2 -lveclib
Routine Performance Analysis
Time to Solution (less children) (plus children) Wall Clock % CPU/Wall Wall Clock % CPU/Wall PS Routine Name ------------ ----- --------- ------------ ----- --------- -- ------------ 189.123 100.0% 1.01 189.123 100.0% 1.01 e start3. Программа исследования тепловой конвекции.
Исходный код t.f. Командная строка запуска профилирования :
profb t & или profb t -lveclib &
Краткий отчет профилирования ( файл t.l ) .
Optimisation level: no options: -no
-lveclib
CPU Time : 0.433 secs
Wall Clock Time : 1.048 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O0 options: -O0
-lveclib
CPU Time : 0.354 secs
Wall Clock Time : 0.484 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O1 options: -O1
-lveclib CPU Time : 0.338 secs
Wall Clock Time : 0.467 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O2 options: -O2
-lveclib CPU Time : 0.337 secs
Wall Clock Time : 0.842 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O3 options: -O3
-lveclib CPU Time : 0.345 secs
Wall Clock Time : 0.755 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: -O3 options:
-O3
CPU Time : 0.345 secs
Wall Clock Time : 0.713 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: -O3 options:
-O3 -lveclib CPU Time : 0.345 secs
Wall Clock Time : 0.722 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: no options: -no
-lveclib CPU Time : 0.435 secs
Wall Clock Time : 1.225 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O0 options: -O0
-lveclib CPU Time : 0.355 secs
Wall Clock Time : 1.688 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O1 options: -O1
-lveclib CPU Time : 0.340 secs
Wall Clock Time : 1.248 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O2 options: -O2
-lveclib CPU Time : 0.339 secs
Wall Clock Time : 1.178 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O3 options: -O3
-lveclib CPU Time : 0.346 secs
Wall Clock Time : 1.236 secs
Architecture : CONVEX SPP-1600 (8
threads)
Данные отчета показывают, что трудно выделить оптимальный уровень оптимизации. Отчет "узких мест" показывает что максимальное время решения в % от общего расходуется подпрограммой sfdat и при этом значение коэффициента параллелизации CPU/Wall_clock очень мало, что указывает на "узкое место" в программе.
Фрагмент отчета профилирования "узких мест" ( файл t.r ) .
Optimisation level: -O3 options: -O3
Routine Performance Analysis
Time to Solution (less children) (plus children) Wall Clock % CPU/Wall Wall Clock % CPU/Wall PS Routine Name ------------ ----- --------- ------------ ----- --------- -- ------------ 0.309 43.4% 0.08 0.309 43.4% 0.08 sfdat 0.219 30.7% 0.70 0.219 30.7% 0.70 coef 0.177 24.8% 0.94 0.707 99.2% 0.49 recon 2.341m 0.3% 0.10 0.709 99.5% 0.49 e start 2.015m 0.3% 0.06 2.015m 0.3% 0.06 nuint 0.045m 0.0% 0.96 0.045m 0.0% 0.96 popriOptimisation level: O1 options: -O1 -lveclib
Routine Performance Analysis
Time to Solution (less children) (plus children) Wall Clock % CPU/Wall Wall Clock % CPU/Wall PS Routine Name ------------ ----- --------- ------------ ----- --------- -- ------------ 0.487 39.0% 0.05 0.487 39.0% 0.05 sfdat 0.433 34.7% 0.38 1.241 99.4% 0.27 recon 0.322 25.8% 0.47 0.322 25.8% 0.47 coef 5.132m 0.4% 0.03 1.246 99.9% 0.27 e start 0.102m 0.0% 1.01 0.102m 0.0% 1.01 nuint 0.054m 0.0% 0.98 0.054m 0.0% 0.98 popri343 subroutine sfdat(z,nx,ny,ijk,hx,hy)
Фрагменты новых отчетов профилирования ( файлы t2.l , t2.r ) .
Optimisation level: -O2 options:
-O2 -lveclib
CPU Time : 0.343 secs
Wall Clock Time : 0.366 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: no options: -no
-lveclib
CPU Time : 0.437 secs
Wall Clock Time : 0.466 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O0 options: -O0
-lveclib
CPU Time : 0.355 secs
Wall Clock Time : 0.376 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O1 options: -O1
-lveclib
CPU Time : 0.342 secs
Wall Clock Time : 0.451 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O2 options: -O2
-lveclib
CPU Time : 0.342 secs
Wall Clock Time : 0.427 secs
Architecture : CONVEX SPP-1600 (1
thread)
Optimisation level: O3 options: -O3
-lveclib
CPU Time : 0.352 secs
Wall Clock Time : 0.573 secs
Architecture : CONVEX SPP-1600 (8
threads)
Optimisation level: -O2 options: -O2 -lveclib
Routine Performance Analysis
Фрагмент подробного отчета профилирования ( файл t2.rf ) .
Optimisation level: -O2
Profiling level: 0
Convex performance analyzer CXpa
command line: cxpa -nw -pdf t2.O2.pdf
-x cxp1.1
Routine Performance Analysis
Call Counts Times Exec PS Routine Name ---------------- -- ---------------------------------------------------------- 25704 coef 5 popri 4 nuint 2 sfdat 1 recon 1 e start Computation (less children) (plus children) CPU Time % CPU Time % PS Routine Name ------------ ----- ------------ ----- -- ------------ 0.164 47.9% 0.342 100.0% recon 0.151 44.0% 0.151 44.0% coef 0.027 8.0% 0.027 8.0% sfdat 0.126m 0.0% 0.343 100.0% e start 0.099m 0.0% 0.099m 0.0% nuint 0.031m 0.0% 0.031m 0.0% popri Time to Solution (less children) (plus children) Wall Clock % CPU/Wall Wall Clock % CPU/Wall PS Routine Name ------------ ----- --------- ------------ ----- --------- -- ------------ 0.174 47.6% 0.94 0.362 99.0% 0.95 recon 0.152 41.6% 0.99 0.152 41.6% 0.99 coef 0.035 9.6% 0.78 0.035 9.6% 0.78 sfdat 1.825m 0.5% 0.07 0.364 99.5% 0.94 e start 0.746m 0.2% 0.13 0.746m 0.2% 0.13 nuint 0.031m 0.0% 1.00 0.031m 0.0% 1.00 popri Dynamic Call Graph Wall (with CPU (with calls calls PS routine children) children) in out names ------------------------------------------------------------------------------ > 0.364 0.343 1 1 e start 0.362 0.342 1 recon ------------------------------------------------------------------------------ 0.362 0.342 1 start > 0.362 0.342 1 25715 recon 0.152 0.151 25704 coef 0.035 0.027 2 sfdat 0.746m 0.099m 4 nuint 0.031m 0.031m 5 popri ------------------------------------------------------------------------------ 0.152 0.151 25704 recon > 0.152 0.151 25704 0 coef ------------------------------------------------------------------------------ 0.035 0.027 2 recon > 0.035 0.027 2 0 sfdat ------------------------------------------------------------------------------ 0.746m 0.099m 4 recon > 0.746m 0.099m 4 0 nuint ------------------------------------------------------------------------------ 0.031m 0.031m 5 recon > 0.031m 0.031m 5 0 popri
Для визуализации полученных характеристик удобно использовать X Window режим. Строка запуска имеет следующий вид :
cxpa *.pdf &
В этом случае список полученных pdf файлов характеристик появляется в Analysis Control window и можно выбрать нужный для визуализации характеристик. Для получения справочной информации необходимо использовать CXpa Help window в X window режиме или команду ( CXpa ) help в line режиме.
Литература .