Znn3bq.jpeg
±±¾©Ê¯ÓÍ»¯¹¤Ñ§Ôº2026ÄêÑо¿ÉúÕÐÉú½ÓÊÕµ÷¼Á¹«¸æ
²é¿´: 1597  |  »Ø¸´: 2

ChemiAndy

ľ³æ (ÕýʽдÊÖ)


[½»Á÷] openMP²¢ÐÐÈëÃÅ ÒÑÓÐ2È˲ÎÓë

ǰÑÔ£ºÏÂÃæÊÇÔڲμÓÍêCalculquebecµÄÒ»¸ö¹ØÓÚOpenMPµÄworkshopÖ®ºó£¬½áºÏËûÃǸøµÄ½Ì³Ì¡¢ÒÔ¼°ÍøÉÏËÑË÷ºóд³ÉµÄ¡£ÒÔǰ´ÓûÓнӴ¥¹ýopenMP£¬Òò´Ë£¬ÄÑÃâÓдíÎóÖ®´¦¡£Ê±¼ä²»³äÔ££¬Òò´Ë£¬ÆäÖеĴúÂë¼ÈÓÐFORTRANµÄ£¬ÓÖÓÐC++µÄ¡£²»¹ý£¬ÎªÁË·½±ã¶ÁÕßÃë¶®£¬ÎÒ°Ñ´óÁ¿µÄϸ½ÚɾȥÁË£¬±ÈÈç±äÁ¿µÄÉùÃ÷£¬³õÖµµÈ¡£Çë×ÔÐÐÄÔ²¹¡£

1. openMPIºÍopenMPµÄÇø±ð

ÏÖÔÚ¼ÙÉèÓÐÁ½ÌõÉú²úÏߣ¬Í¬Ê±Ö´ÐÐÒ»¸öÈÎÎñ£¬ÄÇô´æÔÚÁ½ÖÖÇéÐΡ£Ò»ÖÖÇé¿öÊÇÕâÁ½ÌõÉú²úÏ߸÷×ÔÓÐ×Ô¼ºµÄÔ­²ÄÁÏ£¯³ÉÆ·²Ö¿â£¬»¹ÓÐÒ»ÖÖÇé¿öÊÇËûÃǹ²ÏíÒ»¸öÔ­ÁÏ³ÉÆ·²Ö¿â¡£ÕâµÄÔ­ÁÏ³ÉÆ·²Ö¿âµ±È»ÊÇÖ¸Äڴ棬¶øÉú²úÏß¾ÍÊÇ´¦ÀíÆ÷CPU¡£ÕâÁ½ÖÖÇé¿ö£¬Ç°ÕßÊôÓÚ·Ö²¼Ê½²¢ÐУ¬MPI·½Ê½£¬¼´³£¼ûµÄ´óÐÍ·þÎñÆ÷£¬Óкܶà½Úµã²¢ÐÐÔËÐÐͬһ¼ÆËãÈÎÎñµÄÇé¿ö¡£ºóÕßÊôÓÚopenMP·½Ê½²¢ÐУ¬¼´µ¥»ú¶àºË¶àÏ̵߳çÄԵIJ¢ÐУ¬Ö»ÓÐÒ»¸öÄڴ棬ËùÒÔÒª¹²Ïí¡£´ÓÕâÀï¿´£¬¶þÕßµÄÇø±ð²»´ó£¬µ«Êµ¼ÊʵʩÉϲî±ð·Ç³£¾Þ´ó¡£MPI·½Ê½ÐèÒª°Ñ²¢ÐеĴúÂëºÍʵ¼ÊµÄ¹¤×÷´úÂë½áºÏÆðÀ´£¬±à³ÌÉÏÁé»îµ«¸´ÔÓ¡£¶øopenMPÔò¼òµ¥¶àÁË£¬´ó¶àÊýÇé¿öÏÂÖ»ÐèÔÚÔ­ÓеĴ®ÐдúÂëÉÏÔö¼ÓһЩ²¢ÐÐÓïÑÔÖ¸Áî¼´¿É£¬¹¤×÷´úÂë½öÐèºÜС·ù¶ÈµÄÐ޸ġ£´ËÍ⣬ĿǰÁ÷ÐеÄC++/Fortran±àÒëÆ÷¶¼ÒѾ­ÄÚÖÃÁ˶ÔopenMPµÄÖ¸ÁîºÍ¿âµÄÖ§³Ö¡£¶øMPIµÄÖ¸ÁîºÍ¿âÎļþÔòÐèÒª¶îÍâµÄ±àÒë°²×°¡£µ±È»£¬MPIÔÚ¼¯Èº·þÎñÆ÷ÉϵıíÏÖÒ²¸üΪǿ´ó£¬²»ÏñopenMPÖ»ÄÜÔÚ¶àºËµÄ¹¤×÷Õ¾µ¥»úÉϳÑÍþ·ç¡£

2. ²¢ÐÐÐèÒª½â¾öµÄÎÊÌ⣬ÒÔopenMPΪÀý
openMP²¢ÐÐÈëÃÅ
ÏÈÀ´½âÊͼ¸¸ö¼òµ¥Ãû´Ê¡£Ê×ÏÈÊÇÖ¸Áîdirective£¬openMPµÄʵÏÖÊÇͨ¹ýÔÚ´®ÐÐcodeÖмÓopenMPµÄ²¢ÐÐÖ¸ÁîʵÏֵġ£ÕâЩָÁîÔÚFORTRANÖÐÊÇ !$OMP¿ªÍ·µÄ¡£¶øÔÚFORTRANÖУ¬!¿ªÍ·µÄ¶¼ÊÇ×¢ÊÍÓï¾ä¡£Ò»°ãÇé¿öÏ£¬×¢ÊÍÓï¾äÊDz»±»±àÒëµÄ¡£µ«ÊÇ£¬Èç¹ûÄã±àÒëµÄʱºòÖ¸¶¨ÁË-fopenmp£¬Ôò±àÒëÆ÷»á¶ÔËùÓÐÒÔ!$¿ªÍ·µÄopenMPÓï¾ä¼ÓÒÔ±àÒë¡£ÕæÊÇÒ»¸ö´ÏÃ÷µÄ½â¾ö°ì·¨¡£ÕâʹµÃÄã¿ÉÒÔ¼ÈÄÜÒÔ´®Ðз½Ê½±àÒ룬ҲÄÜÒÔ²¢Ðз½Ê½±àÒ룬¶øÎÞÐè¶Ôcode½øÐÐÈκÎÐ޸ġ£

Æä´Î£¬Ò»¸ö×îÖØÒªµÄ¸ÅÄîÊDZäÁ¿µÄ˽ÓÐ(PRIVATE)ºÍ¹«ÓÐ(SHARED)ÊôÐÔ¡£Õâ¸öºÃÀí½â£¬Ã¿¸öÈÎÎñ¶¼ÓÐ×Ô¼ºËùÔڵĴ¦ÀíÆ÷ÐòºÅ¡¢Ñ­»·¼ÆÊýÆ÷µÈµÈ£¬ÕâЩµ±È»²»Äܹ²Ïí¡£µ«ÊÇ£¬ÓÉÓÚopenMPµÄ¹²ÏíÄÚ´æµÄÌØÕ÷£¬Èç¹ûÄã²»°ÑÕâЩ˽ÓеıäÁ¿ÉùÃ÷³öÀ´£¬¾Í»á³ö´óÂÒ×Ó¡£ÏÂÃæµÄÀý×ÓÖлá½âÊÍ£¬Ò»¿´¾ÍÄÜÃ÷°×¡£

(1) ÈÎÎñ·ÖÅä»úÖÆ

Ê×ÏÈÀ´¿´×î¼òµ¥µÄÈÎÎñ·ÖÅä»úÖÆ¡£Èç¹ûÄã¶ÔÒ»¸öFORTRAN codeÖдòÓ¡helloµÄÓï¾äǰºóÔö¼ÓopenMPµÄPARALLELÖ¸ÁÈçÏ£º
CODE:
PROGRAM hello
!$ USE omp_lib
!$OMP PARALLEL
WRITE(*,*) "Hello, world!"
!$OMP END PATALLEL
END PROGRAM hello

ÄÇô£¬µ±Äã±ãÒÔºóÖ´ÐеÄʱºò£¬Ã¿Ò»¸öÏß³Ì(Processor)¶¼»áÔËÐÐÕâ¸öwriteÓï¾ä£¬¼´Óм¸¸öºË¾Í»áÊä³ö¼¸¸ö¡°Hello, world!¡±

Äã»á˵£¬Õâ½ÐʲôÈÎÎñ·ÖÅ䣬²»¹ýÖØ¸´Ö´ÐС£ÎÒÃÇÐèÒªµÄÊǶԱÈÈç1000¸ö¼ÆËã·Ö¸ø2¸ö´¦ÀíÆ÷£¬Ã¿¸öÖ´ÐÐÆäÖеÄ500¸ö£¬ÒÔ½ÚԼʱ¼ä¡£Êǵģ¬ÎÒÃDz»·Á°ÑÉÏÃæ×î¼òµ¥µÄÇé¿ö³ÆÎªÆëÓ¦»úÖÆ£¬¼´ÆëÉù´ðÓ¦£¬ËüÕ¹ÏÖÁ˲¢ÐÐÖ¸Áî¶Ô¹¤×÷Óï¾ä×î¼òµ¥µÄÓ°Ï졣Ȼºó£¬ÎÒÃÇÀ´Ì¸Ì¸ÕæÊµµÄÈÎÎñ·ÖÅä¡£

µÚÒ»ÖÖÇé¿ö£¬ÒÔÉÏÃæµÄÀý×ÓΪÀý£¬ÎªÁ˽øÒ»²½ÐÎÏ󻯣¬ÎÒÃÇ¿ÉÒÔ°ÑÈÎÎñÏëÏó³ÉÒªÉú²ú1000˫Ь¡£´®Ðеϰ£¬¿ÉÒÔ¶ÔÒ»¸öÉú²úЬµÄÖ¸Áî¼ÓÉÏDOÑ­»·Ö¸Áѭ»·1000´Î¡£²¢Ðеϰ£¬ÎÒÃÇÖ»ÐèÔÚÑ­»·Ö¸ÁîÓï¾äǰºóÌ×ÉÏÒ»¸öopenMPµÄPARALLEL FORÓï¾ä£¬±àÒëÆ÷¾Í»áºÜ´ÏÃ÷µØ°ÑÈÎÎñƽ¾ù·ÖÅä¸øÃ¿¸ö´¦ÀíÆ÷¡£
CODE:
!$OMP PARALLEL PRIVATE(i) SHARED(Ь)
!$OMP DO
DO i=1,1000
   write(*,*) 'ÎÒÔÚ×öЬ...'
END DO
!$OMP END PARALLEL

ÆäÖеÄDO ... END DOÊÇ´®ÐеÄÑ­»·Óï¾ä¡£¶øÌ×ÉϵÄ!$¿ªÍ·µÄÖ¸ÁîÔò½«codeת»¯Îª²¢ÐС£ÆäÖеÄPRIVATE, SHAREDÔòÊǶÔ˽ÓС¢¹²ÓбäÁ¿µÄÇø·Ö£¬Ï¸½ÚÇëÄÔ²¹£¬Äã¶®µÃ¡£

ÉÏÃæÕâÖÖ·ÖÅäÈÎÎñµÄ·½Ê½£¬°ÑÑ­»·Æ½¾ù·ÖÅäµ½¿ÉÓô¦ÀíÆ÷ÉÏÈ¥£¬ÎÒÃdzÆÎªÆ½¾ù·ÖÅä»úÖÆ¡£

µ«ÊÇ£¬ÓеÄʱºò£¬ÄãÏëÖ¸¶¨Ò»ºÅÉú²úÏßÉú²úÄÐЬ£¬¶þºÅÉú²úÏßÉú²úŮЬ¡£ÕâÖÖÇéÐÎÏÂÄã¾õµÃÓ¦¸ÃÔõôʵÏÖ£¿Äã»á˵£¬ºÜ¼òµ¥£¬ÓÃÌõ¼þÅжÏÓï¾äIF½øÐÐÅжϡ£Êǵ쬴ó¸ÅÊÇÕâ¸öÑù×ӵģº
CODE:
!$OMP PARALLEL PRIVATE(rank)
!$ rank = omp_get_thread_num()
IF (rank == 0) THEN
    WRITE(*,*) 'ÎÒÔÚ×öÄÐЬ...'
END IF
IF (rank ==1) THEN
    WRITE(*,*) 'ÎÒÔÚ×öŮЬ...'
END IF
!$OMP END PARALLEL

ÉÏÃæµÄcode£¬ÏÈÓÃÒ»¸öomp_get_thread_num()»ñÈ¡µ±Ç°´¦ÀíÆ÷µÄÐòºÅrank£¬È»ºóÓÃIF°ÑÈÎÎñÖ¸ÅÉÏÂÈ¥¡£µ±È»£¬±äÁ¿rankÒªÔÚÕâ¶Îcode֮ǰÏÈÉùÃ÷²¢¸³³õÖµ£¬±£Ö¤´®ÐеÄʱºòÒ²ÄÜ·ûºÏÆäÖеÄÒ»¸öÌõ¼þ£¬²»¹ýÄÇÖÖÇé¿öÏÂÄãÖ»ÄÜ×öÒ»ÖÖЬÁË¡£´ËÍ⣬³ýÁËomp_get_thread_num()£¬ÁíÍâÒ»¸öÖØÒªµÄÖ¸ÁîÊÇomp_get_num_threads()ÓÃÀ´»ñÈ¡µ±Ç°×ܹ²Óм¸¸ö´¦ÀíÆ÷¡£×¢ÒâºóÕßµÄthreadsÊǸ´Êý¡£

ÉÏÃæÕâÖÖ·ÖÅäÈÎÎñ»úÖÆÏñ²»ÏñÁÐÄþÀÏÈ˼ҵÄÉç»áÖ÷ÒåµÄ¼Æ»®¾­¼ÃϵÄÇ¿ÐÐÖ¸ÅÉ·½Ê½£¿ÎÒÃDz»·Á³ÆÎª¡°¼Æ»®¾­¼Ã»úÖÆ¡±¡£ÕâÖÖ»úÖÆÏë¶ÔÓÚµÚÒ»ÖÖ¸üΪÁé»î£¬Äã¿ÉÒÔ¶Ô²»Í¬´¦ÀíÖ¸Åɲ»Í¬µÄÈÎÎñ¡£

²»¹ý£¬ÀúÊ·ÔçÒÑÖ¤Ã÷£¬¼Æ»®¾­¼ÃÊÇʧ°ÜµÄ£¬Âí¿Ë˼Ö÷ÒåµÄ¼Æ»®¾­¼Ã¾ÍÊdzô¹·Êº¡£ÔÚ±à³ÌÉÏ£¬ÄãÓöµ½µÄÎÊÌâ¿ÉÄÜÊÇ£¬¼ÙÈçÄãÓÐ2¸ö´¦ÀíÆ÷£¬µ«ÈÎÎñ»®·Ö³ÉÁËÈý¿é£¬»òÕ߸ü¶à¿é¡£×÷Ϊ´ÏÃ÷µÄÈË£¬Äã²¢²»ÏëÇ¿ÐÐÖ¸ÅÉ£¬¶øÊÇÏ£Íû²ÉÓÃÊг¡¾­¼ÃµÄ·½Ê½£¬Èô¦ÀíÆ÷×ÔÐÐÀ´ÈÏÁìÈÎÎñ£¬È»ºó£¬Ë­ÏÈÍê³É×Ô¼ºµÄÒ»¿é£¬¾Í×Ô¶¯À´ÈÏÁìÏÂÒ»¿é¡£ÕâÑù£¬¾¡¿ÉÄܼõÉÙʱ¼äµÄÀË·Ñ¡£God£¬ÕâÕæÊÇÌì²ÅµÄÏë·¨£¡ÕâÖÖ·ÖÅä»úÖÆ£¬ÎÒÃdzÆÎª¡°ÄÜÕß¶àÀÍ»úÖÆ¡±£¬openMPÖÐʹÓÃSECTIONSÖ¸Áî¡£
CODE:
!$OMP PARALLEL PRIVATE(...) SHARED(...)
!$OMP SECTIONS                     //¿ªÆôÈÎÎñÁбí
!$OMP SECTION
    WRITE(*,*) '×öЬÈÎÎñÒ»...'
!$OMP SECTION
    WRITE(*,*) '×öЬÈÎÎñ¶þ...'
!$OMP SECTION
    WRITE(*,*) '×öЬÈÎÎñÈý...'
!$OMP END SECTIONS            // ½áÊøÈÎÎñÁÐ±í£¬×¢ÒâSECTIONµÄµ¥¸´Êý±ä»¯
!$OMP END PARALLEL

×¢ÒâÕâ×îºóÒ»ÖÖģʽ·Ç³£Áé»î¡£²»¹ý£¬ÕâÈýÖÖ²¢Ðнâ¾ö»úÖÆ£¬¶¼Ö»ÄÜÊÊÓÚ¸÷×ÓÈÎÎñÖ®¼ä²»Ï໥ÒÀÀµµÄÇéÐΡ£Èç¹ûºóÒ»ÈÎÎñµÄ¿ªÊ¼ÒÀÀµÓÚǰһÈÎÎñµÄ½á¹û£¬ÄÇôÕâÖÖÇéÐÎÏÂÄܲ¢ÐÐÂð£¿Çë¿´ÏÂÃæµÄ¹ØÓÚÕâÒ»ÎÊÌâµÄÌÖÂÛ¡£

(2) ³åÍ»½â¾ö»úÖÆ

ÒòÎªÇ°Ãæ¿¼ÂǵÄÈÎÎñ£¬¶¼ÊÇÊý¾ÝÖ®¼ä²»»¥ÏàÒÀÀµµÄÇéÐΡ£µ«ÊÇ£¬ÎÒÃÇÔÚ²¢Ðл¯Ò»¶ÎÒÑÓеĴ®ÐÐcodeʱ£¬Óöµ½µÄ¸ü¶àµÄÊǸ÷×ÓÈÎÎñµÄÊý¾Ý½á¹ûÏ໥ÒÀÀµµÄÇéÐΡ£¿¼ÂÇÒ»¸öºÜ³£¼ûµÄÇéÐΣº¼ÙÈçÓÐ1000¸öÏä×Ó£¬Ã¿¸öÏä×ÓÀïÓÐδ֪ÊýÄ¿µÄЬ×Ó£¬ÄãÐèÒªÖªµÀ×ܵÄЬ×ÓÊý¡£ÔÚ´®ÐеÄÇé¿öÏ£¬Äã±àдÁËÒ»¸öÑ­»·code£¬ÒÀ´Îͳ¼ÆÃ¿Ò»¸öÏä×ÓÀïÃæµÄЬ×ÓÊý£¬°Ñÿ¸öÏä×ÓÖеÄЬ×ÓÊý¼Óµ½µ±Ç°×ÜÊýÖв¢Ð´µ½Ò»¿éСºÚ°åÉÏ¡£(ÏÂÃæ¸ÄÓÃC++ pseudo code)
CODE:
total=0;
for (i=0, i<1000, i++)
  total+=num(i);

¶ÔÕâÑùµÄÒ»¸öcode½øÐÐopenMPµÄÌ×Óò¢ÐÐÓï¾ä£¬
CODE:
total=0;
#pragma omp parallel for private(i) shared(total, num)  //×¢ÒâC++µÄOMPÖ¸ÁîÓëFORTRAN²»Í¬£¬µ«ÒìÇúͬ¹¤
for (i=0, i<1000, i++)
  total+=num(i);

½á¹ûµ±È»»á³ö´í¡£ÒòΪÌ×Óò¢ÐÐÖ¸ÁîµÄ½á¹û£¬ÊǰÑÏä×ÓÆ½¾ù·ÖÅä¸øÃ¿¸ö´¦ÀíÆ÷£¬Ã¿¸ö´¦ÀíÆ÷ͳ¼ÆÍê×Ô¼ºËù¼Æ×ÜÊýÖ®ºó£¬¶¼»áÈ¥¸ÄдСºÚ°åÉϵÄЬ×Ó×ÜÊý¡ª¡ªÒ»¸ö²»¿ÉÄÜ˽Óл¯µÄ¹«ÓбäÁ¿¡£Äã˵£¬ÕâºÃ°ì£¬´®ÐÐcodeÐ޸ijÉÿ¸öÏä×ÓµÄЬ×ÓÊý×÷Ϊһ¸öÊý×éÔª´æµ½Ò»¸öÊý×éÖÐÈ¥£¬×îºóÊý×éÔªÇóºÍ£»ÕâÑù²¢ÐÐʱÿ¸ö´¦ÀíÆ÷¶¼Ö»»áÐ޸IJ»Í¬µÄÊý×éÔª¡£ÎÊÌâÊÇ£¬ÕâÖÖ·½Ê½²»½öºÄÄڴ棬¶øÇÒÔö¼ÓÁ˶îÍâµÄÇóºÍ¿ªÏú¡£´®ÐÐcode²»Ì«¿ÉÄÜÕâÑù±àд¡£Òò´Ë£¬ÎÒÃDz»ÌÖÂÛרΪºóÀ´Ôö¼ÓopenMP¶øÌرðÉè¼ÆcodeµÄÌØÊâÇéÐΣ¬¶øÖ»¿¼ÂÇ×î¿ÉÄܳöÂé·³µÄÒ»°ãÇéÐΡ£


ÕâÖÖÇé¿öÏ£¬openMPÌṩµÄµÚÒ»ÖÖ½â¾ö˼·ÊÇ¡°»¥³âËø»úÖÆ¡±¡£ÀýÈ磬ÔÚÇóºÍÓï¾äǰ£¬Ôö¼ÓÒ»¸öcriticalÓï¾ä»òatomicÓï¾ä£¬
CODE:
total=0;
#pragma omp parallel for private(i) shared(total, num)
for (i=0, i<1000, i++)
#pragma omp critical  £¨»òatomic£©
  total+=num(i);

Ôö¼ÓÕâÑùÒ»¸öÓï¾äºó£¬²»ÔÊÐí×ÓÈÎÎñͬʱÔËÐС£»»¾ä»°Ëµ£¬´¦ÀíÆ÷°¤¸öͳ¼Æ£¬×îºó¼ÓºÍ¡£ÇÒ¶Ô×îºó½á¹û¼ÓºÍʱÊÇÀÛ¼Ó¶ø·Ç¸Äд¡£Õ⼴ʹËùν»¥³âËø¡£ÕâÑùÖ»ÊDZÜÃâÁ˳ö´í£¬²¢Ðкó¸úû²¢ÐÐÒ»Ñù£¬»¹Ôö¼ÓÁ˲¢ÐеĹÜÀí¿ªÏú¡£½á¹û±È´®Ðл¹Âý¡£criticalºÍatomicÓÐÊ²Ã´Çø±ðÄØ£¿Ã»¿´Ì«Çå³þ£¬Ò»°ãµÄ½Ì³ÌÖ»ÊÇÌáµ½¶þÕßЧ¹ûµÈͬ£¬µ«atomic·½Ê½Ôì³ÉµÄ¿ªÏúСÓÚcritical¡£

´ÓÉÏÃæ¿´£¬Äã»á˵£¬ÄáÂ껥³âËø¼òÖ±¾ÍÊǿӵù£¬ÄÇÑùµÄ²¢ÐÐÓÐÉñÂíÒâÒ壿ֱ½Óÿ¸ö´¦ÀíÆ÷ͳ¼Æ¸ö×ÜÊý£¬×îºó¼ÓÆðÀ´²»¾ÍÍêÁË¡£Ã»´í£¬ÕâÖÖ´¦Àí·½Ê½¾ÍÊÇopenMPÌṩµÄµÚ¶þÖÖ³åÍ»½â¾ö»úÖÆ£¬³ÆÎª¡°¾Ö²¿ÇóºÍ»úÖÆ¡±¡£ËüµÄȱµãÊÇ£¬±ØÐë¶ÔÔ­À´µÄ´®ÐÐcode½øÐÐÐ޸ġ£¾ÙÀý£º
CODE:
total=0;
#pragma omp parallel for private(i,local_sum) shared(total, num)
{
    local_sum=0;
#pragma omp for nowait
    for (i=0, i<1000, i++)
        local_sum += num(i)
#pragma omp atomic
     total+=local_num;
}

ÉÏÃæµÄ´úÂëÔÚÆäÖÐÔö¼ÓÁË˽ÓбäÁ¿local_sum£¬ÓÃÀ´´æ´¢Ã¿¸ö´¦ÀíÆ÷ͳ¼Æ×ÜÊýµÄ±äÁ¿local_sum¡£Òò´Ë£¬omp forºóÃæµÄ´úÂëÊÇ·Ö±ðÔÚ¸ö´¦ÀíÆ÷ÉϽøÐе쬯äͳ¼Æ½á¹ûÊÇ˽Óеġ£×îºóʹÓÃÒ»¸öomp atomicÓï¾ä£¬Æä×÷ÓÃÊÇбÙÒ»¸öÏ̶߳ÔËùÓеÄlocal_sumÇóºÍµÃµ½×ÜÊýtotal¡£


²¢ÐеÄͬ²½ÓëÍ˳ö¡£ÉÏÃæµÄomp forÔÚÄÄÀï½áÊø²¢ÐÐÄØ£¿ºÜÏÔÈ»£¬omp forÑ­»·²¢ÐÐÔÚforÓï¾ä½áÊøºó½áÊø²¢ÐУ¬×ªÈëÏÂÃæµÄ´®ÐлòÕßÊÇеIJ¢Ðнø³Ì¡£²»¹ý£¬Ä¬ÈϵIJ¢ÐÐÓиöͬ²½»úÖÆ¡£´Ë»úÖÆÒªÇóÂÊÏÈÍê³ÉµÄ´¦ÀíÆ÷ÒªµÈ´ýÆäËü´¦ÀíÆ÷½áÊøºó²ÅÄÜתÈëÏÂÒ»²½¡£ÉÏÃæomp forÖ¸ÁîºóÃæµÄnowaitÔòָʾÂÊÏÈÍê³É¼ÆÊýµÄ´¦ÀíÆ÷²»±ØµÈ´ýÆäËü´¦ÀíÆ÷Íê³Éͳ¼Æ£¬Ö±½Ó½«×Ô¼ºµÄ½á¹û´«¸øÏÂÃæµÄomp atomic½ø³Ì£¬ÒÔ½ÚԼʱ¼ä¡£nowait¾­³£³öÏÖÔÚÕâÀàÑ­»·µÄ²¢ÐÐÖС£

Ref:
1. openMP workshop, Calculquebec, McGill, 2014
2. openMP by Examples, http://sc.tamu.edu/shortcourses/SC-openmp/OpenMPSlides_tamu_sc.pdf
3. OpenMP·¢Õ¹ÓëÓÅÊÆ, http://blog.chinaunix.net/uid-13327770-id-2902331.html?page=2&bsh_bid=356302935

[ Last edited by ChemiAndy on 2014-2-27 at 11:05 ]
»Ø¸´´ËÂ¥

» ÊÕ¼±¾ÌûµÄÌÔÌûר¼­ÍƼö

ÓÐÓõÄÌû×Ó

» ²ÂÄãϲ»¶

» ±¾Ö÷ÌâÏà¹ØÉ̼ÒÍÆ¼ö: (ÎÒÒ²ÒªÔÚÕâÀïÍÆ¹ã)

» ±¾Ö÷ÌâÏà¹Ø¼ÛÖµÌùÍÆ¼ö£¬¶ÔÄúͬÑùÓаïÖú:

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

°²µÂ

Ìú¸Ëľ³æ (ÖøÃûдÊÖ)

** *_** ___ ***_ * _*

ѧϰÁË£¬¶¥Æð~
That'sit! Justdoit!
2Â¥2014-02-28 09:11:45
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

leetzungway

Òø³æ (ÕýʽдÊÖ)

ѧϰÁË£¬Â¥Ö÷Å£±Æ
He which soweth sparingly shall reap also sparingly; and he which soweth bountifully shall reap also bountifully.
3Â¥2015-11-18 23:42:28
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ ChemiAndy µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 331Çóµ÷¼Á +5 luoxin0706. 2026-04-08 5/250 2026-04-08 22:15 by zhouyuwinner
[¿¼ÑÐ] ²ÄÁÏ307·ÖÇó´óÀÐ×éÊÕÁô +14 Hllºú 2026-04-07 14/700 2026-04-08 22:01 by hypershenger
[¿¼ÑÐ] 285Çóµ÷¼Á +12 AZMK 2026-04-05 18/900 2026-04-08 20:43 by ÄæË®³Ë·ç
[¿¼ÑÐ] 273Çóµ÷¼Á +41 ÂóС¶£µ± 2026-04-06 48/2400 2026-04-08 15:16 by screening
[¿¼ÑÐ] Çóµ÷¼Á£¬ÏÖÔÚ»¹ÄÜÌîµÄ +3 Éϰ¶Ð¡Ó¨¼ÓÓÍ 2026-04-08 3/150 2026-04-08 14:30 by zhq0425
[¿¼ÑÐ] ÇóÖú071001µ÷¼Á£¡£¡£¡ +6 »ÆÊØËÉ 2026-04-05 7/350 2026-04-08 11:54 by Öí»á·É
[¿¼ÑÐ] »úе¹¤³Ì264ѧ˶Çóµ÷¼Á +3 qiushangxian 2026-04-06 3/150 2026-04-08 01:53 by Linzejun
[¿¼ÑÐ] 277¡¢Ñ§Ë¶£¬Çóµ÷¼Á ÊýÒ»104£¬ +11 Æ¿×ÓPZ 2026-04-07 12/600 2026-04-07 23:30 by Ò»Ö»ºÃ¹û×Ó?
[¿¼ÑÐ] 331Çóµ÷¼Á +5 ÕÅÔªÒ» 2026-04-07 6/300 2026-04-07 22:13 by hemengdong
[¿¼ÑÐ] 338Çóµ÷¼Á +5 СÖíºìÉ« 678 2026-04-06 6/300 2026-04-07 21:18 by ÇÇßÕßÕßÕ
[¿¼ÑÐ] 285Çóµ÷¼Á +15 ŶßϺôo 2026-04-04 17/850 2026-04-06 23:02 by chenzhimin
[¿¼ÑÐ] 0854Çóµ÷¼Á +4 assdll 2026-04-05 4/200 2026-04-06 12:29 by ÖзÉÔº¿Õ¹ÜѧԺÑ
[¿¼ÑÐ] 284Çóµ÷¼Á +7 Ðìͬѧ_001 2026-04-04 13/650 2026-04-05 17:19 by yulian1987
[¿¼ÑÐ] ÇóÉúÎïѧѧ˶µ÷¼Á¡ª¡ª364·Ö +7 ÔÆ¶äåÞÍäÖ¸ÄÏ 2026-04-04 7/350 2026-04-04 22:49 by zhyzzh
[¿¼ÑÐ] 0835ѧ˶299Çóµ÷¼Á 08´óÀà¿É½ÓÊÜ +5 useryy 2026-04-03 5/250 2026-04-04 20:07 by À¶ÔÆË¼Óê
[¿¼ÑÐ] ±¾9Ò»Ö¾Ô¸2 0854µÍ·Öר˶286Çóµ÷¼Á +9 âÖÖ111 2026-04-04 9/450 2026-04-04 11:01 by tangruihua
[¿¼ÑÐ] 281Çóµ÷¼Á +10 aaawhy 2026-04-03 10/500 2026-04-03 21:42 by lbsjt
[¿¼ÑÐ] ר˶ 351 086100 Ò²ÊÇ¿¼µÄ²Ä¿Æ»ù ±¾¿ÆÒ²ÊDzÄÁÏ +8 202451007219 2026-04-02 8/400 2026-04-03 09:50 by À¶ÔÆË¼Óê
[¿¼ÑÐ] Çóµ÷¼Á +7 Aniyaio 2026-04-02 7/350 2026-04-02 16:42 by zzsw+
[¿¼ÑÐ] 346Çóµ÷¼Á +5 Ö£³ÏÀÖ 2026-04-02 5/250 2026-04-02 16:38 by SZW_UJN
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û