Документ взят из кэша поисковой машины. Адрес оригинального документа : http://angel.cmc.msu.ru/~ifed/teraflops/Pozdneev_IntelThreadChecker.pdf
Дата изменения: Thu Mar 4 12:27:47 2010
Дата индексирования: Mon Oct 1 19:39:48 2012
Кодировка:
Intel Thread Checker

2-
pozdneev@gmail.com
. .

« »

( )

Intel Thread Checker

14 2008

1 / 26



1

Intel Thread Checker 1: Intel Thread Checker 2:
Intel Thread Checker 14 2008 2 / 26

2

3

4

5

6

7

( )




Microsoft Windows

Intel Thread Checker / «» (Intel Software Development Tools Intel(R) Thread Checker x.x) icl ( Intel Software Development Tools Intel C++ Compiler xx.x.xxx C++ Build Environment for applications running on . . . ) nmake ( ) (FAR, etc.)
icc, gcc tcheck_cl make
Intel Thread Checker 14 2008 3 / 26

GNU/Linux

( )




(. Heisenbug) --

, -- --

,
(data races)
,

(deadlocks)
( )

(, )
,

, ,


,
Intel Thread Checker 14 2008 4 / 26


Intel Thread Checker

, OpenMP-, POSIX- Windows- , :
(data races) (deadlocks) « » (stalled threads) Abandoned locks
,

, Intel Thread Checker
( ) Intel Thread Checker 14 2008 5 / 26


Intel Thread Checker
1


,

2

Intel Thread Checker Intel Thread Checker goto 2
Intel Thread Checker

Intel Thread Checker OpenMP-, , (, «», )

Intel- -Intel- --

3 4 5

( )

14 2008

6 / 26




(source instrumentation)

Intel Thread Checker: /Qtcheck (-tcheck) : /Od (-O0) : /debug (-g) (linkage) : /MD base relocations: /fixed:no ITC Intel-
Intel Thread Checker 14 2008 7 / 26

(binary instrumentation)

( )


1


1


prime

2


set OMP_NUM_THREADS=1 set OMP_NUM_THREADS=2

« »

make



prime

3

, make clean, makefile , Intel Thread Checker
Windows: . Linux: user@domain:~>
tcheck_cl ./prime
14 2008 8 / 26

? ?

4

5

( )

Intel Thread Checker



Data races for

glb_primes_found:

diagnostics

_______________________________________________________________________________ |ID|Short Des|Sev|C|Con|Description |1st A|2nd A| | |cription |eri|o|tex| |ccess|ccess| || |tyN|u|t[B| |[Best|[Best| || |ame|n|est| |] |] | || | |t|] | | | | _______________________________________________________________________________ |1 |Write -> |Err|4|omp|Memory read of glb_primes_found at |"prim|"prim| | |Read |or |6|for|"prime.c":104 conflicts with a prior |e.c":|e.c":| | |data-race| | | |memory write of glb_primes_found at |104 |104 | || | | | |"prime.c":104 (flow dependence) | | | _______________________________________________________________________________ |2 |Read -> |Err|2|omp|Memory write of glb_primes_found at |"prim|"prim| | |Write |or |3|for|"prime.c":104 conflicts with a prior |e.c":|e.c":| | |data-race| | | |memory read of glb_primes_found at |104 |104 | || | | | |"prime.c":104 (anti dependence) | | | _______________________________________________________________________________ |3 |Write -> |Err|2|omp|Memory write of glb_primes_found at |"prim|"prim| | |Write |or |3|for|"prime.c":104 conflicts with a prior |e.c":|e.c":| | |data-race| | | |memory write of glb_primes_found at |104 |104 | || | | | |"prime.c":104 (output dependence) | | |
( ) Intel Thread Checker 14 2008 10 / 26




1st Access (1- ) S1: privateA = sharedX 2nd Access (2- ) S2: sharedX = privateB 1st Access (1- ) S1: sharedX = privateA 2nd Access (2- ) S2: sharedX = privateB
( )

Read

Write Write

Write

1st Access (1- ) S1: sharedX = privateA 2nd Access (2- ) S2: privateB = sharedX

Read

Write

Intel Thread Checker

14 2008

11 / 26


:
Data races for

progress:

diagnostics

_______________________________________________________________________________ |ID|Short Des|Sev|C|Con|Description |1st A|2nd A| | |cription |eri|o|tex| |ccess|ccess| || |tyN|u|t[B| |[Best|[Best| || |ame|n|est| |] |] | || | |t|] | | | | _______________________________________________________________________________ |4 |Read -> |Err|4|omp|Memory write of progress at "prime.c":70 |"prim|"prim| | |Write |or |8|for|conflicts with a prior memory read of |e.c":|e.c":| | |data-race| | | |progress at "prime.c":72 (anti dependence)|72 |70 |

( )

Intel Thread Checker

14 2008

13 / 26


:
Data races for

last_percent_done:

diagnostics

_______________________________________________________________________________ |ID|Short Des|Sev|C|Con|Description |1st A|2nd A| | |cription |eri|o|tex| |ccess|ccess| || |tyN|u|t[B| |[Best|[Best| || |ame|n|est| |] |] | || | |t|] | | | | _______________________________________________________________________________ |5 |Write -> |Err|4|omp|Memory read of last_percent_done at |"prim|"prim| | |Read |or | |for|"prime.c":74 conflicts with a prior memory|e.c":|e.c":| | |data-race| | | |write of last_percent_done at "prime.c":77|77 |74 | || | | | |(flow dependence) | | |

( )

Intel Thread Checker

14 2008

15 / 26


:
Data races for

last_percent_done:

diagnostics

_______________________________________________________________________________ |ID|Short Des|Sev|C|Con|Description |1st A|2nd A| | |cription |eri|o|tex| |ccess|ccess| || |tyN|u|t[B| |[Best|[Best| || |ame|n|est| |] |] | || | |t|] | | | | _______________________________________________________________________________ |6 |Read -> |Err|4|omp|Memory write of last_percent_done at |"prim|"prim| | |Write |or | |for|"prime.c":77 conflicts with a prior memory|e.c":|e.c":| | |data-race| | | |read of last_percent_done at "prime.c":77 |77 |77 | || | | | |(anti dependence) | | | _______________________________________________________________________________ |7 |Write -> |Err|4|omp|Memory read of last_percent_done at |"prim|"prim| | |Read |or | |for|"prime.c":77 conflicts with a prior memory|e.c":|e.c":| | |data-race| | | |write of last_percent_done at "prime.c":77|77 |77 | || | | | |(flow dependence) | | | _______________________________________________________________________________ |8 |Write -> |Err|4|omp|Memory write of last_percent_done at |"prim|"prim| | |Write |or | |for|"prime.c":77 conflicts with a prior memory|e.c":|e.c":| | |data-race| | | |write of last_percent_done at "prime.c":77|77 |77 | || | | | |(output dependence) | | |
( ) Intel Thread Checker 14 2008 17 / 26


Intel Thread Checker

ITC, ,


, OpenMP-:
, Thread-Count Independent (TCI) (/Qtcheck,
omp_get_thread_num()

, ,

/Qopenmp /MD

)

,

Thread-Count Dependent (TCD) (/Qopenmp,
( ) Intel Thread Checker



)

14 2008

18 / 26


2


1



2

,
set OMP_NUM_THREADS=1 set OMP_NUM_THREADS=2

, , : $(ITC)/Samples/Deadlock

deadlock

3 4

Intel Thread Checker Intel Thread Checker
?
globalY

?

( )

Intel Thread Checker

14 2008

19 / 26



Data races for

globalX:

diagnostics

_______________________________________________________________________________ |ID|Short Desc|Seve|Co|Contex|Description |1st Ac|2nd Ac| | |ription |rity|un|t[Best| |cess[B|cess[B| || |Name|t |] | |est] |est] | _______________________________________________________________________________ |4 |Write -> |Erro|1 |"deadl|Memory read of globalX at |"deadl|"deadl| | |Read |r | |ock.c"|"deadlock.c":60 conflicts with a |ock.c"|ock.c"| | |data-race | | |:49 |prior memory write of globalX at |:39 |:60 | || | || |"deadlock.c":39 (flow dependence) | | | _______________________________________________________________________________ |5 |Write -> |Erro|1 |"deadl|Memory read of globalY at |"deadl|"deadl| | |Read |r | |ock.c"|"deadlock.c":60 conflicts with a |ock.c"|ock.c"| | |data-race | | |:49 |prior memory write of globalY at |:41 |:60 | || | || |"deadlock.c":41 (flow dependence) | | |

( )

Intel Thread Checker

14 2008

21 / 26




1 2 1
1 2 3 4



2
1 2 3 4




( ) Intel Thread Checker

,
14 2008 22 / 26



Potential deadlo ck: diagnostics

_______________________________________________________________________________ |ID|Short Desc|Seve|Co|Contex|Description |1st Ac|2nd Ac| | |ription |rity|un|t[Best| |cess[B|cess[B| || |Name|t |] | |est] |est] | _______________________________________________________________________________ |1 |A sync |Caut|1 |WholeP|A synchronization object |"deadl|"deadl| | |object was|ion | |rogram|"deadlock.c":28 was acquired in |ock.c"|ock.c"| | |acquired | | |1 |the wrong order at "deadlock.c":26|:26 |:28 | | |in the | || | | | | | |wrong | || | | | | | |order | || | | | | _______________________________________________________________________________ |2 |A sync |Caut|1 |WholeP|A synchronization object |"deadl|"deadl| | |object was|ion | |rogram|"deadlock.c":40 was acquired in |ock.c"|ock.c"| | |acquired | | |1 |the wrong order at "deadlock.c":38|:38 |:40 | | |in the | || | | | | | |wrong | || | | | | | |order | || | | | |

( )

Intel Thread Checker

14 2008

24 / 26






ITC ITC ITC



( )

Intel Thread Checker

14 2008

25 / 26






Intel Software College «Multi-core Programming for Academia», «Multi-core Technological School» ( 2007, (), , ) Intel VTune Performance Environment Help
http://ru.wikipedia.org/wiki/ http://ru.wikipedia.org/wiki/Deadlock




( )

$(ITC)/Samples/ $(ITC)/Samples/CodeExamplesGuide.pdf
Intel Thread Checker 14 2008 26 / 26