مقاله ترجمه شده رشته ریاضی - ترجمه تخصصی
استراتژیهای مر تبسازی و موازیسازی
در ادامه مطلب بر این امر تاکید داریم که سیستم خطی معادلات ذاتاً کاری بازگشتی است. برای سیستمهای متراکم، تعداد عملیات در مقایسه با طول بازگشت به اندازه کافی بزرگ است و انجام موازیسازی کاملا ساده است. اما در سیستمهای اسپارس دشوارتر است. در این خبش نگاهی داریم بر استراتژی های ثبت معادلات (یا جایشگت ماتریس) که موجب افزایش موازیسازی موجود میشوند.
برای ثبت سفارش ترجمه تخصصی، کلیک کنید
شکل 6.12. حل ILU چند رنگ موازی در چهار مرحله.
همه این استراتژیها را میتوان گونهای از حذف گاوسی در نظر گرفت. با ایجاد گونههای ناقصی از آنها (رجوع کنید به بخش 5.5.5.1)، همه این استراتژیها در ساخت پیش شرط ساز برای متدهای حل تکراری نیز بکار میرود.
6.9.1. تشریح تو در تو
چند مثال از مرتب کردن متغیرها در دامنه علاوه بر مرتب کردن واژگانی را در بالا دیدید. در این بخش مرتب کردن با تشریح تو در تو بررسی میشود که در ابتدا به عنوان راهی برای کاهش شرح دادن ایجاد شد. اما این روش در زمینه محاسبه موازی نیز مفید است.
شکل 6.13. تشریح دامنه به دو زیردامنه تو در تو غیرمتصل و یک جدا کننده.
تشریح تو در تو (Nested dissection) فرآیندی بازگشتی برای تعیین ترتیب مجهولها در دامنه است. در مرحله اول، دامنه محاسبه به دو قسمت تقسیم میشود، و نوار تقسیم بین این دو قرار میگیرد؛ رجوع کنید به شکل 6.13). برای اینکه دقیق باشد، جدا کننده به اندازه کافی عریض است تا ارتباطی بین زیردامنه چپ و راست وجود نداشته باشد. ماتریس حاصل ADD ساختار 3 × 3 دارد، که معادل با سه قسمت دامنه است. چون زیر دامنه Ω1 و Ω2 به هم وصل نیستند، زیرماتریس A12DD و A21DD صفر است.
این فرآیند تقسیم دامنه بوسیله جدا کننده تجزیه دامنه یا زیرساخت دامنه نامیده میشود، اگرچه این نام با تحلیل ریاضی ماتریسهای حاصل نیز مرتبط است [10]. در این مثال دامنه چهارگوش، یافتن جداکننده اهمیتی ندارد. با این حال، برای نوع معادلاتی که از BVPها بدست آمد همیشه میتوان جدا کننده را به طور موثری برای هر دامنهای یافت [115]؛ رجوع کنید به بخش 20.5.1.
حالا فاکتورگیری LU از این ماتریس را در نظر بگیرید. اگر برحسب ساختار بلوک 3 × 3 از آن فاکتورگیری کنیم، داریم
که در آن
S33 = A33 – A31A11-1A13 – A32A22-1A23
در اینجا واقعیت مهم این است که
- سهم A31A11-1A1 و A32A22-1A23 را میتوان همزمان محاسبه کرد، بنابراین فاکتورگیری تا حد زیادی موازی است؛ و
- درحل رو به جلو و حل رو به عقب، مولفه 1 و 2 حل را میتوان همزمان محاسبه کرد، بنابراین فرآیند حل نیز تا حد زیادی موازی است.
ممکن است کار با بلوک سوم به صورت موازی ساده نباشد، بنابراین این امر مولفه ترتیبی به الگوریتم اضافه میکند. هم چنین باید ساختار S33 را به دقت بررسی کنیم.
تمرین 6.24. در بخش 5.4.3.1 ارتباط بین فاکتورگیری LU و تئوری گراف را دیدید: حذف گره منجر به گرافی با گره حذف شده میشود، اما با افزوده شدن ارتباطات خاص جدید. نشان دهید که بعد از حذف دو مجموعه متغیر اول، گراف ماتریس باقیمانده در جدا کننده کاملا متصل خواهد بود.
نتیجه این است که با حذف همه متغیرها در بلوک 1 و 2، ماتریس S33 کاملا متراکم در اندازه n × n برجای میماند.
افزودن جدا کننده منجر به فاکتورگیری میشود که موازی دوطرفه است. حالا این فرآیند را تکرار میکنیم: جدا کنندهای داخل بلوک 1 و 2 قرار میدهیم (شکل 6.14)، که ساختار ماتریس زیر بدست میاید:
شکل 6.14: تجزیه دامنه چهارطرفه.
(به شباهتهای بین ماتریس "فلش" در بخش 5.4.3.4 توجه کنید و این امر را که منجر به پر کردن کمتری میشود، به خاطر آورید.) فاکتورگیری LU این عبارت است از:
برای ثبت سفارش ترجمه تخصصی، کلیک کنید
که در آن
حالا ساخت فاکتورگیری به ترتیب زیر است:
- بلوکهای Aii به صورت موازی برای i = 1, 2, 3, 4 فاکتورگیری میشود؛ همینطور سهم A5i, Aii-1Ai7 برای i = 1, 2، Aii-1Ai6 برای i = 3, 4، و A7iAii-1Ai7 برای i = 1, 2, 3, 4 میتوان به صورت موازی ساخت.
- ماتریسهای مکمل Schur، S5, S6 شکل میگیرد و سپس به صورت موازی فاکتورگیری میشود و سهم A7iAi-1 برای i = 5,6 به صورت موازی ساخته میشود.
همانند توجیه بالا میتوان نتیجه گرفت که بعد از حذف بلوک 1, 2, 3, 4 ماتریس به روز شده S5, S6 متراکم و با اندازه n/2 است، و بعد از حذف بلوک 5,6 ماتریس مکمل Schur، S7 ماتریس متراکم در اندازه n است.
تمرین 6.25. نشان دهد که حل سیستمی با ADD موازی سازی شبیه به ساخت فاکتورگیری دارد که در بالا توضیح داده شد.
برای ارجاع بیشتر، مجموعه 1 و 2 را خواهر برادر مینامیم، و 3 و 4 را نیز همینطور. مجموعه 5 والد 1 و 2 است، 6 والد 3 و 4 است؛ 5 و 6 خواهر و برادر هستند و 7 والد 5 و 6 است.
6.9.1.1. تجزیه دامنه
در شکل 6.14 دامنه را با فرآیند بازگشتی به چهار بخش تقسیم کردیم. اینکار مقدمهای برای بحث ما درباره تشریح تو در تو میشود. هم چنین میتوان بلافاصله دامنه را به هر تعداد نوار، یا شبکهای از زیردامنهها تقسیم کرد. تا زمانیکه جدا کننده ها به اندازه کافی عریض باشند ساختار ماتریسی با زیردامنههای مستقل زیاد حاصل خواهد شد. همانند بحث بالا، فاکتورگیری LU با مشخصات زیر خواهد بود:
- پردازش موازی زیردامنهها، هم در فاکتورگیری و م در حل L, U، و
- سیستمی برای حل در ساختار جدا کننده.
شکل 6.15. تجزیه یکطرفه دامنه
تمرین 6.26. ماتریس حاصل از BVP دو بُعدی ساختار بلوکی سه قطری خواهد داشت. دامنه را به چهار نوار تقسیم کنید، یعنی با استفاده از سه جدا کننده (رجوع کنید به شکل 6.15). توجه داشته باشید که جدا کنندهها در ماتریس اصلی به هم وصل نیستند.
حالا ساختار اسپارس سیستم حاصل در جدا کنندهها را رسم کنید که حذف زیردامنههاست. نشان دهید که سیستم سه قطری بلوکی است.
6.9.1.2 پیچیدگی
متد تشریح تو در تو فرآیند بالا را تکرار می کند تا زیردامنه ها خیلی کوچک شوند. برای تحلیل نظری، تقسیم را ادامه میدهیم تا اندازه زیر دامنهها 1 × 1 شود، اما در عمل میتوان در اندازههای مثل 32 توقف کرد، و حل کننده متراکم موثری برای فاکتورگیری و وارونه کردن بلوکها بکار برد.
برای بدست آوردن پیچیدگی الگوریتم، دوباره شکل 6.14 را بررسی میکنیم و میبینیم که پیچیدگی، مجموع فضاییی که فاکتورگیری تشریح تو در توی کاملا بازگشتی نیاز دارد، مجموع موارد زیر است:
- یک ماتریس متراکم در جدا کننده در اندازه n، به اضافه
- دو ماتریس متراکم در جدا کنندهها در اندازه n/2،
- فضای 3/2n2 و زمان 5/12n3؛
- دو جمله بالا در چهار زیر دامنه در اندازه (n / 2) × (n / 2) تکرار میشود؛
با مشاهده اینکه n= N است، داریم
ظاهراً حالا فاکتورگیری داریم که تا حد زیادی موازی است، و در O(N log N) به جای O(N3/2) انجام میگیرد (رجوع کنید به بخش 5.4.3.3). زمان فاکتورگیری نیز از O(N2) به O(N3/2) کاهش مییابد.
متاسفانه این صرفهجویی در فضا فقط در دو بُعد روی میدهد: در سه بعد موارد زیر لازم است:
- یک جدا کننده در اندازه n × n، با فضای (n × n)2 = N4/3 و زمان 1/3 . (n × n) = 1/3.N2،
- دو جدا کننده در اندازه n/2 × n، با فضای N3/2/2 و زمان 1/3 . N2/4،
- که بالغ بر 7/4N3/2 فضا و 21 / 16N2 /3 زمان میشود؛
- در سطح بعدی 8 زیردامنه وجود دارد که با n → n/2 به این جملات کمک میکند و در نتیجه N→N/8.
در نتیجه مجموع فضا عبارت است از
و مجموع زمان عبارت است از
حالا دیگر صرفهجویی بسیار بالای مورد دو بعدی را داریم. تحلیل پیچیدهتر نشان میدهد که بهبودی مرتبه در مسائل کلی در دوبُعد حاصل میشود. و به طور کل سه بُعدی پیچیدگی بالاتری دارد [114].
6.9.1.3. موازیسازی
متد تشریح تو در تو به وضوح موازیسازی زیادی را ایجاد میکند و ما میتوانیم آن را کار موازیسازی عنوان کنیم (بخش 2.5.3): در رابطه با هر جدا کننده کار فاکتورگیری ماتریسهای آن وجود دارد، و فاکتورگیری با حل سیستم خطی بر اساس متغیرهای آن است. با این حال، این کارها مستقل از هم نیستند: در شکل 6.14 فاکتورگیری در دامنه 7 باید منتظر 5 و 6 بماند و آنها نیز باید منتظر 1, 2, 3, 4 باشند. بنابراین کارهای مرتبط به هم به شکل درختی وجود دارد: هر ماتریس جداکننده فقط زمانی قبل فاکتورگیری است که فرزندان آن فاکتورگیری شده باشد.
برای ثبت سفارش ترجمه تخصصی، کلیک کنید
ترسیم این کارها در پردازشگر ساده نیست. اولاً اگر با حافظه مشترک سر و کار داریم میتوانیم از صف دادهها (داده رج یا داده هایی که به نوبت پردازش می شوند) ساده کار استفاده کنیم:
Queue ←{}
برای همه زیردامنههای سطح کف d
d را به Queue اضافه کنید
در حالیکه Queue خالی نیست
اگر پردازشگر بیکار است، در اینصورت
کار قرار گرفته در صف داده را را آن اختصاص دهید
اگر کار پایان یافت و خواهر و بردارش پس از آن پایان یافت
آن را به والدش در صف داده اضافه کنید
مسئله اصلی در اینجا این است که در نقطهای تعداد پردازشگر بیشتر از کار میشود، در نتیجه عدم تعادل بار پیش میآید. این مسئله با این واقعیت تشدید میشود که کارهای آخر مهم ترین کار نیز هستند، زیرا اندازه جدا کنندهها از سطحی به سطح دیگر دو برابر میشود. (به خاطر داشته باشید که کار فاکتورگیری ماتیس متراکم با توان سوم اندازه پیش میرود!) بنابراین برای جدا کنندههای بزرگتر باید از موازیسازی کار به موازیسازی حد متوسط تغییر دهیم، که در آن پردازشگرها در فاکتورگیری بلوک همکاری میکنند.
حالا با حافظه توزیع شده، میتوان مسئله موازیسازی را با صف داده کار ساده انجام داد، زیرا جابجایی مقادیر زیاد داده را دربرمیگیرد. (اما به خاطر داشته باشید که کار توان بالاتری از اندازه ماتریس است، که اینبار به نفع ما عمل میکند، و ارتباط را نسبتاً ارزان میسازد.) بنابراین راه حل استفاده از شکلی از تجزیه دامنه است. در شکل 6.14 میتوانیم چهار پردازشگر داشته باشیم که با بلوک 1,2,3,4 مرتبط هستند. پردازشگر 1 و2 باهم گفتگو میکنند که یکی بلوک 5 را فاکتورگیری کند (و همین طور پردازشگر 3 و 4 و بلوک 6)، یا هر دو اینکار را به صورت زائد انجام میدهند.
6.9.1.4. پیششرط سازی
همانند همه فاکتورگیریها، میتوان متد تشریح تو در تو را با فاکتورگیری ناقص به پیششرط سازی تبدیل کرد. (برای نظریه اصلی درباره فاکتورگیری، رجوع کنید به بخش 5.5.5.1). با این حال، در اینجا فاکتورگیری کاملاً برحسب ماتریسهای بلوکی تنظیم میشود، و تقسیم براساس المان محوری به حل معکوس یا سیستم با ماتریس بلوکی محوری تبدیل میشود. بیش از این به جزیئات نمیپردازیم و برای جزئیات بیشتر میتوانید رجوع کنید به [4, 50, 125].
6.9.2. ثبت و رنگ آمیزی متغیر: مجموعههای غیروابسته
جایشگت دیگر متغیرهای مسئله براساس رنگامیزی گراف است (بخش 20.3). اینجا هدف اصلی حداکثرسازی موازیسازی موجود است.
مثال ساده ای را در نظر بگیرید که در آن A ماتریس سه قطری است. معادله Ax = b به شکل زیر است:
شکل 6.16. ترتیب قرمز – سیاه نقاط روی خط
مشاهده میکنیم که xi مستقیماً به xi-1 و xi+1 وابسته است، اما به xi-2 یا xi+1 وابسته نیست. بنابراین بررسی میکنیم که اگر اندیسها را برای دستهبندی مولفهها به صورت یک درمیان جایگشت کنیم، چا اتفاقی میافتد.
نقاط 1, . . ., n را در نظر میگیرم و آنها را قرمز و سیاه رنگ میکنیم (شکل 6.6)، سپس آنها را جایگشت میکنیم تا ابتدا نقاط قرمز و سپس همه نقاط سیاه را بدست آوریم. ماتریس جایشگتی معادل به شکل زیر خواهد بود:
با این ماتریس جایگشتی A، ماتریس گاوس-Seidel، DA + LA به این شکل خواهد بود:
این چه معنایی برای ما دارد؟ حل سیستم Lx = y را اینگونه میتوان بیان کرد.
برای i = 1, 3, 5, . . .
xi ← yi / aii را حل کنید
برای i = 2, 4, 6, . . .
t = aii – 1xi – 1 + aii + 1 xi + 1 را محاسبه کنید
(xi ← yi / - t) / aii را حل کنید
ظاهراً الگوریتم سه مرحله دارد که هر یک در نصف نقاط دامنه موازی است. این وضعیت در شکل 6.17 نشان داده شده است. از نظر تئوری میتوان تعداد پردازشگر را نصف تعداد نقاط دامنه گرفت، اما در عمل هر پردازشگر یک زیردامنه خواهد داشت. حالا میتوانید در شکل 6.18 ببینید که این امر ارتباطی متوسط را موجب میشود: هر پردازشگر در نهایت دادههای دو نقطه قرمز را به همسایههایش ارسال میکند.
شکل 6.17: راه حل قرمز – سیاه در دامنه تک بعدی
شکل 6.18. حل قرمز-سیاه موازی در دامنه تک بعدی
ترتیب قرمز – سیاه را میتوان برای مسائل دوبعدی نیز بکار برد. حالا ترتیب قرمز – سیاه را برای نقاط (i, j) بکار میبریم که 1 ≤ i, j ≤ n است. در اینجا ابتدا شمارهگذاری متوالی برای نقاط فرد در سطر اول بکار میبریم یعنی، (1, 1), (3, 1), (5, 1), . . .,، سپس نقاط زوج سطر دوم (2, 2), (4, 2), (6, 2), . . .، نقاط فرد در سطح سوم؛ و غیره. بنابراین با شمارهگذاری نصف نقاط در دامنه، با نقاط زوج در سطر اول، نقاط فرد در سطر دوم و غیره ادامه میدهیم. به طوریکه در شکل 6.19 میبینید، حالا نقاط قرمز فقط به نقاط سیاه متصل هستند. از لحاظ تئوری، رنگامیزی (رجوع کنید به ضمیمه 20 برای تعریف این مفهوم) گراف ماتریس با دو رنگ را بدست آوردهاید.
تمرین 6.27. ترتیب قرمز – سیاه را برای BVP دو بعدی بکار برید. ساختار ماتریس حاصل را رسم کنید.
ترتیب قرمز-سیاه مثالی ساده از رنگآمیزی گراف است (گاهی چند رنگی نامیده میشود). در موارد سادهای مثل دامنه مربع واحد که در بخش 4.2.3 بررسی کردیم، یا مدل 3 بعدی آن، تعداد رنگ گراف مجاورت به راحتی تعیین میشود.
تمرین 6.28. دیدید که ترتیب قرمز – سیاه مجهولها همراه با استنسیل (شابلون) ستاره پنج نقطهای معمولی دو زیرمجموعه از متغیرها میدهد که به هم متصل نیستند، یعنی دو رنگ گراف ماتریس را شکل میدهند. اگر گرهها با استنسیل دوم در شکل 4.3 به هم وصل شوند، آیا میتوانید رنگآمیزی را پیدا کنید؟.برای ثبت سفارش ترجمه تخصصی، کلیک کنید
شکل 6.19. ترتیب قرمز – سیاه متغیرها در دامنه دو بعدی
برای تعداد رنگهای لازم برای گراف ماتریس اسپارس محدودیت سادهای وجود دارد: تعداد رنگها d + 1 است که d درجه گراف است. برای اینکه ببینید میتوان گراف را با درجه d با استفاده از d + 1 رنگ، رنگآمیزی کرد، گرهی با درجه d را در نظر بگیرید. مهم نیست همسایههای آن چه رنگی هستند، همیشه رنگ استفاده شده در میان d + 1 رنگ وجود دارد.
تمرین 6.29. ماتریس اسپارس در نظر بگیرید که در آن میتوان گراف را باا d رنگ رنگآمیزی کرد. ماتریس را با شماره گذاری مجهولهای رنگ اول، سپس رنگ دوم و به همین ترتیب، جایگشت کنید. درباره الگوری اسپارسی ماتریس جایگشتی حاصل چه میتوان گفت؟
اگر به دنبال حل مستقیم سیستم خطی هستید، میتوانید فرآیند رنگ آمیزی و جایگشت کردن را در ماتریسی که بعد از حذف یک رنگ باقی میماند، تکرار کنید. در مورد ماتریس سه قطری دیدید که این ماتریس باقیمانده بازهم سه قطری بود، بنابراین روشن است که فرآیند چگونه ادامه پیدا میکند. اینکار دو برابر سازی بازگشتی نامیده میشود. اگر ماتریس سه قطری نباشد بلکه سه قطری بلوکی باشد، این عمل را میتوان روی بلوکها انجام داد.
6.10. تسهیم عملگر
در برخی زمینهها باید محاسبات ضمنی در همه جهات آرایه دو بعدی یا سه بعدی انجام گیرد. برای مثال، در بخش 4.3 دیدید که حل ضمنی معادله گرما منجر به سیستمها تکراری میشود،
بدون اثبات، میگوییم که مسئله وابسته زمان را نیز میتوان با
برای β مناسب حل کرد. این طرح مقادیر یکسان در هر مرحله زمانی محاسبه نخواهد کرد، بلکه به حالت پایا یکسان همگرا میشود. همچنین می توان این طرح را به عنوان پیششرط ساز در مورد BVP بکار برد.
این روش مزایای قابل توجهی دارد، که بیشتر از نظر تعداد عمل است: سیستم اصلی باید با فاکتورگیری از ماتریس حل شود، که موجب پر شدن میشود، یا باید با حل آن به صورت تکراری.
تمرین 6.30. مزایای نسبی این روشها را با توجه به تعداد عمل تحلیل کنید. موردی را در نظر بگیرید که α به t وابسته است و موردی که وابسته نیست. هم چنین سرعت مورد انتظار عملیات مختلف را بررسی کنید.
مزیت دیگر زمانی است که حل موازی (6.3) را در نظر میگیرید. توجه داشته باشید که مجموعه دو بعدی از متغیرهای uij داریم، اما عملگر I + d2u/dx2 فقط uij, uij-1, uij+1 را مرتبط میکند. یعنی هر لینک معادل با مقدار i به صورت مستقل قابل پردازش است. بنابراین هر دو عملگر را میتوان با استفاده از تقسیم تک بعدی در دامنه به صورت موازی حل کرد. از سوی د یگر حل سیستم در (6.2) موازیسازی محدود دارد.
متاسفانه، پیچیدگی جدی وجود دارد: عملگر در جهت x به تقسیم دامنه در آن جهت نیاز دارد، و عملگر در جهت y به تقسیم دامنه در جهت دیگر نیاز دارد. راه حلی که معمولاً انتخاب میشود ترانهادن ماتریس مقدار uij در بین دو حل است، تا تجزیه یک پردازشگر از عهده هر دو برآید. این ترانهش (جابجاسازی) ممکن است میزان زیادی از زمان پردازش را در هر مرحله بگیرد.
تمرین 6.3.1. مزایا و مسائل تجزیه دو بعدی دامنه را با استفاده از شبکه پردازشگر P = p × p بحث کنید. میتوانید راهی برای رفع این مسائل پیشنهاد کنید؟
یکی از راههای افزایش سرعت این محاسبات این است که عمل صریح جایگزین حل ضمنی شود؛ رجوع کنید به بخش 6.11.3.
6.11. موازیسازی و عملیات ضمنی
در بحث IBVPها (بخش 4.1.2.2) دیدید که عملیات ضمنی از لحاظ پایایی عددی میتواند مزایای زیادی داشته باشد. اما علاوه بر آن دیدید که براساس عمل سادهای مثل ضرب بردار – ماتریس، و عملیات مبتنی بر یک یا چند حل سیستم خطی، بین متدها ایجاد تفاوت میکند. مسائل دیگری هم در رابطه با متدهای ضرب با شروع محاسبه به صورت موازی وجود دارد.
تمرین 6.32. A را ماتریس
بگیرید. نشان دهید که ضرب بردار ماتریس y ← Ax و حل x ← A-1y، که با حل سیستم مثلثی ax = y بدست آمد، نه با معکوس کردن A، تعداد عمل برابر دارند.
شکل 6.20. استنسیل تفاوت فاکتور L ماتریس BNP دو بعدی
حالا موازیسازی ضرب y ← Ax را در نظر بگیرید. فرض کنید n پردازشگر داریم، و هر پردازشگر i ردیف iام A را ذخیره میکند. نشان دهید که ضرب Ax را میتوان بدون زمان بیکاری در هیچ یک از پردازشگرها به جز اولی محاسبه کرد.
آیا میتوان همان روش را برای حل سیستم مثلثی Ax = y بکار برد؟ نشان دهید که در اجرای مستقیم هر پردازشگر برای (n – 1) / n زمان محاسبه بیکار است.
حالا برخی روشهای پرداختن به این مولفه ذاتاً ترتیبی را بررسی میکنیم.
6.11.1. جبهه موج
در بالا دیدید که سیستم مثلثی پایین با اندازه N میتواند پیچیدگی زمان ترتیبی N مرحله داشته باشد. در عمل اوضاع تا این اندازه هم بد نیست. الگوریتمهای ضمنی مثل حل سیستم مثلثی ذاتاً ترتیبی هستند، اما ممکن است تعداد مراحل کمتر از حدی باشد که در ابتدا به نظر میرسد.برای ثبت سفارش ترجمه تخصصی، کلیک کنید
تمرین 6.33. دوباره به ماتریس BVP دوبعدی در مربع واحد نگاه کنید که با تفاوتهای مرکزی مجزا شده است. اگر مجهولها را با قطرها مرتب کنیم، ساختار ماتریس را بدست آورید. درباره اندازه بلوکها و ساختار خود بلوکها چه میتوان گفت؟
دوباره به شکل 4.1 نگاه کنید که استنسیل اختلاف BVP دو بعدی را توصیف میکند. تصویر معادل برای فاکتور مثلث پایین در شکل 6.20 است. این شکل ترتیبی بودن فرآیند حل مثلث پایین را توصیف میکند x←L-1y:
xk= yk- lk-1- xk-1lk,k-nxk-n
به عبارت دیگر، مقدار در نقطه k را میتوان در صورتی یافت که همسایههای سمت چپ (یعنی متغیر k – 1) و زیر (متغیر k – n) معلوم باشد.
می توان دید که اگر x1 معلوم باشد، علاوه بر x2، میتوان xn+1 را نیز یافت. در مرحله بعد میتوان x3, xn+2 و x2n+1 را تعیین کرد. با ادامه این فرآیند میتوان x را با جبهههای موج حل کرد: مقادیر x در هر جبهه موج مستقل از هم است، بنابراین میتوان آنها را به صورت موازی در مرحله ترتیبی یکسان حل کرد.
تمرین 6.34. این استدلال را تمام کنید. حداکثر تعداد پردازشگری که می توان بکار بست، چند تاست، و تعداد مراحل ترتیبی چندتاست؟ راندمان حاصل چقدر است؟
در بخش 5.4.3.5 مرتبسازی Cuthill-McKee برای کاهش پر کردن ماتریس را دیدید. می توان این الگوریتم را تعدیل کرد تا جبهههای موج بدست آید:
- یک گره دلخواه انتخاب کنید و "سطح صفر" را فرا بخوانید.
- برای سطح n + 1، نقاط متصل به سطح n را پیدا کنید که خودشان متصل نیستند.
- برای "مرتبسازی معکوس Cuthill –McKee" معروف، شمارهگذاری سطوح را معکوس کنید.
تمرین 6.35. این الگوریتم اصلا درست نیست. مسئله چیست؛ چگونه میتوان آن را اصلاح کرد؟ نشان دهید که ماتریس جایگشتی حاصل دیگر سه قطری نیست، اما ممکن است هنوز ساختار نواری را داشته باشد.
6.11.2. دو برابر سازی بازگشتی
یکی از استراتژیها برای پرداختن به بازگشتی بودن، دو برابر سازی بازگشتی است، که در تمرین 1.4 دیدید. در اینجا این استراتژی را به صورت سیستماتیکتر بررسی میکنیم. ابتدا ماتریس (6.4) را در نظر بگیرید کنید و آن را مقیاسگذاری کنید تا به شکل
باشد که به صورت A = I + B مینویسیم.
تمرین 6.36. حل سیستم (I + B)x = y چه کمکی به Ax = y میکند؟ تعداد عمل حل کردن سیستم به دو روش متفاوت چندتاست؟
کاری که حالا انجام میدهیم شبیه به حذف گاوسی است، به جز اینکه با ردیف اول شروع نمیکنیم، بلکه با ردیف دوم شروع می کنیم. (اگر حذف گاوسی انجام میدادید یا تجزیه LU در ماتریس I + B انجام میدادید، چه اتفاقی می افتاد؟) از ردیف دوم برای حذف b32 استفاده می کنیم:
که به صورت L(2)A = A(2) مینویسیم. هم چنین L(2) y = y(2) را محاسبه میکنیم به طوریکه A(2) x = y(2) همان جواب Ax = y را داشته باشد. حل سیستم تبدیل شده اندکی برای مفید است: بعد از محاسبه x1, x2 و x3 را میتوان به صورت موازی محاسبه کرد.
حالا این فرآیند حذف را با استفاده از ردیف چهارم برای حذف b54، ردیف ششم برای حذف b76، و غیره، تکرار میکنیم. نتیجه نهایی جمع همه ماتریسهای L(i) است:
که به صورت L(I + B) = C می نویسیم، و با حل (I + B)x = y داریم Cx = L-1y.
این نتیجه نهایی به بررسی دقیقتر نیاز دارد.
- اولاً محاسبه y’ = L-1y ساده است. (جزئیات را کار کنید. چه میزان موازیسازی وجود دارد؟)
- حل Cx = y’ هنوز ترتیبی است، اما دیگر n مرحله طول نمیکشد: از روی x1 میتوان x3 را بدست آورد، از روی آن x5 را بدست میآوریم، و همین طور ادامه می یابد. به عبارت دیگر، فقط رابطه ترتیبی بین مولفههای x با شماره فرد وجود دارد.
- مولفههای x با شماره زوج به همدیگر وابسته نیستند، بلکه فقط به مولفههای فرد وابستهاند: x2 از روی x1 بدست میآید، x4 از روی x3 بدست میآید و غیره. وقتی مولفههای فرد محاسبه شد، مسلماً به صورت ترتیبی، این مرحله کاملا موازی است.
میتوان حل ترتیبی مولفههای فرد را اینگونه توصیف کرد:
که در آن c i+1i = - b2n+1,2nb2n,2n-1. به عبارت دیگر، اندازه مسئله ترتیبی در اندازه n را به مسئله ترتیبی در نوع اندازه و مسئله موازی کاهش دادیم که اندازه هر دو n / 2 است. حالا میتوان این فرآیند را به صورت بازگشتی تکرار داد، که مسئله اصلی را به عملیات موازی ترتیبی کاهش میدهد، و هر یک نصف اندازه قبلی است.
فرآیند محاسبه همه جمعهای موازی با دو برابر سازی بازگشتی، عمل پیش-تثبیت موازی نیز نامیده میشود. در اینجا از جمع پیش-تثبیت استفاده میکنیم، اما میتوان برای هر عملگر انجمنی بکار برد. برای ثبت سفارش ترجمه تخصصی، کلیک کنید
6.11.3. تقریب عملیات ضمنی با صریح، بسط سری
به دلایل متعددی گاهی میتوان عملیات ضمنی را، که در بالا دیدید و ممکن است در عمل مشکلساز باشد، با عملیات ضمنی متفاوتی جایگزین کرد که عملاً مفیدتر است.
- بکارگیری متدی صریح برای معادله گرما (بخش 4.3) به جای معادله ضمنی با رعایت محدودیتهای اندازه مرحله در متد صریح درست است.
- ایجاد تغییر و سرهمبندی با پیش شرط ساز (بخش 5.5.7) در متد تکراری مجاز است، زیرا فقط سرعت همگرایی را تحت تاثیر قرار میدهد، نه حلی که متد به آن همگراست. قبلا مثال این نظر کلی را در متد ژاکوبی بلوک دیدید؛ بخش 6.8.3. در ادامه این بخش خواهیم دید که میتوان بازگشتیها (رکورانس) در پیش شرط ساز را، که عملیات ضمنی است، با عملیات صریح جایگزین کرد که مزایای محاسباتی مختلفی فراهم میکند.
- حل سیستم خطی مثال خوبی از عمل ضمنی است و چون در ادامه برای حل دو مسئیه مثلثی بکار میرود، بهتر است راههای یافتن جایگزین محاسباتی برای حل سیستم مثلث پایین بررسی کنیم. اگر U مثلث بالا و منفرد است، D را قطر U میگیریم، و مینویسیم U = D(I – B) که در آن B ماتریس مثلث بالا با قطر صفر است، که ماتریس دقیقاً مثلث بالا نامیده میشود؛ میگویی I – B ماتریس مثلث منفرد بالا است.
تمرین 6.37. A = LU را فاکتورگیری LU بگیرید که در آن L در قطر یک هایی دارد. نشان دهید که چگونه میتوان سیستم Ax = b حل کرد.
حال عمل مورد نظر ما حل سیستم (I – B)x = y است. مشاهده میکنیم که
(I-B)-1=I+B+ B2+ . . . (6.5)
و Bn = 0 است که n اندازه ماتریس است (این را بررسی کنید!)، بنابراین میتوان (I – b)x = y را دقیقاً با رابطه زیر حل کرد:
البته میخواهیم از محاسبه توانهای Bk به صورت صریح اجتناب کنیم، بنابراین مشاهده میکنیم که
الگوریتم حاصل برای ارزیابی k=0n-1Bky قانون هورنر (Horner) نامیده می شود، و میبینید که از محاسبه توانهای ماتریس Bk اجتناب میکند.
تمرین 6.38. فرض کنید I – B دو قطری است. نشان دهید که محاسبات بالا n(n + 1) عمل طول دربرمیگیرد. تعداد عمل محاسبه (I – B)x = y با حل مثلثی چندتاست؟
عمل ضمنی را به عمل صریح تغییر دادیم، اما متاسفانه تعداد عمل آن بالاست. اما در شرایط خاص میتوان مجموع توانهای ماتریس را کوتاه کرد.
تمرین 6.39. A را ماتریس سه قطری
BVP تک بعدی در بخش 4.2.2 بگیرید.
- تعریف ماتریس با قطر غالب را در بخش 5.3.4 به خاطر آورید. آیا این ماتریس با قطر غالب است؟
- نشان د هید که محورها در فاکتورگیری این ماتریس (بدون محورگیری) با بازگشت مطابقت د ارد. راهنمایی: نشان دهید که بعد از n مرحله حذف (n ≥ 0) ماتریس باقیمانده به این شکل خواهد بود،
و رابطه بین dn+1 و dn را پیدا کنید.
- نشان دهید که ترتیب n → dn صعودی است، و مقدار حد را بدست آورید.
- فاکتور L و U را برحسب محورهایdn بنویسید.
- آیا فاکتور L و U غالب قطری هستند؟
تمرین بالا بر این دلالت دارد (توجه داشته باشید که آن را اثبات نکردیم) برای ماتریسهای حاصل از BVPها دریافتیم که Bk↓ 0 از نظر اندازه المان و هنجار. یعنی میتوان تقریب حل (I – B)x = y با مثلا با x= (I +B) y یا x = (I + B + B2)y بدست آرود. انجام اینکار تعداد عمل بیشتری از حل مثلثی مستقیم دارد، اما از نظر محاسباتی حداقل به دو جهت مفید است:
- الگوریتم صریح رفتار خط لوله بهتری دارد.
- الگوریتم ضمنی در موازی مسائلی دارد، که دیدید؛ الگوریتم صریح به راحتی موازیسازی می شود.
البته این ممکن است این تقریب دلالتهای دیگری هم برای پایایی کل الگوریتم عددی داشته باشد.
تمرین 6.40. جنبههای موازی سازی قانون هورنر را توضیح دهید؛ معادله (6.6).
6.12. آپدیتهای شبکه
یکی از نتیجهگیریهای فصل 4 این بود که متدهای صریح برای مسائل وابسته زمان از نظر محاسباتی راحتتر از متدهای ضمنی هستند. برای مثال، معمولا بیشتر ضرب بردار – ماتریس را در برمیگیرند تا حل سیستم، و موازیسازی عملیات صریح کاملا ساده است: هر مقدار نتیجه ضرب بردار – ماتریس را میتوان جداگانه محاسبه کرد. این به این معنی نیست که جنبههای دیگر قابل توجه نیست.
چون ما ماتریسهای اسپارس را بررسی میکنیم، که از استنسیل محاسباتی ریشه میگیرند، دیدگاه اپراتور را اتخاذ میکنیم. در شکل 6.7 و 6.8 دیدید که بکارگیری استنسیل در هر نقطه از دامنه موجب روابط معینی بین پردازشگرهای میشود: برای ارزیابی ضرب بردار – ماتریس y ← Ax در پردازشگر، آن پردازشگر باید مقادیر x منطقه روح خود را بدست آورد. با فرضهای توجیه پذیر درباره تقسیم بندی دامنه برای پردازشگرها، تعداد پیامها کاملا پایین خواهد بود.
تمرین 6.41. توجیه کنید که در FEM یا FDM، تعداد پیامها O(1) با h ↓ 0 است.
در بخش 1.5.1 دیدید که ضرب بردار – ماتریس استفاده مجدد کمی از داده دارد، گرچه مقداری نهفتگی برای محاسبه وجود دارد؛ در بخش 5.4.1.4 گفتیم که مکان ضرب بردار – ماتریس به خاطر طرحهای اندیس کردن که لازمه اسپارس بودن است، بدتر است. یععنی ضرب اسپارس تا حد زیادی الگوریتم وابسته به پهنای باند است.
با نگاهی به یک ضرب میبینیم که کار زیادی نمی توان در اینباره انجام داد. با این حال، غالبا چند تا از اینگونه ضربها را در ردیف انجام میدهیم، برای مثال به صورت مراحل فرآیند وابسته زمان. در اینصورت ممکن است بازآراییهایی در مورد عملیات وجود داشته باشد که نیاز به پهنای باند را کم کند. مثال ساده زیر را در نظر بگیرید،
و فرض کنید که مجموعه {xi(n)}i خیلی بزرگ است و در حافظه نهانی جا نمیگیرد. برای مثال، این مدلی برای طرح صریج گرما در یک بُعد فضاست؛ رجوع کنید به بخش 4.3.1.1. به صورت شماتیک داریم:
در محاسبه معمولی، که ابتدا کل xi(n + 2) را محاسبه میکنیم، مقادیر میانی در سطح n + 1 بعد از اینکه ایجاد شدند از حافطه نهانی خارج میشوند و سپس به عنوان ورودی برای مقادیر سطح n + 2 دوباره به حافظه نهانی بازگردانده میشوند.
با این حال، اگر به جای یک تکرار دو تکرار را محاسبه کنیم، ممکن است مقادیر میانی در حافظه نهانی بمانند. x0(n+2) را در نظر بگیرید: به x0(n+1), x1(n+1) نیاز دارد که آن هم به x0(n), . . ., x2(n) نیاز د ارد.
حالا فرض کنید نتایج میانی مورد نظر ما نیست بلکه فقط تکرار نهایی مد نظر ماست. شگل 6.21 مثالی ساده را نشان میهد. پردزشگر اول 4 نقطه را در سطح n + 2 محاسبه می کند. برای اینکار به 5 نقطه از سطح n + 1 نیاز دارد، و اینها نیز باید از روش 6 نقطه در سطح n محاسبه شوند. می توان دید که پردازشگر باید منطقه روح به عرض دو را باید گردآوری کند، برخلاف عرض یک برای به روزسازی تک مرحلهای معمولی. یکی از نقاطی که توسط پردازشگر اول محاسبه میشود x3(n + 2) است که به x4(n +1) نیاز د ارد. این نقطه برای محاسبه x4(n+2) نیز لازم است، که به پردازشگر دوم تعلق دارد.
سادهترین راه حل این است که اینگونه نقاط در سطح میانی به صورت تکراری (حشوآمیز) محاسبه شود، در محاسبه بلوکهایی که نیاز است، در دو پردازشگر مختلف.
تمرین 6.42. آیا میتوان به مواردی فکر کرد که با بیش از دو پردازشگر به صورت تکراری محاسبه میشوند؟
درباره این طرح محاسبه چند مرحله آپدیت براساس بلوک چند تفسیر میتوان ارائه کرد.
- اول اینکه، همانطور که در بالا گفتیم، انجام اینکار در یک پردازشگر موجب افزایش محلیت میشود: اگر همه نقاط در بلوک رنگی (رجوع کنید به شکل) در حافظه نهانی جای گیرند، استفاده مجدد از نقاط میانی را بدست میاوریم.
- دوم اینکه، اگر این را به عنوان طرحی برای محاسبه حافظه توزیع شده در نظر بگیریم، ترافیک پیام را کاهش می دهد. معمولا برای هر مرحله آپدیت پردازشگرها باید دادههای مرزی خود را مبادله کنند. اگر تکرار زایدکار را قبول کنیم، می تواینم تبادل داده را برای سطوح میانی حذف کنیم. معمولا کاهش ارتباط بر از افزایش کار سنگینی خواهد کرد.
تمرین 6.43. استفاده از این استراتژی را برای محاسبه چند هستهای بحث کنید. در چه مواردی صرفهجویی شده است؟ موانع پتانسیل کدامند؟
6.12.1. تحلیل
در اینجا الگوریتمی را که طرح کردیم تجزیه و تحلیل میکنیم. همانند معادله (6.7) محدود به مجموعه تک بعدی از نقاط و تابعی از سه نقطه خواهیم بود. پارامترهای مسئله عبارتند از:
- N تعداد نقاطی است که به آپدیت (به رزو) میشود، و M تعداد مراحل آپدیت را نشان میدهد. بنابراین ارزیابی های تابع MN را انجام می دهیم.
- α، β، γ پارامترهای معمول هستند که نهفتگی، زمان انتقال یک نقطه و زمان عمل را توصیف میکنند (در اینجا ارزیابی f گرفته شده است).
- B تعداد مراحلی است که گردهم میآوریم.
هر ارتباط هالهای شامل b نقطه است، و ما این N/b را بارها انجام میدهیم. کاری که انجام میگیرد شامل آپدیتهای محلی MN/p، به اضافه کار تکراری به خاطر هاله است. جمله آخر شامل b2/2 عمل است، که هم در سمت و هم در سمت راست دامنه پردازشگر انجام میگیرد.
با جمع زدن همه این عبارت، هزینه را پیدا میکنیم،
مشاهده میکنیم که سربار αM/b+γM/b غیروابسته به p است،
تمرین 6.44. مقدار مطلوب b را محاسبه کنید و تاکید داشته باشید که فقط به پارامترهای ریاضی α, β, γ وابسته است نه به پارامترهای مسئله.
6.12.2. استراتژی حداقل سازی ارتباط و کار
با اشتراک (همپوشی) محاسبه با ارتباط می توان این الگوریتم را کارآمدتر ساخت. به طوریکه در شکل 6.22 نشان داده شده است، هر پردازشگر با برقراری ارتباط با هاله خود، و همپوشی این ارتباط با قسمت ارتباطی که به صورت محلی امکان پذیر است، شروع می کند. مقادیری که به هاله وابسته هستند در آخر محاسبه می شوند.
شکل 6.22: محاسبه بلوکهای نقاط شبکه در چند تکرار
تمرین 5.45. مشکل بزرگ در سازماندهی کد (با تاکید بر "کد"!) به این شیوه چیست؟
برای ثبت سفارش ترجمه تخصصی، کلیک کنید
اگر تعداد نقاط به ازای هر پردازشگر به اندازه کافی زیاد باشد، میزان ارتباط نسبت به محاسبه پایین است، و میتوانید b را نسبتاً بزرگ بگیرید. با این حال، این آپدیتهای شبکه اغلب در متدهای تکراری مثل متد CG بکار میروند (بخش 5.5.10)، و در این صورت ملاحظات گردکردن مانع از این میشود که b را خیلی بزرگ بگیرید [27].
تمرین 6.46. تحلیل پیچیدگی را برای الگوریتم غیرهمپوشانی با سازماندهی نقاط در شبکه 2 بعدی انجام دهید. فرض کنید هر آپدیت نقطه چهار همسایه را دربرمیگیرد، دو همسایه در هر طرف.
اصلاح بیشتر الگوریتم بالا امکانپذیر است. شکل 6.23 نشان می دهد که میتوان از منطقه هاله استفاده کرد که از نقاط مختلف از مراحل زمانی مختلف استفاده می کند. این الگوریتم (رجوع کنید به [35]) میزان محاسبه تکراری را کاهش می دهد. با این حال، حال مقادیر هاله که در ابتدا منتقل می شوند باید محاسبه شوند، بنابراین تقسیم ارتباط محلی به دو مرحله لازم است.
شکل 6.23: محاسبه بلوکهای نقاط شبکه در چندتکرار
6.13. الگوریتمهای بلوکی در ساختارهای چند هستهای
در بخش 5.3.7 دیدید که الگوریتمهای خطی معینی را میتوان برحسب زیرماتریس طرح کرد. این دیدگاه میتوان برای اجرای موثر عملیات جبر خطی در ساختارهای حافظه مشترک مثل پردازشگرهای چند هستهای مفید باشد.
برای مثال، فاکتورگیری چولسکی (Cholesky) را در نظر بگیرید، که A = LLt را برای ماتریس قطعی مثبت متقارن A محاسبه میکند؛ هم چنین رجوع کنید به 5.3.2. میتوان الگوریتم را به صورت بازگشتی اینگونه توصیف کرد:
و در آن Ã21 = A21:11-t, A11 = L11L11t.
در عمل، پیادهسازی بلوکی برای تقسیم بندی بکار میرود
که در آن k اندیس ردیف بلوک جاری است، و فاکتورگیری برای همه اندیسهای k > پایان مییابد. فاکتورگیری با استفاده از ا سامی Blas برای عملیات به صورت زیر نوشته میشود:
برای k = 1، بلوک n:
کلید عملکرد موازی تقسیمبندی اندیسهای k > است و نوشتن الگوریتم برحسب این بلوکهاست:
حالا الگوریتم سطح دیگری از حلقههای داخلی را میگیرد:
حالا روشن است که الگوریتم به میزان زیادی موازیسازی دارد: تکرارها در هر حلقه-l به صورت جداگانه قابل پردازش است. با این حال، این حلقهها در هر تکرار حلقه بیرونی k کوتاهتر میشوند، بنابراین معلوم نیست که چند پردازشگر را میتوان بکار برد.بعلاوه، لزومی ندار ترتیب عملیات الگوریتم بالا حفظ شود. برای مثال، بعد از
فاکتورگیری L2Lt2 میتواند شروع شود، حتی اگر بقیه k = 1 تکرار هنوز تمام نشده باشد. بنابراین احتمالاً موازیسازی بیشتری از آنچه که میتوان با موازیسازی حلقه داخلی بدست آورد، وجود دارد.
بهترین راه برای موازیسازی در این مورد تغییر دیدگاه از جریان کنترل الگوریتم، که در آن ترتیب عملیات حفظ میشود، به دیدگاه جریان داده است.در این حالت فقط وابستگی داده ها نشان داده می شود، و هر ترتیب عملیات که مطابق با این وابستگیها باشد مجاز است. (معمولا از ترتیب کارهای برنامه صرفنظر میکنیم و ترتیب نسبی را جایگزین آن میکنیم.) بهترین راه نشان دادن جریان داده الگوریتم با ساخت گراف غیرچرخهای جهتدار کارها (Directed Acyclic Graph) (DAG) است (رجوع کنید به بخش 20 برای خلاصهای از گرافها) . اگر کار j از خروجی کار i استفاده کند لبه (i, j) را به گراف اضافه میکنیم.
تمرین 6.47. در بخش 2.6.1.7 مفهوم انسجام ترتیبی را یاد گرفتید: برنامه کد موازی پیچدار باید با اجرای موازی همان نتایج اجرای ترتیبی را دهد. ما فقط گفتیم که الگوریتمهای مبتنی بر DAG آزادند کارها را به هر ترتیبی که با ترتیب نسبی گرههای گراف مطابقت داشته باشد، انجام دهند. بحث کنید که آیا انسجام ترتیبی در این زمینه مسئله است یا نه.
ما در مثال خود DAG را با راس قرار دادن کار برای هر تکرار داخلی ساختیم. شکل 6.24 DAG همه کارهای ماتریس 4 × 4 بلوک را نشان میدهد.
تمرین 6.48. قطر این گراف چیست؟ کارهایی را که در مسیری قرار میگیرند که قطر را تعیین میکند، مشخث کنید. معنی این کارها در زمینه الگوریتم چیست؟ این مسیر مسیر بحرانی نامیده میشسود. طول آن زمان اجرای محاسبه موازی را تعیین می کند حتی اگر تعداد نامتناهی پردازشگر وجود داشته باشد.
تمرین 6.49. فرض کنید T کار وجود دارد که همگی به زمان اجرای واحد نیاز دارد، و فرض کنید p پردازشگر داریم. حداقل زمان تئوری برای اجرای الگوریتم چیست؟ حالا در این فرمول مسیر بحرانی را در نظر بگیرید، طول آن را C بنامید.
در اجرای کارهای DAGف چندین مشاهده وجود دارد.
- اگر قرار است بیش از یک آپدیت در بلوک صورت گیرد، شاید بهتر باشد این آپدیتها با یک فرآیند محاسبه شود. اینکار حفظ انسجام حافظه نهانی را ساده میکند.
- اگر دادهها بکار می رود و سپس تعدیل میشود، باید قبل از شروع تعدیل، استفاده پایان یابد. حتی اگر دو کار در پردازشگرهای متفاوتی صورت گیرد بازهم ممکن است این امر درست باشد، زیرا زیرسیستم حافظه معمولا انسجام حافظه نهانی را حفظ می کند، بنابراین تعدیلها میتواند فرآیند خواندن دادهها تحت تاثیر قرار دهد. این مورد را میتوان با داشتن یک کپی از داده در حافظه اصلی اصلاح کرد، که فرآیند خواندن دادهای را میدهد که ذخیره شده است (رجوع کنید به بخش 1.4.1).