|
|
[½»Á÷]
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Ö¸ÁÈçÏ£º ÄÇô£¬µ±Äã±ãÒÔºóÖ´ÐеÄʱºò£¬Ã¿Ò»¸öÏß³Ì(Processor)¶¼»áÔËÐÐÕâ¸öwriteÓï¾ä£¬¼´Óм¸¸öºË¾Í»áÊä³ö¼¸¸ö¡°Hello, world!¡±
Äã»á˵£¬Õâ½ÐʲôÈÎÎñ·ÖÅ䣬²»¹ýÖØ¸´Ö´ÐС£ÎÒÃÇÐèÒªµÄÊǶԱÈÈç1000¸ö¼ÆËã·Ö¸ø2¸ö´¦ÀíÆ÷£¬Ã¿¸öÖ´ÐÐÆäÖеÄ500¸ö£¬ÒÔ½ÚԼʱ¼ä¡£Êǵģ¬ÎÒÃDz»·Á°ÑÉÏÃæ×î¼òµ¥µÄÇé¿ö³ÆÎªÆëÓ¦»úÖÆ£¬¼´ÆëÉù´ðÓ¦£¬ËüÕ¹ÏÖÁ˲¢ÐÐÖ¸Áî¶Ô¹¤×÷Óï¾ä×î¼òµ¥µÄÓ°Ï졣Ȼºó£¬ÎÒÃÇÀ´Ì¸Ì¸ÕæÊµµÄÈÎÎñ·ÖÅä¡£
µÚÒ»ÖÖÇé¿ö£¬ÒÔÉÏÃæµÄÀý×ÓΪÀý£¬ÎªÁ˽øÒ»²½ÐÎÏ󻯣¬ÎÒÃÇ¿ÉÒÔ°ÑÈÎÎñÏëÏó³ÉÒªÉú²ú1000˫Ь¡£´®Ðеϰ£¬¿ÉÒÔ¶ÔÒ»¸öÉú²úЬµÄÖ¸Áî¼ÓÉÏDOÑ»·Ö¸Áѻ·1000´Î¡£²¢Ðеϰ£¬ÎÒÃÇÖ»ÐèÔÚÑ»·Ö¸ÁîÓï¾äǰºóÌ×ÉÏÒ»¸öopenMPµÄPARALLEL FORÓï¾ä£¬±àÒëÆ÷¾Í»áºÜ´ÏÃ÷µØ°ÑÈÎÎñƽ¾ù·ÖÅä¸øÃ¿¸ö´¦ÀíÆ÷¡£ ÆäÖеÄDO ... END DOÊÇ´®ÐеÄÑ»·Óï¾ä¡£¶øÌ×ÉϵÄ!$¿ªÍ·µÄÖ¸ÁîÔò½«codeת»¯Îª²¢ÐС£ÆäÖеÄPRIVATE, SHAREDÔòÊǶÔ˽ÓС¢¹²ÓбäÁ¿µÄÇø·Ö£¬Ï¸½ÚÇëÄÔ²¹£¬Äã¶®µÃ¡£
ÉÏÃæÕâÖÖ·ÖÅäÈÎÎñµÄ·½Ê½£¬°ÑÑ»·Æ½¾ù·ÖÅäµ½¿ÉÓô¦ÀíÆ÷ÉÏÈ¥£¬ÎÒÃdzÆÎªÆ½¾ù·ÖÅä»úÖÆ¡£
µ«ÊÇ£¬ÓеÄʱºò£¬ÄãÏëÖ¸¶¨Ò»ºÅÉú²úÏßÉú²úÄÐЬ£¬¶þºÅÉú²úÏßÉú²úŮЬ¡£ÕâÖÖÇéÐÎÏÂÄã¾õµÃÓ¦¸ÃÔõôʵÏÖ£¿Äã»á˵£¬ºÜ¼òµ¥£¬ÓÃÌõ¼þÅжÏÓï¾äIF½øÐÐÅжϡ£Êǵ쬴ó¸ÅÊÇÕâ¸öÑù×ӵģº ÉÏÃæµÄ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Ö¸Áî¡£ ×¢ÒâÕâ×îºóÒ»ÖÖģʽ·Ç³£Áé»î¡£²»¹ý£¬ÕâÈýÖÖ²¢Ðнâ¾ö»úÖÆ£¬¶¼Ö»ÄÜÊÊÓÚ¸÷×ÓÈÎÎñÖ®¼ä²»Ï໥ÒÀÀµµÄÇéÐΡ£Èç¹ûºóÒ»ÈÎÎñµÄ¿ªÊ¼ÒÀÀµÓÚǰһÈÎÎñµÄ½á¹û£¬ÄÇôÕâÖÖÇéÐÎÏÂÄܲ¢ÐÐÂð£¿Çë¿´ÏÂÃæµÄ¹ØÓÚÕâÒ»ÎÊÌâµÄÌÖÂÛ¡£
(2) ³åÍ»½â¾ö»úÖÆ
ÒòÎªÇ°Ãæ¿¼ÂǵÄÈÎÎñ£¬¶¼ÊÇÊý¾ÝÖ®¼ä²»»¥ÏàÒÀÀµµÄÇéÐΡ£µ«ÊÇ£¬ÎÒÃÇÔÚ²¢Ðл¯Ò»¶ÎÒÑÓеĴ®ÐÐcodeʱ£¬Óöµ½µÄ¸ü¶àµÄÊǸ÷×ÓÈÎÎñµÄÊý¾Ý½á¹ûÏ໥ÒÀÀµµÄÇéÐΡ£¿¼ÂÇÒ»¸öºÜ³£¼ûµÄÇéÐΣº¼ÙÈçÓÐ1000¸öÏä×Ó£¬Ã¿¸öÏä×ÓÀïÓÐδ֪ÊýÄ¿µÄЬ×Ó£¬ÄãÐèÒªÖªµÀ×ܵÄЬ×ÓÊý¡£ÔÚ´®ÐеÄÇé¿öÏ£¬Äã±àдÁËÒ»¸öÑ»·code£¬ÒÀ´Îͳ¼ÆÃ¿Ò»¸öÏä×ÓÀïÃæµÄЬ×ÓÊý£¬°Ñÿ¸öÏä×ÓÖеÄЬ×ÓÊý¼Óµ½µ±Ç°×ÜÊýÖв¢Ð´µ½Ò»¿éСºÚ°åÉÏ¡£(ÏÂÃæ¸ÄÓÃC++ pseudo code) ¶ÔÕâÑùµÄÒ»¸öcode½øÐÐopenMPµÄÌ×Óò¢ÐÐÓï¾ä£¬ ½á¹ûµ±È»»á³ö´í¡£ÒòΪÌ×Óò¢ÐÐÖ¸ÁîµÄ½á¹û£¬ÊǰÑÏä×ÓÆ½¾ù·ÖÅä¸øÃ¿¸ö´¦ÀíÆ÷£¬Ã¿¸ö´¦ÀíÆ÷ͳ¼ÆÍê×Ô¼ºËù¼Æ×ÜÊýÖ®ºó£¬¶¼»áÈ¥¸ÄдСºÚ°åÉϵÄЬ×Ó×ÜÊý¡ª¡ªÒ»¸ö²»¿ÉÄÜ˽Óл¯µÄ¹«ÓбäÁ¿¡£Äã˵£¬ÕâºÃ°ì£¬´®ÐÐcodeÐ޸ijÉÿ¸öÏä×ÓµÄЬ×ÓÊý×÷Ϊһ¸öÊý×éÔª´æµ½Ò»¸öÊý×éÖÐÈ¥£¬×îºóÊý×éÔªÇóºÍ£»ÕâÑù²¢ÐÐʱÿ¸ö´¦ÀíÆ÷¶¼Ö»»áÐ޸IJ»Í¬µÄÊý×éÔª¡£ÎÊÌâÊÇ£¬ÕâÖÖ·½Ê½²»½öºÄÄڴ棬¶øÇÒÔö¼ÓÁ˶îÍâµÄÇóºÍ¿ªÏú¡£´®ÐÐcode²»Ì«¿ÉÄÜÕâÑù±àд¡£Òò´Ë£¬ÎÒÃDz»ÌÖÂÛרΪºóÀ´Ôö¼ÓopenMP¶øÌرðÉè¼ÆcodeµÄÌØÊâÇéÐΣ¬¶øÖ»¿¼ÂÇ×î¿ÉÄܳöÂé·³µÄÒ»°ãÇéÐΡ£
ÕâÖÖÇé¿öÏ£¬openMPÌṩµÄµÚÒ»ÖÖ½â¾ö˼·ÊÇ¡°»¥³âËø»úÖÆ¡±¡£ÀýÈ磬ÔÚÇóºÍÓï¾äǰ£¬Ôö¼ÓÒ»¸öcriticalÓï¾ä»òatomicÓï¾ä£¬ Ôö¼ÓÕâÑùÒ»¸öÓï¾äºó£¬²»ÔÊÐí×ÓÈÎÎñͬʱÔËÐС£»»¾ä»°Ëµ£¬´¦ÀíÆ÷°¤¸öͳ¼Æ£¬×îºó¼ÓºÍ¡£ÇÒ¶Ô×îºó½á¹û¼ÓºÍʱÊÇÀÛ¼Ó¶ø·Ç¸Äд¡£Õ⼴ʹËùν»¥³âËø¡£ÕâÑùÖ»ÊDZÜÃâÁ˳ö´í£¬²¢Ðкó¸úû²¢ÐÐÒ»Ñù£¬»¹Ôö¼ÓÁ˲¢ÐеĹÜÀí¿ªÏú¡£½á¹û±È´®Ðл¹Âý¡£criticalºÍatomicÓÐÊ²Ã´Çø±ðÄØ£¿Ã»¿´Ì«Çå³þ£¬Ò»°ãµÄ½Ì³ÌÖ»ÊÇÌáµ½¶þÕßЧ¹ûµÈͬ£¬µ«atomic·½Ê½Ôì³ÉµÄ¿ªÏúСÓÚcritical¡£
´ÓÉÏÃæ¿´£¬Äã»á˵£¬ÄáÂ껥³âËø¼òÖ±¾ÍÊǿӵù£¬ÄÇÑùµÄ²¢ÐÐÓÐÉñÂíÒâÒ壿ֱ½Óÿ¸ö´¦ÀíÆ÷ͳ¼Æ¸ö×ÜÊý£¬×îºó¼ÓÆðÀ´²»¾ÍÍêÁË¡£Ã»´í£¬ÕâÖÖ´¦Àí·½Ê½¾ÍÊÇopenMPÌṩµÄµÚ¶þÖÖ³åÍ»½â¾ö»úÖÆ£¬³ÆÎª¡°¾Ö²¿ÇóºÍ»úÖÆ¡±¡£ËüµÄȱµãÊÇ£¬±ØÐë¶ÔÔÀ´µÄ´®ÐÐcode½øÐÐÐ޸ġ£¾ÙÀý£º ÉÏÃæµÄ´úÂëÔÚÆäÖÐÔö¼ÓÁË˽ÓбäÁ¿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 ] |
» ÊÕ¼±¾ÌûµÄÌÔÌûר¼ÍƼö
» ²ÂÄãϲ»¶
» ±¾Ö÷ÌâÏà¹Ø¼ÛÖµÌùÍÆ¼ö£¬¶ÔÄúͬÑùÓаïÖú:
|