OpenMP рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рд░реВрдкрд░реЗрдЦрд╛



рдУрдкрдирдПрдордкреА рд╕рдВрднрд╡рддрдГ рдереНрд░реЗрдб рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдореЙрдбрд▓ рд╣реИ, рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ред рд╡реЗ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ (рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╡рд╛рд╣ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ) рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдХрд▓рдХ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдкреЛрд╕реНрдЯ рд╕реНрд╡рдпрдВ OpenMP рдорд╛рдирдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рд╛рдордЧреНрд░рд┐рдпрд╛рдВ рд╣реИрдВред

рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдУрдкрдирдПрдордкреА рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдВрдЧрдгрдирд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓реЗрдЦред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрдВрдЯреЗрд▓ VTune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ XE рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЕрд░реНрдерд╛рддреН, рдХреИрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

рдУрдкрдирдПрдордкреА рдПрдкреНрд▓реАрдХреЗрд╢рди рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХрд╛ рд╢реБрднрд╛рд░рдВрдн


OpenMP рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ VTune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ XE 2013 рдЕрдкрдбреЗрдЯ 4 рдпрд╛ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдореНрдкреЛрдЬрд╝рд░ XE 2013 рдЕрдкрдбреЗрдЯ 2 рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рдЗрдВрдЯреЗрд▓ рдпрд╛ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ (GCC рдФрд░ Microsoft OpenMP) рд╕реЗ рдкреБрд░рд╛рдиреЗ OpenMP рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рднреА рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХреА рдЬрд╛рдПрдЧреА, рдХреНрдпреЛрдВрдХрд┐ VTune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ XE рдЙрдирдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдЪрд░рдг рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдирдХреНрд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдереЗред

рдпрджрд┐ рдЖрдкрдХрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрдВрдЯреЗрд▓ рдХрдореНрдкреЛрдЬрд╝рд░ XE 2013 SP1 рд╕реЗ рдкреБрд░рд╛рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ KMP_FORKJOIN_FRAMES 1 рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╡реАрдЯреАрдПрди рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдореЗрдВ рд╣реА "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░" рдбрд╛рдпрд▓реЙрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдореЗрдВ, рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

# export KMP_FORKJOIN_FRAMES=1

рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрд░-рд╕реЛрд░реНрд╕-рдЗрдиреНрдлреЛ = 2 рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рдХрд░реЗрдВред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдПрдХ рд╕рдВрдХрд▓рди рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:

# icc -openmp -O3 -g -parallel-source-info=2 omptest.cpp work.cpp -o omptest

рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ: рд╣рдо рд╡реАрдЯреАрдПрди рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореБрдирд╛рдлрд╛ рдХрдорд╛рддреЗ рд╣реИрдВ:



рдкреЗрд╢ рд╣реИ OpenMP рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░


OpenMP рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдлреНрд░реЗрдо рдбреЛрдореЗрди рдХреЗ рд░реВрдк рдореЗрдВ VTune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ XE рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдлрд╝реНрд░реЗрдо рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЧреИрд░-рдЕрддрд┐рд╡реНрдпрд╛рдкреА рд░рди рд╕рдордп рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИред рдпрд╛рдиреА рдкреВрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд░рди рдЯрд╛рдЗрдо рдХреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреЗрдЬ 1 (рдЖрд░рдВрднреАрдХрд░рдг), рд╕реНрдЯреЗрдЬ 2 (рдХрд╛рд░реНрдп), рд╕реНрдЯреЗрдЬ 3 (рдкреВрд░реНрдгрддрд╛)ред рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рддреАрди рдлреНрд░реЗрдо рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд╝реНрд░реЗрдо рдХреЛ рдЕрдХреНрд╕рд░ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡рд┐рдЪрд╛рд░ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╡реАрдЯреАрдПрди рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдореЗрдВ рдПрдХ рдлреНрд░реЗрдо рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╡реНрдпрд╛рдкрдХ рд╣реИред рдлрд╝реНрд░реЗрдо рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдереНрд░реЗрдбреНрд╕ рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдирд╛рдВрддрд░ OpenMP рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлреНрд░реЗрдо рдбреЛрдореЗрди рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рд╕реЛрд░реНрд╕ рдлрд╛рдЗрд▓ рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░реЛрдВ рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдбреЛрдореЗрди рдлреНрд░реЗрдо рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рд░ рдЪреБрдиреМрддреА рдПрдХ рдлреНрд░реЗрдо рд╣реИред рдлрд╝реНрд░реЗрдо - рдЙрдирдХреЗ рдкреБрдирд░реНрдорд┐рд▓рди (рд╕рдореНрдорд┐рд▓рд┐рдд) рдХреЗ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдбреНрд╕ (рдХрд╛рдВрдЯрд╛) рдХреЗ рдЕрд▓рдЧрд╛рд╡ (рдпрд╛ рдкреНрд░рд╛рд░рдВрдн) рдХреЗ рдмрд┐рдВрджреБ рд╕реЗ рдЕрд╡рдзрд┐ред рдлрд╝реНрд░реЗрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рдУрдкрдирдПрдордкреА рдХреЗ рджреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд░реНрдорд╛рдг рд╣реИрдВ, рджреЛ рдХреНрд╖реЗрддреНрд░ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ VTune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ XE рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдбреЛрдореЗрди рдлрд╝реНрд░реЗрдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рджреЛ рдбреЛрдореЗрди рдлрд╝реНрд░реЗрдо рд╣реЛрдВрдЧреЗ:

 int main() { #pragma omp parallel for // frame domain #1, frame count: 1 for (int i=0; i < NUM_ITERATIONS; i++) { do_work(); } for (int j=0; j<4; j++) { #pragma omp parallel for // frame domain #2, frame count: 4 for (int i=0; i < NUM_ITERATIONS; i++) { do_work(); } } } 

рдкрд╣рд▓реЗ рдбреЛрдореЗрди рдлреНрд░реЗрдо рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдлрд╝реНрд░реЗрдо рдбреЛрдореЗрди # 1 рдореЗрдВ рдХреЗрд╡рд▓ 1 рдлрд╝реНрд░реЗрдо рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рд╕рдорд╛рдирд╛рдВрддрд░ рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдХреЛ 16 рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рддреБрд░рдВрдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рджреВрд╕рд░рд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░ (рдлреНрд░реЗрдо рдбреЛрдореЗрди # 2) рд▓реВрдк рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ 4 рдмрд╛рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдлрд╝реНрд░реЗрдо рдбреЛрдореЗрди # 2 рдореЗрдВ VTune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ XE рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ 4 рдлрд╝реНрд░реЗрдо рд╣реЛрдВрдЧреЗред

рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо Intel OpenMP рд░рдирдЯрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╡реАрдЯреАрдПрди рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдПрдХреНрд╕рдИ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ-рдКрдкрд░ рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ рдФрд░ "рдлрд╝реНрд░реЗрдо рдбреЛрдореЗрди / рдлрд╝реНрд░реЗрдо рдкреНрд░рдХрд╛рд░ ..." рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣реАрдХрд░рдг рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред



рд╕рдорд╛рдирд╛рдВрддрд░ OpenMP рдХреНрд╖реЗрддреНрд░ рдФрд░ рдЙрдирдХреА рд╕рдВрдмрдВрдзрд┐рдд рдереНрд░реЗрдб рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЯрд╛рд╕реНрдХ рдФрд░ рдлреНрд░реЗрдореНрд╕ рдЯреИрдм рдореЗрдВ рднреА рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХреНрд╖реЗрддреНрд░


рд╣рд░ рд╕рдордп, рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдмрд┐рддрд╛рдП рдЧрдП рд╕реАрдкреАрдпреВ рдХреЛ рдПрдХ рдлреНрд░реЗрдо рдбреЛрдореЗрди рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ "[рдХреЛрдИ рдлреНрд░реЗрдо рдбреЛрдореЗрди - рдХрд┐рд╕реА рднреА рдлреНрд░реЗрдо рдХреЗ рдмрд╛рд╣рд░]" рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рднрд╛рдЧ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



рдУрд╡рд░рд╣реЗрдб рдФрд░ рд╕рдХреНрд░рд┐рдп рдкреНрд░рддреАрдХреНрд╖рд╛ (рдУрд╡рд░рд╣реЗрдб рдФрд░ рд╕реНрдкрд┐рди рд╕рдордп)


рдУрдкрдирдПрдордкреА рдореЗрдВ рдУрд╡рд░рд╣реЗрдб рд╕рдордп рдереНрд░реЗрдб рдореИрдиреЗрдЬрдореЗрдВрдЯ, рдХрд╛рд░реНрдп рд╡рд┐рддрд░рдг, рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ, рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдЖрджрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЖрдВрддрд░рд┐рдХ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдордп рд╣реИред рдпрд╣ рд╕рдордп рдЙрдкрдпреЛрдЧреА рдЧрдгрдирд╛рдУрдВ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИред рд╕рдХреНрд░рд┐рдп рд╕реНрдкрд┐рди рд╕рдордп - рд╡рд╣ рд╕рдордп рдЬреЛ рд╕реАрдкреАрдпреВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп рд╕реНрдкрд┐рди рдХрд░реЗрдЧрд╛ред рдУрдкрдирдПрдордкреА рд╕реНрдЯреНрд░реАрдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рднреА рд╕реНрдкрд┐рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдмреИрд░рд┐рдпрд░ рдкрд░ред

рдУрд╡рд░рд╣реЗрдб рдФрд░ рд╕рдХреНрд░рд┐рдп рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЛ рдЬреНрдЮрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдФрд░ рдХреЙрд▓ рдЕрдиреБрдХреНрд░рдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрдХрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕реАрдкреАрдпреВ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рддреЗ рд╣реИрдВред рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ OpenMP рдлрд╝рдВрдХреНрд╢рди рдереНрд░реЗрдбреНрд╕, рдХрд╛рд░реНрдпреЛрдВ рдЖрджрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдордп рдУрд╡рд░рд╣реЗрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╕рдХреНрд░рд┐рдп рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рднреА "рдорд░реЛрдбрд╝" рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдУрд╡рд░рд╣реЗрдб рдФрд░ рд╕рдХреНрд░рд┐рдп рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЛ рдЗрдВрдЯреЗрд▓ рдУрдкрдирдПрдордкреА, рдЬреАрд╕реАрд╕реА рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдУрдкрдирдПрдордкреА рд░рдирдЯрд╛рдЗрдо, рдЗрдВрдЯреЗрд▓ рдереНрд░реЗрдбрд┐рдВрдЧ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдФрд░ рдЗрдВрдЯреЗрд▓ рд╕рд┐рд▓реНрдХ рдкреНрд▓рд╕ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдкрд░рд┐рджреГрд╢реНрдп 1: рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрддреБрд▓рд┐рдд рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░


рдореЗрд░реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд▓рд╛рдЗрди 54 рдкрд░ omptest.cpp рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдиреАрдЪреЗ-рдКрдкрд░ рдЯреИрдм рдХреЛ рджреЗрдЦреЗрдВ, рдЬрд┐рд╕реЗ "рдлрд╝реНрд░реЗрдо рдбреЛрдореЗрди / рдлрд╝реНрд░реЗрдо рдкреНрд░рдХрд╛рд░ / рдлрд╝реНрд░реЗрдо / рдереНрд░реЗрдб / рдлрд╝рдВрдХреНрд╢рди / рдХреЙрд▓ рд╕реНрдЯреИрдХ" рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



рдбреЛрдореЗрди рдлрд╝реНрд░реЗрдо рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝реНрд░реЗрдо рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдЦреЛрд▓рдиреЗ рд╕реЗ 8 рдзрд╛рдЧреЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ 4-рдХреЛрд░ рд╣рд╛рдЗрдкрд░ рдереНрд░реЗрдбрд┐рдВрдЧ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реАрдкреАрдпреВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рд╣реИ (рд╕реАрдкреАрдпреВ рд╕рдордп рдкрдЯреНрдЯреА рдХрд╛ рд╣рд░рд╛ рд░рдВрдЧ), рд╕рднреА 8 рдзрд╛рдЧреЗ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИрдВ рдФрд░ рд▓рдЧрднрдЧ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдордпрд░реЗрдЦрд╛ рдкрд░ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рдЖрда рдереНрд░реЗрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рд╕реАрдкреАрдпреВ рдЙрдкрдпреЛрдЧ рдХреЛ рднреА рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрд╢ рдорд┐рд╕реНрдб рдпрд╛ SIMD рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдкрд░реНрдпрд╛рдкреНрдд рдЙрдкрдпреЛрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди OpenMP рдзрд╛рд░рд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдп рд╕рдВрддреБрд▓рди рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдкрд╛рдИ рдЧрдИред

рд▓рд╛рдЗрди 54 рдкрд░ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб:

 #pragma omp parallel for schedule(static,1) // line 54 for (int index = 0 ; index < oloops ; index++) { double *a, *b, *c, *at ; int ick ; a = ga + index*84 ; c = gc + index*84 ; fillmat (a) ; ick = work (a, c,gmask) ; if (ick > 0) { printf("error ick failed\n") ; exit(1) ; } } 

рдкрд░рд┐рджреГрд╢реНрдп 2: рдЕрд╕рдВрддреБрд▓рд┐рдд рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░


рд▓рд╛рдЗрди 82 рдкрд░ рд╕реНрдерд┐рдд рдХреНрд╖реЗрддреНрд░ рдЗрддрдирд╛ рд╕рдВрддреБрд▓рд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЙрдкрд▓рдмреНрдз 8 рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 4 рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╢реЗрд╖ 4 рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рд╕реНрддрд░ (рд▓рд╛рд▓) рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ:



рд▓рд╛рдЗрди 82 рдкрд░ рдХреЛрдб (рдмрд╕ рд╣рд░ рджреВрд╕рд░реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛):

 #pragma omp parallel for schedule(static,1) // line 82 for (int index = 0 ; index < oloops ; index++) { double *a, *b, *c, *at ; int ick ; if (index%2 == 0) { a = ga + index*84 ; c = gc + index*84 ; fillmat (a) ; ick = work (a, c, gmask) ; if (ick > 0) { printf("error ick failed\n") ; exit(1) ; } } } 


рдкрд░рд┐рджреГрд╢реНрдп 3: рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдореБрджреНрджреЗ


рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдПрдХ рдлреНрд░реЗрдо рдбреЛрдореЗрди рдФрд░ рдПрдХ рдлреНрд░реЗрдо рдерд╛ред 147 рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрдИ рдлрд╝реНрд░реЗрдо рд╣реИрдВ:



рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реНрд░реЗрдо рдХрд╛ CPU рд╕рдордп рдмрд╣реБрдд рдХрдо рд╣реИ - рдпрд╣ рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ рднреА рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рд╕рдордпрд░реЗрдЦрд╛ рдореЗрдВ рдлрд╝реНрд░реЗрдо рдкрд░ рд╣реЛрд╡рд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░реИрдиреНрдпреБрд▓реИрд░рд┐рдЯреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ, рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рд╣рдо рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рдХрдо рд╕рдорд╛рдирд╛рдВрддрд░ рдУрдкрдирдПрдордкреА рдХреНрд╖реЗрддреНрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдУрд╡рд░рд╣реЗрдб рдФрд░ рдХрдо рд╕реАрдкреАрдпреВ рдЙрдкрдпреЛрдЧ рдорд┐рд▓рддрд╛ рд╣реИред

рдХреЛрдб резрек 147 рдкрд░:

 for (q = 0 ; q < LOOPS ; q++) { #pragma omp parallel for schedule(static,1) firstprivate(tcorrect) lastprivate(tcorrect) // line 147 for (int index = 0 ; index < oloops ; index++) { double *la, *lc; int lq,lmask ; la = ga + index*84 ; lc = gc + index*84 ; lq = q ; lmask = gmask ; ick = work1(ga, gc, lq,lmask) ; if (ick == VLEN) tcorrect++ ; } } 

рдкрд░рд┐рджреГрд╢реНрдп 4: рд╕рд┐рдВрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ


рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдПрдХ рдЧрдВрднреАрд░ рдкреНрд░рджрд░реНрд╢рди рдЕрдбрд╝рдЪрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреА рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдХреЗ рд▓рд┐рдП, "рддрд╛рд▓реЗ рдФрд░ рдХрдорд░" рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрдХрддреНрд░ рдХрд░реЗрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдирдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ" рдФрд░ "рдЗрдВрдЯреЗрд▓ рд░рдирдЯрд╛рдЗрдореНрд╕ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ" рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред

рдмреЙрдЯрдо-рдЕрдк рдкреИрдирд▓ рдЖрдкрдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рджрд┐рдЦрд╛рдПрдЧрд╛:



VTune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ XE OpenMP рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ omp рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рд░реНрдорд╛рдг, рдпрд╛ OpenMP рд░рдирдЯрд╛рдЗрдо рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬреЗрд╢рди рдмреИрд░рд┐рдпрд░ред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд╡реНрдпрддреАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдХрдИ рдЫреЛрдЯреА рдЕрд╡рдзрд┐ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдПрдБ, рдпрд╛ рдХрдИ рд▓рдВрдмреА рдЕрдкреЗрдХреНрд╖рд╛рдПрдБред VTune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ XE рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдзрд╛рдЧрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛ (рд╕реНрдкрд┐рди рдкреНрд░рддреАрдХреНрд╖рд╛), рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реНрдЯреИрдВрдбрдмрд╛рдп рд░рд╛рдЬреНрдп рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ред рд╕рдордпрд░реЗрдЦрд╛ рд╕рдВрдХреНрд░рдордг рдХреА рдПрдХ рддрд╕реНрд╡реАрд░ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ - рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдкреАрд▓реА рд░реЗрдЦрд╛рдПрдВред рдЙрдирдореЗрдВ рд╕реЗ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рд╡рд╛рд╣ рдиреЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛, рдХрд┐рддрдиреА рдмрд╛рд░, рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдерд╛, рдХрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛, рдЖрджрд┐ред

рд▓рд╛рдЗрди 118 рдкрд░ рдХреЛрдб:

 #pragma omp parallel for schedule(static,1) for (int index = 0 ; index < oloops ; index++) { #pragma omp critical (my_sync) // line 118 { double *a, *b, *c, *at ; int ick ; a = ga + index*84 ; c = gc + index*84 ; fillmat (a) ; ick = work (a, c,gmask) ; if (ick > 0) { printf("error ick failed\n") ; exit(1) ; } } } 

рд╕рд╛рд░рд╛рдВрд╢


Intel VTune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ XE рдЖрдкрдХреЛ OpenMP рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИред рдЖрдк рд╕реАрд░рд┐рдпрд▓ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЛрдб рдХреЗ рд╕рдВрддреБрд▓рди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрдВрдЯреЗрд▓ рд╡реАрдкреНрдпреВрди рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдПрдХреНрд╕рдИ рдЖрдкрдХреЛ рдУрдкрдирдПрдордкреА рдзрд╛рд░рд╛рдУрдВ, рдЧреНрд░реИрдиреНрдпреБрд▓реИрд░рд┐рдЯреА рдореБрджреНрджреЛрдВ, рдУрд╡рд░рд╣реЗрдб рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдФрд░ рд╕рдордп рдХреЗ рдкреИрдЯрд░реНрди рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рдмреАрдЪ рд▓реЛрдб рд╕рдВрддреБрд▓рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ OpenMP рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдЖрдБрдХрдбрд╝реЗ рдмрд╛рдВрдзрдиреЗ рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭ рдкрд╛рдПрдВрдЧреЗред рдЖрдк Intel OpenMP рд░рдирдЯрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдмрд╕реЗ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд░реВрдкрд░реЗрдЦрд╛ рднреА рд╕рдВрднрд╡ рд╣реИ (GCC рдФрд░ Microsoft OpenMP)ред

Source: https://habr.com/ru/post/In204058/


All Articles