debugUGe (1158415), страница 5
Текст из файла (страница 5)
Explicitly specified memory area is checked by comparison its reference checksum with the current one. The reference checksum is calculated when Run-Time Library is initialized.
The initial and final addresses of code memory are specified by the program, starting Run-Time Library by means of writing these addresses to the Run-Time Library executable module. The same program calculates and writes to Run-Time Library executable module reference checksum of code memory. During its operating (in particular, when trace events occurred) Run-Time Library checks code memory, comparing its current checksum with reference one.
Controlling mechanisms of memory area checking is implemented by the following parameters of systrace.* files.
-
EveryEventCheckBound - flag to check all dynamically allocated memory blocks every time when traced event occurred.
-
EveryTraceCheckBound - flag to check all dynamically allocated memory blocks each time when trace output function is called. The checking includes the checking specified by parameter EveryEventCheckBound, because it is also performed for non-traced (disabled) events.
-
dvm_StartAddr - initial address of checked memory area when tracing.
-
dvm_FinalAddr - final address of checked memory area when tracing.
-
EveryEventCheckMem - flag to check the memory area, specified by parameters dvm_StartAddr and dvm_FinalAddr for each traced event.
-
EveryTraceCheckMem - flag to check the memory area, specified by parameters dvm_StartAddr and dvm_FinalAddr each time when trace output functions are called. The checking includes the checking, specified by parameter EveryEventCheckMem, because it is also performed for disabled trace events.
-
EveryEventCheckCodeMem -.flag to check memory area with program code for each traced event.
-
EveryTraceCheckCodeMem - flag to check memory area with program code each time when trace output functions are called. The checking includes the checking, specified by parameter EveryEventCheckCodeMem.
11.4.6Controlling output of additional information when tracing some Run-Time Library functions in extended mode
-
distr_Trace – flag to output additional information when tracing the function distr_. There are outputted abstract machine representation map, ranges of local values of indexes for each dimension of abstract machine representation, flag of replication along all dimensions of the processor system (Repl) and flag of mapping some element (the elements may be different) of abstract machine representation (Every) on each processor.
-
align_Trace - flag to output additional information when tracing the function align_. There are reported distributed array map and ranges of local values of indexes for each its dimension.
-
mappl_Trace - flag to output parallel loop map when tracing the function mappl_.
-
dopl_Trace – flag to output additional information when tracing the function dopl_. The next set of ranges of local values of indexes for each dimension of the parallel loop is output.
-
RedVarTrace –flag to output addresses, types and values of all variables of reduction group when executing functions saverv_ and strtrd_ and also at the beginning and at the end of execution of the function waitrd_.
-
OutIndexTrace – flag to output result values of indexes for each dimension of distributed array when executing internal Run-Time Library function GetIndexArray.
-
diter_Trace –flag to output index array when the function diter_ of interconnection with DVM-debugger is traced.
-
drmbuf_Trace – flag to output index array when function drmbuf_ of interconnection with DVM-debugger is traced.
12Diagnostics messages of dynamic debugger
The common format of error messages of dynamic debugger:
(<processor number>)<context> File: <file>, Line: <line> (<count> times) <error message>
where:
| <processor number> | - number of processor, where error occurred. It is outputted only if a program executes on several processors. | |
| <context> | - context, where the error occurred. | |
| Sequential branch | - the error occurred in sequential part of the program | |
| Loop( No(N1), Iter(I1,I2,…)), …, Loop( No(Nm), Iter(I1,I2,…)) | - the error occurred when m-dimensional loop was executed. | |
| <file> | - name of file, where the error occurred. | |
| <line> | - line number. | |
| <count> | - a number of given error repetitions in the given context. It is output when all detected errors are reported. | |
| <error message> | - error description message. | |
12.1Dynamic control
| Writing to read-only variable <var> | Writing to read-only variable is detected. | |
| Using non-initialized private variable <var> | Access to non-initialized variable is detected. | |
| Using non-initialized element <elem> | Access to non-initialized distributed array element is detected. | |
| Using variable <var> before asynchronous reduction competed | Access to reduction variable before reduction operation completion. | |
| Access to non-local element <elem> | Access to non-local element of distributed array. | |
| Writing to shadow element <elem> of array | Writing to shadow element of array. | |
| Shadow element <elem> was not updated | Access to shadow elements before completion of shadow edge renewing operation. | |
| Data dependence in loop due to access to element <elem> | Data dependence in parallel loop is detected. | |
| Using shadow element <elem> before asynchronous shadow renew competed | Usage of shadow element <elem> of distributed array during shadow edge renewing operation execution. | |
| Writing to remote data buffer <var> | Writing to remote data buffer <var>. | |
| Write to remote element <elem> in sequential branch | Writing to distributed array element <elem> in sequential branch of the program without own computation specification. | |
| Reading remote element <elem> in sequential branch | Using not local element <elem> of distributed array in sequensial branch of the program. | |
| WAIT for reduction without START | Waiting for reduction completion is issued without the reduction start. | |
| Using an element outside of array limits: <elem> | Access to element of array beyond its limits. | |
| START for reduction without WAIT | Absence of waiting for asynchronous reduction completion operation for corresponding operation of asynchronous reduction start. | |
| Reduction operation was not started | Reduction variable is specified, but corresponding computation of reduction operation was never started. | |
12.2Trace accumulation and comparison
| Error message | Description |
| Bad file structure | Trace file structure is incorrect. |
| Undefined keyword | Unknown keyword appears in trace file. |
| Bad command syntax | Wrong structure of trace record. |
| Can't open a file <file name> | Specified file can’t be opened. |
| Trace file <file name> is empty | Specified trace file is empty. |
| Bad trace structure (missing current program construct) | Trace file structure is incorrect. Record of executable construct beginning is missed. |
| No current program construct | Record of executable construct beginning is missed. |
| Unexpected task or iteration of loop | There is no record about given iteration or task execution in reference trace. |
| Double execution of task or iteration, No = <iter no> | Repeated execution of the same iteration or task. |
| Unexpected execution of program construct | There is no record about given loop or task execution in reference trace. |
| Abnormal loop exit | Loop end doesn't correspond to the record in reference trace. |
| Unexpected use of variable | There is no given variable usage record in reference trace. |
| Unexpected trace record | There is no given event performance record in reference trace. |
| Different <type> values: <standard value> != <current value> | Variable value differ from the variable value in reference traced. |
| Different <type> values of reduction variable: <standard value> != <current value> | Result value of reduction computation differ from the value in reference trace. |
13Structure of trace configuration file
| # Trace size = | <size of full trace file in bytes> |
| # String count = | <a number of lines of trace file> |
| SL PL or TR | <construct number> (<number of surrounding construct>) [<construct rank>] {<file name>, <line number>} = <trace accumulation level>, (<dimension>:<first iteration>, < last iteration >, <iteration step>) | |
| # Trace size = <construct trace size in bytes for specified trace level> | ||
| # String count = <number of construct trace lines for specified trace level> | ||
| # Count of traced iterations = <number of traced loop iterations or tasks> | ||
EL: <construct number>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
| SL, PL or TR | <construct number> (<number of surrounding construct>) [<construct rank>] {<file name>, <line number>} = <trace accumulation level>, (<dimension>:<first iteration>, < last iteration >, <iteration step>) | |
| # Trace size = <construct trace size in bytes for specified trace level> | ||
| # String count = <number of construct trace lines for specified trace level> | ||
| # Count of traced iterations = <number of traced loop iterations or tasks> | ||
EL: <construct number>
14Execution trace structure
When executions are traced, accumulated trace information consists of two parts:
-
trace header
-
trace body (may be omitted).
The header exists in trace even if the trace accumulation is disabled for whole program. Its structure looks like the structure of trace configuration loop, but without calculated values of trace size for whole program and for loops:
MODE = <accumulation trace level for whole program>,
| SL or PL | <construct number> (<number of surrounding construct>) [<construct rank>] {<file name>, <line number>} = <trace accumulation level>, (<dimension>:<first iteration>, < last iteration >, <iteration step>) |
EL: <construct number>















