خط لوله نرم‌افزاری

در علوم رایانه، خط لوله‌ی نرم‌افزاری (به انگلیسی:software pipelining) مانند خط لوله‌ی سخت افزاری روشی جهت بهینه‌سازی حلقه‌ها است. خط لوله‌ی نرم‌افزاری یک نوع اجرای پویای دستورها است به گونه‌ای که تغییر ترتیب اجرای دستورها توسط کامپایلر به جای پردازنده انجام می‌شود.
این مهم است که بتوانیم خط لوله‌ی نرم‌افزاری را که روشی است برای بهبود حلقه‌هایی که دستورهای داخل آن به یکدیگر وابسته‌اند را از زمان‌بندی ماژول که در حال حاضر شناخته شده‌ترین روش استفاده شده توسط کامپایلرها برای تولید حلقه‌های خط لوله‌ای نرم‌افزاری است تشخیص دهیم. خط لوله‌ی نرم‌افزاری روشی آشنا برای برنامه‌نویسان زبان اسمبلی است. آن‌ها از این روش برای ماشین‌هایی که توانایی اجرای چند دستور همزمان را دارند از زمانی که این گونه معماری‌ها وجود داشته‌اند استفاده می‌کردند. تولید کارآمد این گونه کدها توسط کامپایلرها به خلق زمان‌بدی ماژول توسط Rau و Glaeser بر می‌گردد.[۱] Lam نشان داد که نیازی به سخت‌افزار مخصوص برای استفاده کارآمد از زمان‌بندی ماژول نیست. روش استفاده شده توسط او به نام توسعه‌ی متغیر ماژول (به انگلیسی:modulo variable expansion) به طور گسترده در عمل استفاده می‌شود.[۲] .Gao et al خط لوله‌ی بهینه برای برنامه نویسی خطی عدد صحیح را فرمول بندی کرد.[۳] علاوه بر الگوریتم‌های زمان‌بندی ماژول، الگوریتم‌های دیگری نیز برای برآورده کردن خط لوله‌ی نرم‌افزاری وجوددارند که از بین آن‌ها می‌توان به الگورتیم‌های شناخت هسته (به انگلیسی:kernel recognition) اشاره کرد.[۴]این مقاله به مقایسه این دو الگورتیم پیاده سازی خط لوله‌ی نرم‌افزاری پرداخته است.

مثال

حلقه‌ی زیر را در نظر بگیرید:

for i = ۱ to عدد بزرگ
 A(i)
 B(i)
 C(i)
end

در این مثال، C(i) ،B(i) ،A(i) دستورهایی هستند وابسته به متغیر i و به یکدیگر نیز وابسته‌اند. این به این معنی است که اجرای دستور A(i) باید قبل از اجرای دستور B(i) به پایان رسیده باشد. به طور مثال، دستور A می‌تواند در داده‌ای را از حافظه‌ی اصلی بر ثباتی بنویسد و دستور B عملیاتی بر روی آن ثبات انجام دهد و دستور C می‌تواند مقدار آن ثبات را در خانه‌ای از حافظه‌ی اصلی ذخیره کند. اما دستورهایی که مقدار متغیر i در آن‌ها متفاوت است از یکدیگر مستقل‌اند. به عبارتی دیگر، دستور A(۲) می‌تواند قبل از دستور A(۱) اجرا شود.
بدون استفاده از خط لوله‌ی نرم‌افزاری، ترتیب اجرای دستورها به صورت زیر است:

A(۱) B(۱) C(۱) A(۲) B(۲) c(۲) A(۳) B(۳) C(۳) ...

فرض کنید که هر دستور در ۳ چرخه ساعت اجرا می‌شود(فعلاً از هزنیه‌ی نگه‌داری و اجرای حلقه صرف نظر کنید). همچنین در نظر بگیرید که مانند بسیاری از سیستم‌های نوین، یک دستور می‌تواند در هر چرخه ساعت شروع به اجرا کند به شرطی که از دستورهایی که که اکنون در حال اجرا هستند، مستقل باشد. در مثالی که در آن از خط لوله استفاده نشده است، هر تکرار حلقه ۹ چرخه ساعت برای تکمیل شدن زمان می‌برد: ۳ چرخه ساعت برای هر کدام از دستورهای C(i) ،B(i) ،A(i).
حال ترتیب اجرای دستورهای زیر را با خط لوله‌ی نرم‌افزاری در نظر بگیرید:

A(۱) A(۲) A(۳) B(۱) B(۲) B(۳) C(۱) C(۲) C(۳) ...

به سادگی می‌توان نشان داد که یک دستور می‌تواند در هر چرخه ساعت اجرای خود را آغاز کند، که این به این معنا است که ۳ تکرار حلقه‌ی اولیه می‌تواند در ۹ چرخه ساعت به پایان برسد. در نتیجه، هر بار تکرار حلقه‌ی اولیه به طور میانگین ۳ چرخه ساعت زمان می‌برد.

پیاده سازی

خط لوله‌ی نرم‌افزاری معمولاً در ترکیب با بازکردن حلقه استفاده می‌شود. این ترکیب روش‌ها معولاً بسیار بهینه‌تر از استفاده از روش بازکردن حلقه به تنهایی است. در مثال بالا، ما می‌توانیم قطعه کد بالا را به صورت زیر بنویسیم(فرض کنید که عدد بزرگ بر ۳ بخش‌پذیر باشد):

for i = ۱ to (عدد بزرگ - ۲) step ۳
 A(i)
 A(i+۱)
 A(i+۲)
 B(i)
 B(i+۱)
 B(i+۲)
 C(i)
 C(i+۱)
 C(i+۲)
end

در صورتی که تعداد تکرارهای حلقه بخش‍پذیر بر ۳ نباشند مسئله کمی پیچیده تر می‌شود. می‌توانید برای اطلاع از راه حل‌های این مشکل به صحفه‌ی بازکردن حلقه مراجعه کنید. در حالت کلی، بازکردن حلقه لزوماً بهترین روش برای پیاده‌سازی خط لوله‌ی نرم‌افزاری نیست. به طور مثال اگر حلقه شامل دستوری با تاخیر زیاد باشد استفاده از بازکردن حلقه بهینه نمی‌شود. قطعه کد پایین را در نظر بگیرید:

for i = ۱ to عدد بزرگ
 A(i) ; ۳ میزان تاخیر
 B(i) ; ۳
 C(i) ; ۱۲ (مثلاً یک دستور میمز شناور)
 D(i) ; ۳
 E(i) ; ۳
 F(i) ; ۳
end

که این به این معنی است که حلقه باید ۱۲ بار باز شود تا از گلوگاه دستور C جلوگیری شود. که این موجب می‌شود تا حجم کد حلقه با ضریب ۱۲ افزایش یابد. وضعیت بدتر هنگامی پیش می‌آید که مقدمه ( قطعه کدی که در حالتی که عدد بزرگ بر ۱۲ بخش‌پذیر نباشد قبل از حلقه قرار می‌گیرد) حجم بیشتری از کد حلقه داشته باشد و با احتمال زیاد بهینه نباشد زیرا خط لوله‌ی نرم‌افزاری نمی‌تواند برای این قطعه کد استفاده شود. علاوه بر این، اگر اندازه‌ی عدد بزرگ نزدیک به تعداد بارهای بازشدن حلقه باشد، در هنگام اجرا، اکثر زمان صرف اجرای مقدمه‌ی ناکارآمد می‌شود که این باعث ناکارآمدی بهینه‌سازی از طریق خط لوله‌ی نرم‌افزاری می‌شود. حال اگر بخواهیم بدون استفاده از بازکردن حلقه از خط لوله‌ی نرم‌افزاری استفاده کنیم، قطعه کد زیر را برای مثال خود بدست می‌آوریم(در ادامه به توضیح مقدمه و خاتمه می‌پردازیم):

مقدمه
for i = ۱ to (عدد بزرگ - ۶)
 A(i+۶)
 B(i+۵)
 C(i+۴)
 D(i+۲) ; را رد کرده‌ایم i+۳ توجه کنید که 
 E(i+۱)
 F(i)
end
خاتمه

قبل از اینکه به توضیح مقدمه و خاتمه بپردازیم، که شامل دستورهایی می‌شوند که در حلقه اجرا نمی‌شوند، از درستی قطعه کد داخل حلقه اطمینان حاصل می‌کنیم. به طور خاص تکرار هفتم حلقه‌ی اصلی را در نظر بگیرید. حلقه‌ی اول حلقه‌ی خط لوله‌ای اولین تکراری است شامل دستوری از تکرار هفتم حلقه‌ی اصلی است. ترتیب اجرای دستورها به صورت زیر است:

تکرار ۱ : A(۷) B(۶) C(۵) D(۳) E(۲) F(۱)
تکرار ۲: A(۸) B(۷) C(۶) D(۴) E(۳) F(۲)
تکرار ۳: A(۹) B(۸) C(۷) D(۵) E(۴) F(۳)
تکرار ۴: A(۱۰) B(۹) C(۸) D(۶) E(۵) F(۴)
تکرار ۵: A(۱۱) B(۱۰) C(۹) D(۷) E(۶) F(۵)
تکرار ۶: A(۱۲) B(۱۱) C(۱۰) D(۸) E(۷) F(۶)
تکرار ۷: A(۱۳) B(۱۲) C(۱۱) D(۹) E(۸) F(۷)

همانطور که مشاهده می‌کنید برخلاف حلقه‌ی اصلی، در اجرای حلقه‌ی خط لوله‌ای مشکل گلوگاه دستور C رفع شده است. توجه کنید که 12 دستور بین دستور C(7) و دستور D(7) وابسته به آن وجود دارد که این موجب می‌شود که بتوان در چرخه ساعت‌هایی که دستور C(7) در حال اجرا است، بقیه دستورها را اجرا کرد. مقدمه و خاتمه ،در شروع و پایان حلقه، مسئول اجرای دستورهایی هستند که در حلقه اجرا نشده‌اند. قطعه کد زیر مقدمه‌ای برای مثال بالای ما را نشان می‌دهد:

 ; مقدمه‌ی حلقه (برای وضوح بیشتر دستورهایی که همزمان اجرا می‌شوند در یک خط آمده‌اند) 
 A(۱)
 A(۲), B(۱)
 A(۳), B(۲), C(۱)
 A(۴), B(۳), C(۲) ; را شروع کرد C(۱) نمیتوان D(۱) به دلیل پایان نیافتن
 A(۵), B(۴), C(۳), D(۱)
 A(۶), B(۵), C(۴), D(۲), E(۱)

هر خط از قطعه کد بالا نشان دهنده‌ی یک تکرار از حلقه‌ی خط لوله‌ای اصلی است، که دستورهایی که هنوز شروع نشده‌اند را شامل نمی‌شود. به طریق مشابه، خاتمه به تدریج دستورهایی که تکرار آن‌ها به پایان رسیده‌است را حذف می‌کند. قطعه کد زیر نشان دهنده‌ی خاتمه است:

 ; خاتمه‌ی حلقه (برای وضوح بیشتر دستورهایی که همزمان اجرا می‌شوند در یک خط آمده‌اند) 
 B(bignumber), C(bignumber-۱), D(bignumber-۳), E(bignumber-۴), F(bignumber-۵)
 C(bignumber), D(bignumber-۲), E(bignumber-۳), F(bignumber-۴)
 D(bignumber-۱), E(bignumber-۲), F(bignumber-۳)
 D(bignumber), E(bignumber-۱), F(bignumber-۲)
 E(bignumber), F(bignumber-۱)
 F(bignumber)

اما همیشه پیدا کردن مقدمه و خاتمه مناسب ساده نیست. در مثالی که در بالا آورده شده است ۱۸ دستور برای مقدمه و ۱۸ دستور برای خاتمه استفاده شده‌است. این به این معنی است که مقدمه و پایان 6 برابر تعداد دستورات داخل حلقه دستور دارند.[۵] این صفحه به خوبی مشکلات به وجود آمده و روشی برای رفع کردن آن‌ها ارائه کرده است.

جستارهای وابسته

منابع

  1. B.R. Rau and C.D. Glaeser, "Some scheduling techniques and an easily schedulable horizontal architecture for high performance scientific computing", In Proceedings of the Fourteenth Annual Workshop on Microprogramming (MICRO-14), December 1981, pages 183-198
  2. M. Lam, "Software pipelining: An effective scheduling technique for VLIW machines", In Proceedings of the ACM SIGPLAN 88 Conference on Programming Language Design and Implementation (PLDI 88), July 1988 pages 318-328. Also published as ACM SIGPLAN Notices 23(7).
  3. J. Ruttenberg, G.R. Gao, A. Stoutchinin, and W. Lichtenstein, "Software pipelining showdown: optimal vs. heuristic methods in a production compiler", In Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language Design and Implementation, June 1996, pages 1-11. Also published as ACM SIGPLAN Notices 31(5).
  4. V. Allan, R.B. Jones, R.M. Lee, S.J. Allan, "Software Pipelining", In ACM Computing Surveys, (1998). 27. 10.1145/212094.212131.
  5. Wikipedia contributors (۱۶ اکتبر ۲۰۱۹). «Software pipelining». Wikipedia, The Free Encyclopedia. دریافت‌شده در ۱ فوریه ۲۰۲۰.

Read other articles:

Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: King Gnu – berita · surat kabar · buku · cendekiawan · JSTOR King GnuNama lain Mrs.Vinci (2013) Srv.Vinci (2013–2017) AsalJapanGenreJ-popalternative rockindie popnu jazzClassicalTahun aktif2013–prese...

 

سفارة النرويج في الجزائر النرويج الجزائر الإحداثيات 36°45′07″N 3°00′52″E / 36.75192°N 3.01457°E / 36.75192; 3.01457  البلد الجزائر  المكان مدينة الجزائر الموقع الالكتروني الموقع الرسمي  تعديل مصدري - تعديل   سفارة النرويج في الجزائر هي أرفع تمثيل دبلوماسي[1] لدولة ال...

 

Cursa de BombersThe race passes through the Passeig de ColomDateAprilLocationBarcelona, Catalonia, SpainEvent typeRoadDistance10 kmEstablished1999Course recordsMen: 27:04 (2010) Josphat Menjo Women: 31:25 (2005) Irene KwambaiOfficial siteCursa de Bombers The Cursa de Bombers (English: Fireman's Race) is an annual road running race over 10 km which takes place in April[1] in Barcelona, Catalonia, Spain. History and course The race was created in 1999 as a joint venture between the...

Multi-purpose facility Andheri Sports ComplexLocationVeera Desai Road, Andheri West, Mumbai, 400053 IndiaOwnerBrihanmumbai Municipal CorporationCapacity20,000[1]Opened1988TenantsMumbai City FC The Andheri Sports Complex also known as Shahaji Raje Krida Sankul is a multi-purpose facility located on Veera Desai Road in Andheri West, Mumbai, India. It was built in 1988 at Rs. 30 crore for schools that lacked the necessary infrastructure to hold sports meets.[2] The complex is use...

 

Vizcondado de la Calzada Corona vizcondalPrimer titular Baltasar de Chaves y MendozaConcesión Felipe IV31 de diciembre de 1630Linajes Casa de ChavesCasa de ZúñigaCasa de PortocarreroCasa de AlbaActual titular Carlos Fitz-James Stuart y Martínez de Irujo[editar datos en Wikidata] El vizcondado de la Calzada es un título nobiliario español creado por real cédula el 31 de diciembre de 1630 por el rey Felipe IV de España, ratificada el 16 de febrero de 1637, por haberse perdido ...

 

Anja Andersen Persoonlijke informatie Geboortedatum 15 februari 1965 Geboorteplaats Odense, Denemarken Lengte 178 cm Gewicht 70 kg Sport Handbal Positie Middenopbouw Clubinformatie Carrière beëindigd Senioren Seizoen Club 186-19871987-198819891989-19931993-19961996-1999 Aalborg KFUM Ikast FS Viborg HK Bækkelagets SK TuS Walle Bremen Bækkelagets SK Interlands 1989-1998  Denemarken 133 (725) Medailles Olympische Spelen 1 2000 Sydney 1 1996 Atlanta Wereldkampioenschappen 1 1997 Duitslan...

Royal Informações pessoais Nome completo Ronaldo Henrique Apelido Royal Modalidade Voleibol Nascimento 17 de junho de 1976 (47 anos)Guarulhos,  São Paulo Nacionalidade  Brasil Compleição Peso: 100 Kg • Altura: 1,94 m Posição Levantador Medalhas Campeonato Sul-Americano de Voleibol Masculino Sub-19 Ouro Valência 1992 Equipe Campeonato Mundial de Voleibol Masculino Sub-19 Ouro Istambul 1993 Equipe Campeonato Sul-Americano de Voleibol Masculino Sub-21 Ouro Lima 1994...

 

NXT Women's ChampionshipSabuk NXT Women's Championship saat ini.InformasiJuara saat iniAsukaTanggal dimenangkan1 April 2016Tanggal dibentuk5 April 2013PromotorWWEMerekNXTStatistikPemegang pertamaPaige[1]Pemegang terbanyakSemua (1 kali)Pemegang terlamaPaige (308 hari)Pemegang tersingkatSasha Banks (192 hari)Pemegang tertuaAsuka (34 tahun, 188 hari)Pemegang termudaPaige (20 tahun, 308 hari)Pemegang terberatAsuka 137 lbs (62 kg)Pemegang paling ringanSasha Banks 114 lb...

 

保羅·艾古拿Paul Aguilar 個人信息全名 Paul Nicolás Aguilar Rojas出生日期 (1986-03-06) 1986年3月6日(37歲)出生地點 墨西哥錫那羅亞州身高 1.78米(5英尺10英寸)位置 後衛俱乐部信息現在所屬 CF阿美利加球衣號碼 22職業俱乐部*年份 球隊 出场 (进球)2004-2011 帕丘卡 136 (11)2004-2005 →華雷斯印第奧斯 37 (2)2011- CF阿美利加 142 (8)国家队‡2007- 墨西哥 49 (4) * 職業俱乐部出场次數與进球數僅...

French rugby union player Rugby playerTeddy BaubignyDate of birth (1998-09-02) 2 September 1998 (age 25)Place of birthMeaux, FranceHeight1.84 m (6 ft 0 in)Weight109 kg (240 lb; 17 st 2 lb)Rugby union careerPosition(s) HookerSenior careerYears Team Apps (Points)2016–20222022– Racing 92Toulon 10622 (65(15)) Correct as of 3 September 2022International careerYears Team Apps (Points)2020– France 1 (0) Correct as of 28 Nov 2020 Teddy Baubigny ...

 

2017 novel by Samantha Shannon The Song Rising AuthorSamantha ShannonCountryUnited KingdomLanguageEnglishSeriesThe Bone SeasonGenreUrban fantasyPublished2017 (Bloomsbury)ISBN978-1-632-86624-0Preceded byThe Mime Order Followed byThe Dawn Chorus  The Song Rising is a 2017 supernatural dystopian novel by British writer Samantha Shannon, the third in The Bone Season series. Plot synopsis Newly crowned as Underqueen, Paige Mahoney has a great deal to worry about: Jaxon, who has...

 

Experimental drug for the treatment of achondroplasia VosoritideClinical dataTrade namesVoxzogoOther namesBMN-111License data US DailyMed: Vosoritide Pregnancycategory AU: B2[1][2] Routes ofadministrationSubcutaneous injectionATC codeM05BX07 (WHO) Legal statusLegal status AU: S4 (Prescription only)[1] US: ℞-only[3][4] EU: Rx-only[5] IdentifiersCAS Number1480724-61-5DrugBankDB11928ChemSpider44210446UNII7S...

2012 live album by Romeo SantosThe King Stays King: Sold Out At Madison Square GardenLive album by Romeo SantosReleasedNovember 6, 2012RecordedFebruary 11–23, 2012New York City, New YorkVenueMadison Square GardenGenreBachataR&BLength1:18:35LanguageSpanishLabelSony LatinRomeo Santos chronology Formula, Vol. 1(2011) The King Stays King: Sold Out At Madison Square Garden(2012) Formula, Vol. 2(2014) Singles from Formula, Vol. 1 Llévame ContigoReleased: August 20, 2012 Alternative c...

 

Motor vehicle Citroën FukangCitroën Fukang hatchOverviewManufacturerDongfeng Peugeot-Citroën AutomobileAlso calledDongfeng N15 (van)Dongfeng EQ1010F (van)Production1992–2009Model years1992–2009Body and chassisClassCompactBody style4-door sedan5-door hatchback2-door panel van4-door pickup truckLayoutFF layoutRelatedCitroën ZXCitroën ElyséeCitroën C-ElyséeMaple HisoonPowertrainEngine1.4 L TU3JP/K I41.6 L N6A 10FX3A PSA I4Transmission5-speed manualChronologySuccessorCi...

 

Gaming magazine Cover of Issue #3, 1992Inquisitor, subtitled A 40K Forum, is a game magazine published by Armorcast that focussed on Games Workshop's tabletop science fiction miniature wargame Warhammer 40,000 Description After Games Workshop (GW) published the first edition of Warhammer 40,000 in 1987, Tim DuPertuis of Santa Rosa, California became interested in the game, and in 1991 began to publish a quarterly fanzine called Inquisitor. At about the same time, GW licensed DuPertuis to crea...

此條目没有列出任何参考或来源。 (2012年12月24日)維基百科所有的內容都應該可供查證。请协助補充可靠来源以改善这篇条目。无法查证的內容可能會因為異議提出而被移除。 《2013年台灣播出之韓劇列表》為在台灣首次於2013年播出之韓國戲劇列表,尚未播出之戲劇購買版權之電視台僅供參考。 日期 劇名 韓國電視台 台灣電視台 主要演員 網站 韓國播出年份 01月3日 鋼琴下的...

 

Hair that artificially adds length and fullness to human hair This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article may have too many section headers. Please help consolidate the article. (August 2016) (Learn how and when to remove this template message) The article's lead section may need to be rewritten. Please help improve the lead and read the lead layout guide. (August 2016) (...

 

1955 coup d'état in Argentina This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (October 2012) (Learn how and when to remove this template message) This article's lead section may be too short to adequately su...

Disused railway station in Shropshire, England Horsehay and DawleyThe preserved station in 2008General informationLocationHorsehay, ShropshireEnglandCoordinates52°39′48″N 2°28′55″W / 52.6632°N 2.4820°W / 52.6632; -2.4820Grid referenceSJ675073Platforms1Other informationStatusDisusedHistoryOriginal companyWellington and Severn Junction RailwayPre-groupingGreat Western RailwayPost-groupingGreat Western RailwayKey dates2 May 1859Opened[1]1962Closed1976R...

 

سفارة البرتغال في أوكرانيا البرتغال أوكرانيا الإحداثيات 50°25′41″N 30°30′52″E / 50.428177777778°N 30.514516666667°E / 50.428177777778; 30.514516666667 البلد أوكرانيا  المكان كييف الموقع الالكتروني الموقع الرسمي تعديل مصدري - تعديل   سفارة البرتغال في أوكرانيا هي أرفع تمثيل دبلوماسي[1] ...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!