专题技术与工程应用ࠎႿ࠹ෘࠏࠢಕ༢֥ࠁކщӱ࣮陈 勇1,张佳骥1,吴立德2,刘海娟1,甄保卫1(1 中国电子科技集团公司第五十四研究所,河北石家庄050081;2 复旦大学,上海200433)ᅋ ေ ࠹ෘࠏࠢಕၹఃਅݺ֥ॖঔᅚྟ,ᄝൌ࠽ႋႨᇏ֤֞ਔॹؿᅚbཌྷؓႿֆࠏߌ,࠹ෘࠏࠢಕߌ༯֥щӱ۷ູگᄖbࢺകਔC++aMPIބGTK+ᇕე۲ሱ֥หׄބቔႨbษંਔೂޅᄝIBMBladeCenter࠹ෘࠏࠢಕഈൌགྷC++aMPIބGTK+ᇕე֥щӱ,Їওӱ֥ഡ࠹ބщӱᇏႨ֥ె,ѩ۳ԛਔؓࠁކӱࣉྛט൫෮Ⴈ֥ଁbܱՍ ࠹ෘࠏࠢಕ;ѩྛ࠹ෘ;ཨ༏Ԯ־ࢤ१ᇏٳোݼ TP311 ໓ངѓ് A ໓ᅣщݼ 1003-3106(2008)11-0045-04ResearchonHybridProgrammingonPCClusterCHENYon1g,ZHANG1Jia ji,WULi d2e,LIUHai juan11,ZHENBao wei(1 The54thResearchInstituteofCETC,ShijiazhuangHebei050081,China;2 FudanUniversity,Shanghai200433,China)Abstract PCclustertechnologyhasbeenwidelyusedinpracticesinceitisexcellentinscalability ComparedwithprogrammingonasinglePC,programmingonaPCclusterismorecomplex Inthispaper,wefirstintroducethefeaturesandapplicationsofthreecomputerlanguagesC++,MPIandCTK+ Then,wediscusshowtoprogram,design,program,debug,compileandexecuteahybridprogramofthethreecomputerlanguagesonanIBMBladeCentercluster Keywords PCcluster;parallelcomputing;MessagePassingInterface0 ႄ߶Ⴈၩ്֞ࠢಕ༢ָҪ֥ࢫׄ,ᄝႨुট,ࠢಕ൞၂۱༢,ط٤؟۱࠹ෘࠏ༢,ࠢಕ༢࠹ෘࠏࠢಕၛఃࢠ֥ۚྟࡎбaޓݺ֥ॖঔᅚ֥ܵჴॖၛෛၩᄹࡆބࡨഒࠢಕ༢֥ࢫׄbᄪྟФܼٗႋႨႿ۲ᇕ࠹ෘૡ֥ࠢༀᇏbᄝ૫ཟ߅ᄝ70୍ս࠹ෘࠏӌഅބ࣮ࠏܒࣼषਔؓࠢಕี֥໓Ч෬࣮ᇏ,ႮႿ෮ླԩ֥໓Чਈऍն,༢֥࣮ބषؿbႮႿᇶေႨႿ॓࿐۽ӱ࠹ෘ,ႨਔIMB܄ඳ֥BladeCenterJS21࠹ෘࠏࠢಕ,Ґ෮ၛᆃུ༢ѩ҂ູնࡅ෮ඃᆩbᆰ֞LinuxࠢಕႨSPMD(SingleProgramMultipleData)ѩྛෘمଆൔ֥ԛགྷ,࠹ෘࠏࠢಕ֥ۀҌ֤ၛູܼԮѬb࠹ෘൌགྷਔඔऌ֥ѩྛԩbᆜ۱ѩྛ༢֥ൌགྷླေࠏࠢಕ༢ᇶေٳູۚॖႨ(HighAvailability,HA)Ⴈ3ᇕ࠹ෘࠏე:C++aMPI(MessagePassingࠢಕބۚྟି࠹ෘ(HighPerformanceComputing,Interface)ބGTK+b০ႨC++ປӮඔऌԩ;০ႨHPC)ࠢಕbHAࠢಕᇁ৯Ⴟิ܂ۚ؇ॖौ֥ڛༀ,MPIᄝࠢಕଽ۲۱࠹ෘࢫׄᆭࡗԮ־ඔऌ;০ႨطHPCࠢಕᇁ৯Ⴟิ܂ֆ۱࠹ෘࠏ෮҂ିิ܂֥GTK+ൌགྷದࠏࢌࢸ૫bൈႨ3ᇕეᄝ၂఼ն֥࠹ෘି৯bЧ໓০Ⴈ֥൞ࠢಕ֥ۚྟି࠹ෘ۱ӱᇏປӮ3ᇕۿ,ିླေЌᆣ3ᇕսᄝປӮି৯b۲ሱۿି֥ൈ҂߶ཌྷ႕ཙbЧ໓ᇶေࢺകႵܱႮႿቆӮࠢಕ֥ૄ၂۱࠹ෘࠏႵ۲ሱ৫֥ࠁކщӱეӱഡ࠹aెၛࠣט൫֩ٚ૫֥ࣜଽթ,෮ၛՖุ༢ࢲܒഈࢃ,ࠢಕඋႿٳ҃ൔԩٚဒbൔ(DistributedMemoryProcessing)bა܋ཚൔԩٚൔ(SharedMemoryProcessing)҂,ࠢಕଽ۲۱ࢫׄ1 ࠹ෘࠏࠢಕ༢ଽ֥҆ඔऌླေ๙ݖ๙֥ٚൔҌିФఃࢫׄ٠࠹ෘࠏࠢಕ(cluster)ࣼ൞၂ቆ࠹ෘࠏ,ૌቔູ໙bطMPIეᆞ൞ູࢳथඔऌᄝࢫׄᆭࡗ֥ੀ၂۱ᆜุཟႨิ܂࠹ෘሧჷ[1]bᆃུֆ۱֥࠹ෘطิԛ֥bࠏ༢ࣼ൞ࠢಕ֥ࢫׄ(node)b၂۱མ֥ࠢಕ҂൬۠ರ௹:2008 04 282008年无线电工程第38卷第11期4 5
专题技术与工程应用Ч࣮ҐႨ֥࠹ෘࠏࠢಕӁ൞IBM܄ඳ֥CეཿӮ֥bᄝ༢ൌགྷᇏ,Ⴈ֥൞BladeCenterJS21ࠢಕ,ᄝ7UॢࡗଽᆜކਔGTK+2 2 1b14۱֗ோڛༀఖ,֗ோڛༀఖᆭࡗᄵႨູۚਔࢳथದࠏࢌݖӱ֥તࢫሽაඔऌԩӱInfinibandຩ৵ᆦӻඔऌᄝࢫׄࡗۚԮൻb֥ॹࢫሽᆭࡗ֥؛,๙ӈϜൌགྷದࠏࢸ૫֥BladeCenterJS21֥႗ࡱᇂೂ༯,CPU൞2 3GHzGTK+ս٢ᄝ၂۱৫֥ཌӱᇏᄎྛ(০ႨPowerPC970MP(64໊),ଽթູ4GBDDR2ECCpthread-create()ݦඔԷࡹྍཌӱ)bGTK+ၛ൙ࡱSDRAM,Ҡቔ༢ູLinuxAdvancedServer4b౺ٚൔཙႋ۲ᇕ൙ࡱԩ౨,֒ᄎྛ֞gtk-main()ݦඔൈ߶ሱඤbՎൈCPUॖၛህ2 ѩྛༀᇿႿඔऌԩ֩Ҡቔ,ᆺႵ֒ದࠏࢸ૫Ⴕ൙ࡱؿള෬ༀླေԩඔਈऍն֥ඔऌ,ࡼஔն֥ൈ(бೂׄࠌඊѓο୦a۷ྍඔऌཁൕ)֩,CPUҌ߶ༀٳ۩Ӯۄ۱ሰༀ,ಞૄ۱֗ோڛༀఖڵᄳሇطטႨཌྷႋ֥൙ࡱԩݦඔbԩఃᇏ֥1۱ሰༀ,ᄝૄ۱֗ோڛༀఖ֥ЧֹູਔGTK+۽ቔႿ؟ཌӱٚൔ,сྶטႨ႗ᇏթႵԩھሰༀ෮ླေ֥ಆ҆ඔऌbᆃဢg-thread-init()ބgdk-threads-init()ݦඔbభᆀ۲۱֗ோڛༀఖࣼॖၛൈᄎྛ၂ӱԩ҂GLib९۽ቔᄝཌӱνಆଆൔ(thread-safemode)b֥ඔऌ,ࠧҐႨSPMDѩྛෘمଆൔࣉྛᄎෘbऎᄝᆃᇕଆൔᇏ,GLibࡼ߶۴ऌླေሱ֥෭ק෮Ⴕุটࢃ,০ႨC++ეൌགྷඔऌԩӱ,০ႨMPIଽ҆ඔऌࢲܒ(internaldatastructures)bުᆀڵᄳԚეൌགྷࢫׄࡗ֥ඔऌ๙bбೂࡼ۲۱֗ோڛༀ߄؟ཌӱ۽ቔߌbႮႿGTK+ս۽ቔႿ؟ཌఖ֥ԩࢲݔ߸ࠢ֞၂۱ࢫׄ,Ֆط࠹ෘಆअԩӱٚൔ,ᄝᆳྛGTKݦඔטႨᆭభ,сྶࠆ֤၂۱ࢲݔb০ႨGTK+ეൌགྷದࠏࢌࢸ૫,ٚьႨື၂֥ಆअ෭bॖၛ๙ݖטႨgdk-threads-enterิࢌҰ࿘౨,ܴुҰ࿘ིݔb()ࠆ֤၂۱ֆ၂ಆअ෭ק(singlegloballock),ᆳྛ3ປӮު๙ݖטႨgdk-threads-leave()٢bֆ၂ ࠹ෘࠏࠢಕߌ༯֥ࠁކщӱಆअ෭קა٢൞٤ӈᇗေ֥bೂݔᄝщཿսൈႨ3ᇕ࠹ෘࠏეᄝ၂۱ӱᇏປӮ3ᇕۿ၌ອਔᆃ2่ଁ,ପહದࠏࢸ૫ࣼ҂ିᆞӈ۽ቔ,ିླေЌᆣ3ᇕսᄝປӮ۲ሱۿି֥ൈ,҂߶മᇀ֝ᇁᆜ۱༢֥Щbᄝ໓Ч෬༢֥ದࠏཌྷ႕ཙb༯૫൮༵ࢺകGTK+aMPIބC++ე,ࢸ૫ഈႨਔ၂۱GtkTreeView॥ࡱটཁൕࢲݔbಖުࢺകӱഡ࠹aщཿބט൫֩ٚ૫֥ࣜဒbႨૄؿఏ၂ՑҰ࿘,GtkTreeView॥ࡱ֥ଽಸࣼቓ3 1ཌྷႋ۷ྍ,ၛّ႘ྍ֥෬ࢲݔbᄝൌགྷଽಸ۷ྍ GTK+֥ս؍ᆭభބᆭުླေٳљ٢ᇂgdk-threads-GTK+(GIMPToolKit,GIMP۽ऎЇ)ቋԚႨႿषenter()ބgdk-threads-leave()ݦඔbڎᄵ,෬༢ؿGIMP(GeneralImageManipulationProgram[2]),൞၂ఓު,ᆺିࢤ൳1ՑҰ࿘b֒Ⴈࣉྛֻ2Ց۱ႨႿԷࡹྙႨࢤ१֥ྙ९bGTK+൞ࠎႿҰ࿘ൈ,༢ࣼ߶ؿളЩbLGPL൱ಃ,֥ၹՎॖၛႨGTK+षؿष٢ჷೈࡱ߭טྐݼླေႄఏᇿၩ,GTK+ᇏ֥߭טྐݼ֥ሱႮೈࡱࠇഅြ֥٤ሱႮ֥ೈࡱbGTK+൞ᄝ(ྐݼ,signals)൞ᄝGTK+෭ק(lock)֥ଽ,҆൞Gdk(GIMPDrawingKit,GIMPЇ)֥ࠎԤഈԷࡹGLibᇏ֥߭טྐݼ(ӑൈ,IOބ༢ॢ༽(timeouts,IO,֥Gdk൞ؓXlibݦඔ֥Їልb၂ϮႨGTKսіೈcallbacks,andidlefunctions))൞ᄝGTK+෭ק(lock)ᆭࡱЇބ܋ཚ९,ႨGTK+սіGTK֥ྙܒࡱࠢbGTK+ྙ९Ⴈ၂ུӫ ູܒࡱ ֥ؓའটԷຓb෮ၛ,ᄝ၂۱ྐݼԩݦඔ(signalhandler)ᇏ҂ࡹླေטႨgdk-threads-enter(),൞ᄝఃো֥טGUIႋႨӱbิ܂ਔԳ१aο୦aॿࡏaਙіॿaቆކॿaඎބሑ่֩ޓ؟ܒࡱ,ॖၛܒᄯپڶႨᇏ,сླטႨgdk-threads-enter()b၂۱ቋཬ֥GTK+ཌӱӱᇶݦඔೂ༯:֥Ⴈࢸ૫bᄝGTK+ྙ९ܒࡱࠎԤഈ,Ⴛषؿintmain(intargc,char*argv[])ਔ၂ུྍܒࡱ,ᆃུܒࡱ൞GTK+ܒࡱ९֥Ҁԉ,{ิ܂ਔྸ؟GTK+ܒࡱીႵ֥ۿିb၂ϮϜᆃུܒ GtkWidget*window;ࡱӫູGnomeܒࡱ,ႨGnomeܒࡱॖၛषؿࢸ g-thread-init(NULL);૫၂ᇁ֥ႋႨӱэ֤۷ࡆಸၞbGTK+ᇶေ൞ၛ gtk-init(&argc,&argv);4 62008RadioEngineeringVo1 38No 11
专题技术与工程应用 window=create-window();(MPI-2))ᆦӻC++ѓሙ,ၹՎ,MPI-2ϾקC++ gtk-widget-show(window);ࠏᇅննٚьਔჰႵӱཟѩྛߌ֥၍ᆱ۽ቔb gdk-threads-enter();ҐႨMPICH2-1 0 2ϱЧ,൞MPI֥ᇶေൌགྷᆭ gtk-main();၂,Ⴎૅݓέ܊ݓࡅൌဒ൩(ArgonneNational gdk-threads-leave(); return(0Laboratory)ิԛbMPIิ܂ਔ၂ᇕაეބ);ܱ,ॖၛФܼٗႨ֥щཿཨ༏Ԯ־ӱ֥ѓሙ,Ⴈ}໓Ч෬༢൞ᆌؓᇏ໓໓Чࠢކᇅ֥b໓টщཿཨ༏Ԯ־ӱ҂ࣇൌႨaॖ၍ᆱaིۚބਲЧࠢކᇏ֥໓֖ଽಸࠣః໓ࡱն҆ٳ൞ᇏ໓֥ࠃ,طބ֒భ֥ൌགྷીႵն֥э߄bཨ༏Ԯ־,࿖GB2312ݱሳщѓሙbطᄝದࠏࢸ૫ഈࢤ१ิ܂ၛ༯Ќᆣ:GTK॥ࡱഈ֥ሳژᄵ൞࿖UTF-8ѓሙbೂݔᆰ#ิ܂ႋႨӱщӱࢤ१;ࢤϜGB2312щ֥ᇏ໓Ԯෂ۳GTK॥ࡱ,ପહ॥∃ิۚ๙ྐི,ੱծീЇওх૧թԥఖ֞թԥࡱഈ֥ཁൕ߶൞bູՎ,ླေ༵Ⴈఖ֥؟ՑᇗگॊН,ᄍྸ࠹ෘބ๙ྐ֥ᇗן;֩g-convert()ݦඔϜGB2312۬ൔ֥ሳژԱሇߐູ%ॖᄝၳܒߌ༯ิ܂ൌགྷ;UTF-8۬ൔ֥ሳژԱ,ᄜԮ۳GTK+॥ࡱࣉྛཁ&ิ܂֥ࢤ१ॖၛٚьFORTRAN77/C/ൕb၂ུҕॉ໓ངᇏࡹၰႨg-locaFortran90/C++֥טႨ;l-to-utf8()ݦඔࣉྛഈඍሳژ۬ൔሇߐ,ൌဒіૼ,Ⴕུሳژ∋ิ܂ॖौ֥๙ྐࢤ१ࠧႨ҂сԩ๙ྐԱࣜg-local-to-uാϧ;tf8()ݦඔሇߐު,ᄝGTK+॥ࡱഈཁൕൈಯ߶ԛགྷሳژbطႨg-convert()ࣉ(קၬ֥ࢤ१ିᄝࠎЧ֥๙ྐބ༢ೈࡱྛሇߐᄵ҂߶ԛགྷഈඍ౦ঃbਸ਼ຓ,g-convert()ߎᇗնڿэൈ,ᄝ؟۱ѩྛ࠹ෘࠏളӁഅ֥ഈൌॖၛൌགྷGB2312აUTF-8ѓሙᆭࡗ֥චཟሇߐbགྷࢤ१֥ეၬ৫ႿეbGLibࡼCეᇏ֥ඔऌো၂ٿልӮሱ֥࠭ඔऌো,नၛཬཿሳଛ3 3 C++ე!g∀ष,ೂ:gpointer൞ᆷᆌো(void*)aguint൞ژݼᆜ(unsignedC++ე൞ෛሢೈࡱඌ҂؎ؿᅚطӁള֥int)֩,ఃᇏႵ၂ུ൞ྩྟ,֥ೂ:gintagchar,֩၂ӱഡ࠹ეbაఃӱഡ࠹ეཌྷбࢠ,ૌބCეᇏ֥intachar൞ປಆཌྷ֥bᆃུඔऌC++ეࡥࢱaࣅ,ۿିپڶ,іղି৯఼,ଢѓোႨఏটބCეᇏ֥ඔऌোປಆ၂ဢbമӱིੱ,ۚॖ၍ᆱྟݺbൈ,C++ӱഡ࠹ҐᇀॖၛϜCეᇏ֥ඔऌোᆰࢤଦটႨ,ᆃපݸႨਔ૫ཟؓའӱഡ࠹නམb҂႕ཙӱ֥щၲbᆃࣼննٚьਔGTK+აC++ਆᇕս֥ವކbбೂ4 GTK+აC++ࠁކӱ֥ഡ࠹აט൫,gtk-entry-set-text(GTK-ENTRY*entry,gchar*text)ֻ֥ؽ۱ҕඔေູൌіૼ,Ґ౼֥࿖ࡶࣉaᇯ҄ൌགྷ۲ᇕۿିgchar*োэਈ,ೂݔϜ၂۱charো֥ඔቆэ֥Ҧ൞ᆞಒ,֥ିܔᄝଖ۱ࢨ؍ᆺህᇿႿଖ۱ۿਈԮ۳൞ીႵ໙ี,֥҂ླေቓэਈোሇߐbି֥ഡ࠹ބൌགྷ,҂߶ၹൈॉ੮෮ႵۿିطܤՎാдb൮༵০ႨC++ބMPIეൌགྷඔऌԩބ3 2 ཨ༏Ԯ־ࢤ१(MP[3]I)ඔऌᄝ۲۱࠹ෘࢫׄᆭࡗ֥Ԯෂ໙,ีඔऌԩބཨ༏Ԯ־ࢤ१൞ႮটሱૅݓބᇝնჿႵ60ඔऌԮൻ൞ᆜ۱༢֥ނྏbൌགྷᆃ2ᇕսᄝ၂؟ದ܋षؿ֥,ᆃུ࣮ದჴٳඋ40؟۱҂֥۱ӱଽିܔཌྷವކ,ѩປӮ۲ሱ֥սۿିbᄝֆ໊,Їওਔѩྛ࠹ෘࠏ֥؟ඔᇶေളӁഅ,Վຓߎᆃ၂҄ᄠ҂ॉ੮ದࠏࢸ૫໙,ีᆺᄝଁྛٚൔ༯Ⴕն࿐ބᆟکൌဒ൩bཨ༏Ԯ־ࢤ१ൌᇉ൞၂۱ൌགྷ2ᇕս֥ವކbಖ,ުၛՎູࠎԤࣉ၂҄Ϝ९,ॖၛބFORTRAN77/C/Fortran90/C++֩ჰটൌགྷದࠏࢸ૫֥GTK+սเࡆࣉট,ູႨิ܂֥Աྛეࢲކ,ᆃᆃུეऎႵѩྛۿିb၂۱ॖ൪߄Ҡቔࢸ૫bMPI-1ᆦӻFORTRAN77ބC,MPI-2ԢᆦӻᄝႮC++aMPIބGTK+ᇕսቆӮ֥ӱFORTRAN77ބCຓߎᆦӻFortran90ބC++bૌᇏ,ӱ֥ॿࡏࢲܒaսԛགྷ֥༵ުඨູ:໓֥༢ჰট൞ᄝֆࠏߌ༯০ႨVC++ൌགྷ,֥ӱࡱaཌྷܱэਈലૼaӱषaՖ႗ೆඔऌaཁൕ֥ഡ࠹ބൌགྷ࿖ਔC++֥ѓሙbႮႿMPIದࠏࢸ૫aඔऌԩაඔऌ๙aӱࢲඏb2008年无线电工程第38卷第11期4 7
专题技术与工程应用໓ࡱ҆ٳЇݣਔ3ᇕщӱე෮Ⴈ֥໓ླ֥ህႨט൫ྐ༏,ఃט൫ఖ൞مႨՎህࡱ,бೂGTK+֥໓ࡱgtk haMPI֥໓ࡱmpi hႨט൫ྐ༏֥b࿊ཛ-lpthreadଢ֥൞ӱᄝ৵ࢤ֩bӱष҆ٳЇݣMPI-Init()ݦඔ,ӱࢲඏൈିܔ৵ࢤഈpthread९,Ֆطᆦӻ؟ཌӱb`pkg ҆ٳЇݣMPI-Finalize()ݦඔbཁൕದࠏࢸ૫ᆷ֥config cflags libsGTK+ 2 0gthread 2 0ᄵ`൞GTK+൞ᄝᇶ࠹ෘࢫׄഈ๙ݖטႨGTK+ս؍ཁൕԛದսщၲ෮ླ֥࿊ཛbᇿၩՎଁԱ൮໊֥ֆႄݼࠏࢸ૫bඔऌԩაඔऌ๙֥ս؍൞ᆜ۱ӱ൞ޓห൹,֥Վԩ֥ֆႄݼ҂൞߭Ӛቐш֥ପ۱֥ᇶุ,ႮC++ބMPI֥սቆӮbᄝՖ႗ೆط൞ESC༯ш֥ପ۱b-O2൞ӱႪ߄࿊ཛbඔऌࢨ؍,༢Ֆ႗ೆԚ߄ඔऌb၂Ϯ๙ݖщၲ࿊ཛ-Onট॥ᇅႪ߄ս֥ളӮ,ః໓ЧҰ࿘֥ࠎЧݖӱೂ༯,ᄝଖ۱࠹ෘࢫ(ׄᇶᇏn൞၂۱սіႪ߄ࠩљ֥ᆜඔ,n=0,1,2ࠇ3b࠹ෘࢫ)ׄ๙ݖದࠏࢌࢸ૫(GTK+ս؍ൌགྷ)щၲൈ࿊-OіൕൈࡨഒսӉ؇ބᆳྛൈࡗ,ࢤ൬Ⴈ֥Ұ࿘౨,ᇶ࠹ෘࢫׄϜҰ࿘౨๙ݖMPIི֥ݔა-O1ཌྷbᄝᆃ၂ࠩљഈ๙ӈࣉྛཌӱ๋MPI-Bcast()ݦඔԮෂ۳ః࠹ෘࢫׄ,۲۱࠹ෘࢫׄᆳྛֹ֥֒Ұ࿘ᄎෘሇބӾᅜ2ᇕႪ߄b࿊ཛ-O2ԢປӮ-O1ࠩ(C++ս؍)bࠆ֤Ұ࿘ࢲݔު,ૄ۱࠹ෘࢫׄႨљ֥Ⴊ߄ຓ,ൈࣉྛ၂ུحຓ֥טᆜ۽ቔbбೂ,MPI-Isend()ݦඔၛ٤ቅೖ๙ٚൔϜЧֹ֥Ұ࿘ࢲݔԮෂ۳ᇶԩఖᆷט؇b࿊ཛ-O3ԢਔປӮ-O2ࠩљ֥࠹ෘࢫׄb٤ቅೖ๙҂с֩֞๙ҠቔປಆປӮႪ߄۽ቔຓ,ߎЇও࿖ߌᅚषބః၂ུაԩఖьॖၛْ߭Ⴕܱ֥Ⴊ߄۽ቔb๙ӈটࢃ,n֥ᆴᄀնႪ߄֥ࠩ,ھ๙ྐҠቔॖၛࢌ۳หק֥๙ྐ႗ࡱಀປӮbᄝھ๙ྐ႗ࡱᆳྛھ๙ྐҠቔ֥ൈљᄀۚ,ӱ֥ᄎྛ؇ᄀॹb,ԩࠏॖၛൈࣉྛ࠹ෘҠቔ,ᆃဢьൌགྷਔ࠹ෘაᆳྛᄎྛӱ֥ଁೂ༯:๙ྐ֥ᇗןbਸ਼ຓ,ᄝԮෂअ҆Ұ࿘ࢲݔᆭభ,༵০mpiexec n num ProgramႨMPᄝᄎྛӱᆭభ,ླေఓѩྛӱᄎྛߌbI-Pack()ݦඔࡼေԮෂ֥෮ႵඔऌյЇӮ၂۱ඔऌЇ,ᄜႨMPI-Isend()ݦඔԮෂඔऌ,ᆃဢࣼఓࠢಕᇏnum۱࠹ෘࠏྙӮѩྛӱᄎྛߌൌགྷਔඔऌ֥၂ՑྟԮෂ,ࡨഒਔ๙षཧބؓջ֥ଁೂ༯:ॺ֥ᅝႨbᄝᇶ࠹ෘࢫׄ০ႨMPmpdboot n numI-Irecv()ݦඔࢤ൬۲۱ࢫׄؿট֥ඔऌЇbં൞ؿෂඔऌဒᆣnum۱࠹ෘࠏ൞ڎ۽ቔᆞӈ֥ଁೂ༯:mpdtraceࠇmpdringtest(MPI-Isend())ߎ൞ࢤ൬ඔऌ(MPI-Irecv())ླေႨMPI-WAIT()ݦඔؓؿෂࠇࢤ൬Ҡቔࣉྛࡓ5 ࢲඏე൪,ၛьಒಪؿෂࠇࢤ൬Ҡቔ൞ڎӮۿbᄝᇶ࠹ෘࢫׄؓ෮ႵҰ࿘ࢲݔοཌྷර؇ࣉྛஆ,ѩϜஆሹࢲਔൌགྷC++aMPIބGTK+ᇕეࠁކࢲݔൻԛ֞ದࠏࢌࢸ૫bщӱ֥၂ུࣜဒ,ᇶေЇওӱࢲܒഡ࠹aეսൌဒіૼ,сྶϜൌགྷದࠏࢸ૫֥GTK+ս؍ඨaᇶေݦඔ֥Ⴈٚمaщၲଁࠣщၲ࿊ཛ٢ᄝՖ႗౼ඔऌ֥սᆭުbၹູႨࢸ૫߶֥Ⴈ֩bൌіૼ,ᆃ3ᇕეିܔᄝࠢಕߌޓॹཁൕᄝଞഈ,طՖ႗ഈ౼ඔऌᄵླေཌྷ༯ཌྷླྀט۽ቔb ؓࢠӉ֥ൈࡗbႨႵॖିᄝࢸ૫၂ԛགྷࣼؿԛҰҕॉ໓ང࿘౨,طՎൈ౼ඔऌҠቔഉໃປӮ,Ֆط֝ᇁҰ[1] ৡ,Ϣ ྋ ൌൈࠢಕ༢ഡ࠹აྟିٳ༅[J] ࠹࿘ാϧbෘࠏ۽ӱაႋႨ,2007(18):120-122 Ⴈ༯ਙଁࣉྛщၲ[2]ӧ Ⴇ,ᅦࡄ៑,ಱࡀܻ ૫ཟࠏܒ֥ᇆି໓Чٳ༅༢:֥࣮[J] ཌ۽ӱ,2007,37(2):31-33 mpicxx-g-O2-lpthreadProgram cpp-oProgaram[3]ᅦܻ, ޣ LinuxᇏGTK+щӱඌ࣮ࠣఃႋp`kg config cflags libsGTK+ 2 0gႨ[J] ೈࡱ़֝,2007(15):38-40 thread 2 0`щၲଁᇏ֥࿊ཛ-g,ॖၛӁളGNUט൫ఖ[4]ᆽߩ ۚྟି࠹ෘᆭѩྛщӱඌ)ѩྛӱഡ࠹[M] Кࣘ:ౢն࿐ԛϱഠ,1995 gdb෮ླ֥ט൫ྐ༏,ၛьॖၛᄝྙࢸ૫ߌ༯ט൫ӱ,щၲൈՎ࿊ཛᄵمႨቔᆀࡥࢺgdbࣉྛטӧ Ⴇ ଳ,(1968-),ᇏݓሰ॓ࠢ܄ඳֻඹ࣮෮൫b္ॖၛႨ ggdb࿊ཛӁളGNUט൫ఖgdb෮۽ӱഽbᇶေ࣮ٚཟ:ྐ༏ԩb4 82008RadioEngineeringVo1 38No 11