Parallel Algorithms

12
١ ﺑﺴﻢ اﷲ اﻟﺮﺣﻤﻦ اﻟﺮﺣﯿﻢGPU-Sorting ﺳﺮﯾﻊ ﻣﻮازي ﺑﺎ اﺳﺘﻔﺎده از ﯾﮏ اﻟﮕﻮرﯾﺘﻢ ﺗﺮﮐﯿﺒﯽ اﺳﺘﺎد ﻣﺮﺑﻮﻃﻪ: ﺟﻨﺎب آﻗﺎي دﮐﺘﺮ ﻧﻮراﻟﻪ ﮔﺮدآورﻧﺪه: زﻫﺮا رﻓﯿﻊ ﻧﮋاد

Transcript of Parallel Algorithms

Page 1: Parallel Algorithms

١

بسم اهللا الرحمن الرحیم

GPU-Sortingسریع موازي با استفاده از یک الگوریتم ترکیبی

جناب آقاي دکتر نوراله:استاد مربوطه

زهرا رفیع نژاد: گردآورنده

Page 2: Parallel Algorithms

٢

:کیده چاین متد . ارائه می کندGpuاین مقاله یک الگوریتم براي مرتب سازي سریع لیست هاي بزرگ با استفاده از

quick sort بر مبناي Gpuدر ابتدا . در الگوریتم بدست می آوردGpuسرعت باالیی را بوسیله موازي سازي موثر

, bucket sortیم می کند سپس با استفاده از لیست را به تعدادي زیر لیست تقسmerge-sort آن ها را به

است و روي لیست هایی با هشت عنصر و با استفاده )n log n(این الگوریتم از پیچیدگی .شکل موازي مرتب می کند

با پیچیدگی یکسانbitonic برابر سریعتر از الگوریتم هاي مرتب سازي Geforce 8800GTS – 512، 5/2از

n(همچنین شش برابر سریعتر از .کار می کند quick sort درصد سریعتر از آخرین 10 و Gpu بر مبناي

radix sortکار می کند .

GPUموازي سازي، مرتب سازي، الگوریتم هاي : کلمات کلیدي

:مقدمه. 1

ازي مشهور با یک الگوریتم مرتب س merge sort.مرتب سازي یک مشکل اساسی در علوم کامپیوتر است

از Gpuالگوریتم هاي مرتب سازي .پیاده سازي شود Gpu است و می تواند به راحتی روي O(n logn)پیچیدگی

برابر سریعتر از 4با مقادیر هشت بیتی تقریباً bitonicنظر پهناي باند بسیار محدود هستند براي مثال مرتب سازي

برداري طراحی شده است که merge sortعت خواندن از حافظه ،یکبراي بهبود سر. بیتی اجرا می شود 32مقادیر

بیتی شناور همزمان کار می کند که نتایج نشان می دهد 32 تا 4روي log n و گذرهاي CUDAبا استفاده از

. روي یک بیت شناور بهبود می بخشدmerge برابر در مقایسه با مرتب سازي 4تقریباً سرعت را

Merge sort ورودي شناور 8اري با استفاده از طراحی متداول الگوریتم موازي با مقایسه و جا به جایی روي برد

. بدست می آیدCUDAروي هسته

تعداد پردازنده هایی pاست و m=log2pگذر بسیار ناکارآمد می شود که در آن mاگرچه الگوریتم بعد از

عداد لیست هاي باقی مانده از دو برابر تعداد پردازنده ها کمتر و دلیل این امر این است که وقتی ت. است GPUروي

bucket sortموازي بر اساس GPU که در این جا مشکل را بوسیله استفاده از . است موازي سازي از بین می رود

Page 3: Parallel Algorithms

٣

تقسیم می شود و به شکل 2p ،bucketحل شده است به گونه ایی که لیست ورودي به بیستر از quick sortیا

. مرتب می شود merge sort با استفاده از bucketوازي محتواي هر م

Bucket sort موازي که در CUDA پیاده سازي شده است از مکانیزم همزمانی استفاده می کند مانند افزایش

اجازه اجراهاي فاقد عملیات هایی quick sortدر عوض . هاي مدرن موجود است GPUتجزیه ناپذیري که در

.اما به طور کلی کمی کندتر است. ه پذیر را روي سخت افزار می دهدتجزی

. برابر می رسد8/1 در عمل ثابت شده است این الگوریتم اگر از کارت هاي گرافیک دو تایی استفاده کند به سرعت

2.GPU :

نیز vpuیا که به آن واحد پردازش بصري ) graphics processing unit ) GPU واحد پردازش گرافیک یا

بعدي منتقل شده از ریز پردازنده را به راحتی اجرا می کند و در 3یک پردازنده ویژه است که گرافیک گفته می شود

ها مدرن در تطبیق با گرافیک هاي کامپیوتري بسیار GPU .موبایل ها ، کامپیوتر هاي شخصی و غیره کاربردي دارد

در . ها سبب می شود که در الگوریتم هاي پیچیده بسیار کا رآمد باشدکارآمد تر هستند و ساختار موازي عالی آن

. یا مادربورد قرار گیردvideo می تواند روي کارت GPUکامپیوتر هاي شخصی یک

3.CUDA:

CUDA)compute unified device architecture ( یک ساختار موازي سازي است که بواسطه

NVIDIA توسعه داده شده استCUDA یک موتور محاسباتی در واحد پردازش گرافیکی CUDA یاGPU ها

.است که در توسعه نرم افزار از طریق زبان هاي برنامه نویسی استاندارد قابل دستیابی است

به بعد G8Xها از سري NVIDIA CUDA با همه CUDAهستند CUDAاخرین درایو ها شامل اجزاي

به توسعه دهندگان امکان دستیابی به مجموعه CUDA. است tesla,Quadro,Geforceکار می کند که شامل

ها مانندNVIDIA CUDA آخرین GPU CUDAدستور محلی و حافظه عناصر محاسبات موازي در

CPUهر چند که بر خالف . معماري باز شده اند هاCPU ،هاGPU ها داراي ساختار چند هسته اي موازي هستند .

اگر کاربردي با این ساختار معماري منطبق باشد. را به شکل همزمان دارد treadی اجراي هزاران که هر هسته توانای

GPUمی تواند کارایی بسیاري را براي آن به همراه داشته باشد .

Page 4: Parallel Algorithms

۴

: ها به وجود آورده است که شامل GPUمزایاي بسیاري را روي CUDA عالوه بر اهداف کلی گذشته

. هم می توانند از یک آدرس اختیاري در حافظه خوانده شوندکد هاي خواندنی جدا از )1

2( CUDA کیلو بایت می تواند بین 16 یک حافظه اشتراکی سریع ایی را پو شش می دهد ناحیه اي به اندازه

treadبه اشتراك گذاشته شود .

. را فراهم می کندGPUو ارسال سریع به GPUدانلود سریع )3

. به عمل می آوردbitwise,integer ي پشتیبانی کاملی از عملیات ها )4

: نگاه کلی بر الگوریتم.4

تا L2در هر گذر .کار می کند four-floatمتداول است که روي بردارهاي merge sortهسته الگوریتم شامل

ا یک رشته در هر کدام از زوج لیست ها وجود دارد که آن ه. لیست مرتب ادغام می کند Lلیست مرتب شده را در

وقتی گذرها آنقدر اجرا .از جریان ورودي وجود دارد float 4-vectorدر ابتدا یک لیست براي هر .را ادغام می کند

کمتر باشند موازي سازي از بین می GPU برابر جریان پردازنده ها روي 2 برسند به گونه اي که از Lشوند تا به

،جریان ورودي را quick sort یاbucket sortی در ابتدا براي حفظ کارای .رود و کارایی به شدت کاهش می یابد

L+1به تعدادي لیست که دو برابر پردازنده هاي جریان است تقسیم می کند به گونه ایی که تعداد عناصر لیست

به vector-merge sortسپس .همچنین طول لیست ها باید تقریباً مساوي باشد . استLبیشتر از عناصر لیست

یک هیستوگرام براي انتخاب عنصر لوال مناسب براي .ي روي هر کدام از لیست هاي نامرتب اجرا می شودشکل مواز

bucket sortالبته این کار . محاسبه شده است که احتمال ایجاد لیست هایی با طول مساوي را افزایش می دهد

این هیستوگرام می تواند به . می بخشدبراي درستی اجرا الزم نیست اما موازي سازي و در نتیجه آن سرعت را بهبود

.شکل بازگشتی تصحیح شود تا بدست آوردن عنصر لوال درست را براي همیشه تضمین کند

.در این جا گام هاي الگوریتم بیان می شود

زیر لیست با استفاده از Lپارتیشن بندي به .1

Quick sort .a که از پیچیدگی O(Nlog(L))، است یا

Page 5: Parallel Algorithms

۵

.b bucket sort. عناصر لوال لیست ورودي از سایزN را بهL زیر لیست مستقل پارتیشن می کنند که

که این عمل شامل ایجاد عنصر لوال بوسیله محاسبه از روي . این کار صورت می گیردO (n)در زمان

دازه نقطه که توزیع ورودي را به قسمت هایی با انL-1هیستوگرام توزیع ورودي و استفاده از آن دریافتن

،عناصر را در دسته هایشان جابه جا می کند این گذر bucket sortسپس .مساوي تقسیم کند می باشد

. استO (N) نیز از پیچیدگی

float-4عناصر در بردارهاي . زیر لیست انجام می شود L به شکل موازي روي vector-merge sortگام . 2

هر جفت متوالی Vector-merge sortسپس .ونی مرتب می کنددسته بندي می شوند و یک هسته هر بردار را در

در هر گذر این آرایه ها دو به دو ادغام می شوند ،این .از بردارها را در یک آرایه مرتب شده از دو بردار ادغام می کند

vector mergeپیچیدگی مرحله . بار تکرار می شوند تا زمانی که همه زیر لیست ها مرتب شودL(Log(گذرها

sort از مرتبه، O(N log (L)) [1]. است

۵.Vector –merge sort:

و بصورت بازگشتی دو . کالسیک این بود که لیست را به دو قسمت مساوي تقسیم می کردMerge sortایده

یک لیست از پایین به باال می Mergeمرتب سازي .قسمت را مرتب می کرد و سپس آن ها را با هم ادغام می کرد

بنابراین براي پیاده سازي روي . انجام شود P عملیات ادغام موازي در هر گذر تا گذر با (Log n)اند در تو

. مناسب استGPUساختار موازي بزرگ نظیر

.این الگوریتم مزایاي آشکاري را روي پردازنده برداري دارد چون از موازي سازي برداري استفاده می کند

:ه برداريپردازند. 5-1 است که در آن مجموعه دستو العمل شامل عملیات هایی CPUپردازنده برداري یا پردازشگر آرایه یک طراحی

امروز طراحی بیشتر. است که می تواند عملیات هاي ریاضی را روي چندین عنصر داده به شکل همزمان اجرا کنند

CPUرداري روي چندین مجموعه داده است که از انواع مشهور آن ها به صورت دستور العمل براي تعدادي پردازنده ب

بصورت چندین دستورالعمل براي تعدادي پردازنده برداري CPU سایر طراحی هاي. اشاره کرد SIMD می توان به

. اشاره کردMIMDروي چندین مجموعه داده است که از انواع مشهور آن می توان به

Page 6: Parallel Algorithms

۶

CPUبراي نمونه بسیاري از. ي یک یا دو بخش از داده در هر زمان کار کنند ها می تواند روCPU در حالت کلی

بگذارد در حالت کلی به ندرت داده به شکل C اضافه بکند و در B را به Aها این دستور را دارندکه باید خیلی سریع

می شود که صریح ارسال می شود و به جاي آن آدرس بخشی از حافظه که داده را نگهداري می کند ارسال

رمزگشایی آدرس و بدست آوردن داده از حافظه زمانی را صرف می کند که این تاخیر بزرگترین مشکل را در

. ایجاد می کندCPUکارایی

شناخته می شود استفاده می Pipelinها مدرن تر از یک تکنیک که به نام CPUبه منظور کاهش زمان تاخیر،

اولین واحد آدرس را می خواند و آن را . از چند واحد بصورت چرخشی عبور می کنندکنند که در آن دستو العمل ها

رمز گشایی می کند ، دومین واحد مقادیر را از آدرس هاي مربوطه دریافت می کتد و بعدي عملیات خودش را انجام

.می هد

کنندداده Pipelinقط دستورات را پردازنده هاي برداري نیز از این مفهوم استفاده می کنند ولی به جاي اینکه ف

اضافه کن بلکه گفته می شود همه اعداد از این Bرا به Aدر این جا نمی گوییم . می کنند Pipelinهایشان را نیز

در این جا به جاي اینکه دائما دستورات را رمز . جا تا به این جا را به همه اعداد از این جا تا به این جا اضافه کن

داده مورد نیاز را دریافت کند تا کار را کامل کند یک دستور را از حافظه می خواند و می داند که گشایی کند و

.آدرس بعدي یکی بزرگتر از قبلی است

:الگوریتم .5-2 از آرایه ورودي کامل را مرتب می float-4اولین مرحله از الگوریتم این است که به شکل درونی همه بردارهاي

کار می تواند خیلی سریع با یک هسته کوچک انجام شود که در آن عناصر در سه عملیات برداري با کند که این

در این جا بطور خالصه مؤلفه هاي برداري را توضیح می دهیم . مرتب می شوندbitonicاستفاده از مرتب سازي

در . تیب معکوس به کار می گیرد را به ترb مقادیر بردار a به این معناست که بردار a.xyzw=b.wzyxبراي مثال

است و خروجی مرتب شده ادغام این دو آرایه است B,Aاین گذرها ،ورودي هر رشته دو بردار مرتب شده آرایه هاي

باید مرتب شده a,bو مؤلفه هاي این دو بردار . بدست می آید B از b بدست می آید و بردارA ،از aیک بردار .

. شامل بیشترین چهارتایی شناور است bترین چهارتایی شناور و شامل کمaباشند بنابراین

Page 7: Parallel Algorithms

٧

که در میان چهار عنصر بزرگترین است باید حداقل چهار عنصر a[n]به سادگی قابل درك است که براي هر عنصر

SortElements(b),Sort Elements(a)به شکل درونی با صدا کردن bو aبردارهاي .کوچکتر از آن باشد

بدست B و A ازbیک بردار جدید . را می گیردaجاي bبردار بعدي در خروجی است و خروجیa .وندمرتب می ش

این فرایند یک بردار مرتب شده را به . کمترین مقدار را دارد b یاaمی آید که بستگی به این دارد که کدامیک

وقتی هر کدام از آرایه هاي ورودي . هر دو خالی شوند B وAخروجی می دهد و این کار تکرار می شود تا زمانی که

.خالی شوند مابقی آرایه دیگر به سادگی به خروجی اضافه می شود

هر رشته روي چند بخش معین از جریان ورودي کار می کند بنابراین شناسه هاي پیش رفتن در هر رشته در هر

رشته . ست که باید ادغام شوندگذر آفست است در جایی که دو لیست متوالی شروع می شوند و تعداد عناصري

خواندن مقادیر ورودي اش را با این آفست در لیست ورودي شروع می کند و نوشتن نتایج را در همان آفست از

.در گذر بعدي لیست ورودي و خروجی جا به جا می شوند.لیست خروجی آغاز می کند

می کند به گونه اي که تعداد زیادي رشته در یک لیست در گذر اول بسیار خوب کارMergeمتد مرتب سازي

زمان هاي اجراي هر گذر نشان داده شده 1در شکل .می توانند تعداد زیادي لیست را به شکل موازي ادغام کنند

است به سادگی می توان دریافت که وقتی رشته هاي موازي بقدر کافی نباشند تا همه ي پردازنده ها را مشغول نگه

در مرحله آخر نتایج مرتب شده نهایی بوسیله یک پردازنده منفرد از چند پردازنده .کند می شود دارند الگوریتم

.منفرد ایجاد می شود

[1]. نشان داده شده است در زیرشبھ كد مربوط بھ ادغام دو آرایھ مرتب 1شکل

Page 8: Parallel Algorithms

٨

: تقسیم جریان ورودي به زیر لیست ها .6 که در بخش قبلی بیان شده نیازمند مفهوم قسمت کردن Merge sortبراي افزایش موازي سازي الگوریتم

به تعدادي زیر لیست هستیم به گونه اي که هر عنصري در زیر لیست ها کوچکتر از عناصر همه Lلیست اصلی

مرتب شود تا یک آرایه Merge sortهر زیر لیست می تواند به صورت مستقل با . باشدL+1عناصر زیر لیست

N باشد که در آن و سایز هر زیر لیست تقریباً L=2 * تعداد پردازند ه ها اگر. مل را ایجاد کندمرتب شده کا

براي . به شکل بهینه از سخت افزار استفاده می کندmerge sortتعداد عناصر در جریان ورودي است ،الگوریتم

را پیاده سازي quick sortی یک بخش جزئی از و بصورت تناوبbucket sortرسیدن به این هدف ،یک مرحله از

سریعتر است اما نیازمند یک افزایش تجزیه ناپذیر است که در هر کارت گرافیکی موجود bucket sort.کرده ایم

.نیست

وال پیشنهاد شده را دریافت می کند و عنصر لL-1در گذر اول لیستی از bucket sortدر این جا الگوریتم

را خاتمه می دهد شمارش می کند و بدین bucket قسمت تقسیم می کند و تعداد عناصري که هر Lلیست را به

. خواهد داشتindex چه تعداد bucket را خاتمه می دهد و آن bucketترتیب ثبت می کند که کدام عنصر آن

بر می گردد و بدین ترتیب اگر عنصر لوال انتخاب شده خوب CPU به bucket لیست نتایج از تعداد عناصر در هر

نباشد یا الزم باشد که تغییر کند تا لیست هاي با تعداد عناصر تقریباً مساوي بدست آید عنصر لوال عوض می شود و

.گذر شمارش تکرار می شود

ود که در آن عناصر به سادگی به موقعیت هاي وقتی اندازه زیر لیست بقدر کافی مساوي باشد گذر دوم اجرا می ش

.جدید شان منتقل می شوند

:الگوریتم .1- 6-1اگر چیزي . بطور کلی توزیع عناصر ورودي ،محدوده آنها یا برآورد تقریبی محدوده عناصر مرتب شده مشخص است

ا با یک رفت و برگشت در میان در مورد ماکزیمم یا مینیمم عناصري که مرتب کردیم نمی دانیم ،می توان آنها ر

Page 9: Parallel Algorithms

٩

عناصر لوال ابتدایی با یک درون یابی خطی از روي کمترین مقدار تا بیشترین مقدار انتخاب می .عناصر پیدا کرد

.شوند

براي هر . ،در ابتدا کپی از عناصر لوال به حافظه محلی هر پردازنده ارسال می شودbucketدر شمارش عناصر هر

مناسب براي آن عنصر bucketیک رشته ایجاد می شود و هر رشته یک عنصر را بر می دارد و عنصر لیست ورودي

سپس رشته یک عملیات افزایشی تجزیه ناپذیر را روي .را با یک جستجوي باینري در میان عناصر لوال پیدا می کند

index جدا بر حسب محل انجام می دهد و مقدار قدیمی شمارنده را در یک آرایهbucketشمارنده حافظه آن

هستند که از bucketعناصر ذخیره می کند وقتی همه عناصر پردازش شدند شمارنده ها شامل تعداد عناصر هر

ر آن در زیر لیست استفاده می عناصindexآنها در پیدا کردن آفست بافر خروجی براي هر زیر لیست و ذخیره

.ت در زیر شبه کد مربوطه نشان داده شده اس.شود

ی به شکل یکنواخت توزیع شده در صورت نیاز عناصر لوال را تصحیح می کنیم مگر اینکه لیست ورودي اصل

حدس اولیه درباره عناصر لوال این است که با احتمال کم بتوانند به شکل منصفانه لیست ورودي را تقسیم کنند .باشد

قرار می bucketد این فرض که همه ي عناصري که در یک هر چند با استفاده از نتایج گذر شمارش اولیه و ایجا.

می توانیم به راحتی حدس مان را درباره ي عناصر لوال . توزیع شده اندbucketگیرند بطور یکنواخت در محدوده آن

.که در زیر نشان داده شده است .تصحیح کنیم

ها به bucketاند توزیع بهتري از عناصر را در با این عناصر لوال جدید ،می توbucket sortاجراي دوباره گذر

اگر این عناصر لوال هنوز هم لیست را به شکل منصفانه تقسیم نکنند عناصر لوال می توانند مجدداً .همراه داشته باشد

.هر چند در عمل نشان داده شده است که یکبار اصالح عناصر لوال کافی است. به همان شکل تصحیح شوند

موعه مناسب از عناصر لوال پیدا شدند ،عناصر لیست می توانند به موقعیت هاي جدیدشان که در گذر وقتی که مج

محاسبه می شود بنابراین آن bucketیک جمع پیشوندي روي انداره هاي . شمارش ثبت شده اند منتقل شوند

ثبت شده اش نوشته می index اش بعالوه bucket بدست می آید و هر عنصر در آفست bucketآفست براي هر

Page 10: Parallel Algorithms

١٠

به مینیمم مقدار ذخیره سازي نیازمند bucket sortبا این روش .در زیر شبه کد مربوط نشان داد شده است .شود

.است

از آن جایی که ما کامالً مطمئنیم که حدس اولیه درباره ي عناصر لوال به قدر کافی خوب نیست و از آن جایی که

ون یابی خطی از مینیمم تا ماکزیمم است ؛گذر اول می تواند تقریباً بهینه شده باشد زیرا حدس اولیه واقعاً یک در

یا bucketبنابراین در گذر اول ما . از توزیع را ایجاد می کند histogramآنچه که ما واقعاً انجام می دهیم یک

index مربوط به bucketي باینري براي یافتن را براي عناصر ذخیره نمی کنیم و نیازمند یک جستجوbucket

.ایی براي افزایش نیستیم

: می تواند به صورت زیر بیان شود bucket sort مراحل

ایجاد نمودار

تصحیح عناصر لوال

شمارش عناصر

bucket

جا به جایی عناصر

در یک bucket ایجاد می شود می توان مطمئن شد که هر bucketوقتی در مرحله آخر آفست ها براي هر

offsetمرتب float 4 شروع می شود که در نتیجه آن نیاز به گذر اضافی قبل از merge-sort کردن لیست از

بخش d=2pدر تقسیم لیست همان طور که قبالً توضیح داده شد نیاز است تا لیست به حداقل .بین می رود

وان دریافت وقتی هر رشته یک افزایش تجزیه به سادگی می ت. پردازنده هاي موجود است Pتقسیم شود که در آن

هر چند الگوریتم .این انتخاب منجر به تاخیرهاي زیادي می شود. آدرس اش انجام می دهد ،dناپذیر روي یکی از

Merge-sortضمناً تقسیم لیست به تعداد زیادي . هیچ محدودیتی را روي تعداد زیر لیست ها اعمال نمی کند

می GPUو CPU و ترافیک طوالنی میان Bucket sortي باینري طوالنی براي هر بخش منجر به جستجوها

.پردازنده است 128 و32 زیرلیست براي 1024در نتایج عملی انجام شده مناسب ترین تقسیم لیست به .شود

Page 11: Parallel Algorithms

١١

ت هاي لیس. استbucketمتکی بر افزایش هاي تجزیه ناپذیر سایز هر bucket sortاز آن جایی که موازي سازي

مرتب شده تقریباً می توانند دستیابی هاي پیاپی زیادي را به شمارنده یکسان فراهم کنند که این امر می تواند

به منظور اجتناب از این کند شدن قابل توجه می توان یک گذر . موازي سازي را محدود کند و سرعت را کاهش دهد

این کار در زمان .شده را به شکل تصادفی جا به جا کرد اضافه کرد که در ابتداي شروع الگوریتم عناصر مرتب

O(N) با استفاده از CUDAو دستورات جا به جایی تجزیه ناپذیر انجام می شود .

7.complete algorithm :

که در بخش هاي قبل بیان شد بسیار سریع است تا وقتی که نقطه اي که لیست ها را merge sortالگوریتم

زي سازي باال با براي رسیدن به موا.ادغام می کند طوالنی تر از آن حدي نباشد که بصورت موازي انجام شود

L زیر لیست ایجاد می کنیم به گونه اي که هر عنصر در زیر لیست bucket sort، Lیا quick sortاستفاده از

هر کدام از زیرلیست ها می تواند موازي اجرا شود و نتیجه Merge –sort. باشدL+1کوچکتر از عناصر زیرلیست

.این اجرا یک لیست مرتب شده کامل است

ایی که توضیح داده merge sortالگوریتم . انجام شود merge-sortروي لیست هایی با اندازه هاي دلخواه اگر

بتوانند quick sortو bucket sortشد نیازمند اندازه لیست ورودي است تا چندین چهار عنصري ایجاد کند تا

دازه دلخواه با مرتب کردن آفست هاي لیست هایی با انMerge sort.زیرلیست هایی با هر سایزي ایجاد کنند

بنابراین .زیرلیست و مقدار دهی به عناصري که مورد استفاده قرار نگرفته با مقادیري کمتر از مینیمم قابل حل است

وقتی زیرلیست ها مرتب می شوند اعداد غیر معتبر در ابتداي زیرلیست قرار می گیرند و می توان آن ها را از نتایج

.حذف کرد

انجام شده است به گونه ایی کار می کند که merge – sort که در این مقاله با استفاده از CUDAپیاده سازي

index y، از بالك، index زیرلیست مربوطه را می دهد در صورتی که index xبالك و index x رشته با

صر هر زیر لیست می دهد و در هر حافظه محلی آرایه صحیح تعداد عنا.همدیگر بخشی از زیرلیست را می دهند

رشته این اطمینان را ایجاد می کند که هر رشته روي عناصر خارج از محدوده واقعی زیرلیست حتی اگر وجود داشته

براي اینکه الگوریتم متعادل اجرا شود زیرلیست هاي تولیدي باید سایز یکسان داشته باشند براي باشد کار نمی کند

bucket sortدر استفاده از این هدف histogram [1]. تامین می شود

Page 12: Parallel Algorithms

١٢

:موازي سازي بوسیله استفاده از کارت هاي گرافیک دو تایی .7-1در .ش از یک کارت گرافیک استفاده شوداگر روي مادربرد اسالت ایی وجود داشته باشد این امکان وجود دارد که بی

موازي سازي با . ي گرافیک دوتایی انجام شده است روي کارت هاmerge sort , bucket sortاین جا پیوند

می توان به آسانی histogramاز روي . ایجاد شده روي هر دو کارت گرافیک انجام می شود histogramاجراي

ارزیابی کرد که آیا عنصر لوال عناصر ورودي را به دو مجموعه عنصر با اندازه تقریباً مساوي در هر بخش تقسیم کرده

اولین کارت گرافیک عناصر کوچکتر و مساوي با عنصر لوال و دومین کارت عناصر بزرگتر از عنصر لوال را .یراست یا خ

با این روش موازي سازي با بیشتر از دو کارت گرافیک نیز دست یافتنی است بشرطی که اولین گذر .اداره می کند

histogramبراي مرتب سازي هشت مگابایت عنصر با یک که بطور رایج. با کمترین مقدار اجراي کل برابر باشد

کارت n زمان کل را صرف می کند و این بدین معنی است که براي مرتب سازي موازي با 140ms از 4msکارت

[1]. نیاز است به زمان