loading...
انجام پروژه متلب

دانلود رایگان کدهای‌ آموزشی متلب جامع خوشه بندی یا Clustering

 

 

دانلود رایگان کدهای‌ آموزشی متلب جامع خوشه بندی یا Clustering


 

 

 

kmeans clustering

Spectral Clustering

Forel clustering

Fast and efficient spectral clustering

Mean Shift Clustering

Adaptive Affinity Propagation clustering

Cluster Reinforcement (CR) phase

k-Means Projective Clustering

Easy clustering of a vector into groups

Clustering by Passing Messages

Matlab Cluster Ensemble Toolbox

K means clustering for Image Compression

High Dimensional Data Clustering (HDDC)

Fast hierarchical clustering method - PHA

Adaptive kmeans Clustering for Color and Gray Image.

Low Energy Adaptive Clustering Hierarchy protocol (LEACH)

Estimating the number of clusters via System Evolution

QT Clustering using Euclidean Distance, Jackknife Correlation

K-medoids

Fuzzy k means

Dp algorithm

Fuzzy C-Means with Focal Point

Fuzzy c-means thresholding

 

دانلود فایل در ادامه مطلب

 

 

استفاده از GPU ها در MATLAB

 

 بر روی لینک های زیر کلیک نمایید

 

بررسی اجمالی

در این پست، ما ابتدا اصول اولیه استفاده از GPU با MATLAB را بیان و سپس به سمت حل معادله موج مرتبه 2 با استفاده از این قابلیت GPU حرکت می کنیم. از آنجا که نسخه ی نمایشی ساخته شده بود، توابع GPU موجود در MATLAB افزایش یافته است.قابلیت GPU نشان داده شده در این پست به جعبه ابزار محاسبات موازی (Parallel Computing Toolbox) احتیاج دارد.

سابقه و هدف GPU

GPU در اصل برای سرعت بخشیدن به اجرای (rendering) گرافیک استفاده می شود، GPU ها در حال حاضر به طور فزاینده در محاسبات علمی به کار روند. بر خلاف پردازنده های (CPUهای) قدیمی، که دارای تعداد انگشت شماری هسته اند، یک GPU تعداد بسایر زیادی آرایه ی موازی از  صحیح و ممیز شناور پردازندهها دارد، همچنین حافظه اختصاص داده شده، با سرعت بالا است. GPU به طور معمول شامل صدها پردازنده از این پردازنده های کوچک است. این پردازنده ها می توانند تا حد زیادی برای افزایش سرعت انواع خاصی از برنامه های کاربردی استفاده شوند.

یک قاعده سرانگشتی مناسب این است که مسئله شما ممکن است برای GPU مناسب باشد، اگر چنین باشد:

Massively parallel: محاسبات می تواند به صدها یا هزاران واحدهای مستقل از هم شکسته شود. شما بهترین کارایی را زمانی خواهید دید که همه هسته ها به کار گرفته شده اند (بهره گیری از خاصیت موازی بودن ذاتی GPU). به ظاهر ساده، محاسبات vectorized MATLAB روی آرایه با صدها هزار عنصر را اغلب می توان در این دسته جا داد.

Computationally intensive (محاسباتی فشرده): زمان صرف شده در محاسبات به طور قابل توجهی بیش از زمان صرف شده در انتقال اطلاعات به (از) حافظه GPU است. از آنجا که پردازنده گرافیکی (GPU) از طریق باس PCI Express به پردازنده میزبان (Host CPU) متصل شده، دسترسی به حافظه کندتر از CPU قدیمی است. این به این معنی است که به طور کلی افزایش سرعت محاسباتی با میزان انتقال داده ها محدود شده است که در الگوریتم شما جای می گیرد.

برنامه های کاربردی که این معیارها را ایفا نمی کنند ممکن است در عمل  بر روی یک GPU نسبت به یک CPU کندتر اجرا شوند.

 

 

 

آنچه ما در مورد GPU یاد می گیریم

با این زمینه، ما اکنون می توانیم کار با GPU در MATLAB را شروع کنیم.اجازه دهید با بررسی GPU مورد نظرمان تنها برای مشاهده آنچه با آن کار می کنیم، شروع کنیم:

gpuDevice

ans =

parallel.gpu.CUDADevice handle

Package: parallel.gpu

Properties:

Name: 'Tesla C2050 / C2070'

Index: 1

ComputeCapability: '2.0'

SupportsDouble: 1

DriverVersion: 4

MaxThreadsPerBlock: 1024

MaxShmemPerBlock: 49152

MaxThreadBlockSize: [1024 1024 64]

MaxGridSize: [65535 65535]

SIMDWidth: 32

TotalMemory: 3.1820e+009

FreeMemory: 2.6005e+009

MultiprocessorCount: 14

ClockRateKHz: 1147000

ComputeMode: 'Default'

GPUOverlapsTransfers: 1

KernelExecutionTimeout: 1

CanMapHostMemory: 1

DeviceSupported: 1

DeviceSelected: 1

ما یک Tesla C2050 را دنبال می کنیم.در حال حاضر، جعبه ابزار محاسبات موازی(Parallel Computing Toolbox) از GPUهای NVDIA با قابلیت محاسبه 1.3 یا بالاتر پشتیبانی می کند.

یک مثال ساده با استفاده از توابع غیرمنتظره (Overloaded Functions)

بیش از 100 نوع عملیات (به عنوان مثال FFT، IFFFT، EIG) در حال حاضر به عنوان توابع ساخته شده در MATLAB در دسترس هستند که می توانند به طور مستقیم بر روی پردازنده گرافیکی (GPU) با ارائه یک آرگومان ورودی از نوع آرایه GPU  اجرا شوند. این توابع فعال GPU یعنی (GPU-enabled functions) غیرمنتظره (overload) هستند، به عبارت دیگر، آنها متمایز از وابستگی به نوع داده آرگومان های داده شده به آنها عمل می کنند.

اجازه دهید یک آرایه GPU ایجاد و با استفاده از GPU یک FFT را اجرا کنیم.با این حال، اجازه دهید ابتدا این کار را بر روی CPU انجام دهیم تا بتوانیم تفاوت در کد و عملکرد را ببینیم:

A1 = rand(3000,3000);

tic;

B1 = fft(A1);

time1 = toc;

برای انجام عملیات مشابه بر روی GPU، ما ابتدا gpuArray را برای انتقال داده ها از فضای کاری MATLAB را به حافظه دستگاه به کار می بریم. سپس می توانیم FFT را اجرا کنیم که یکی از توابع غیرمنتظره روی آن داده است:

A2 = gpuArray(A1);

tic;

B2 = fft(A2);

time2 = toc;

 

مورد دوم بر روی GPU و نه روی CPU اجرا شده است چون ورودی اش (GPUArray) بر روی GPU قرار دارد. در نتیجه، B2، بر روی پردازنده گرافیکی (GPU) ذخیره شده است. با این حال، آن است که هنوز در فضای کاری MATLAB قابل مشاهده است. با اجرای کلاس (B2) ما می توانیم ببینیم که آن نیز یک GPUArray است.

class(B2)

 

ans =

parallel.gpu.GPUArray

 

برای آوردن اطلاعات به CPU، ما gather را اجرا می کنیم

 

B2 = gather(B2);

class(B2)

 

ans =

double

 

B2 در حال حاضر بر روی CPU است و یک کلاس از double دارد.

 

افزایش سرعت کارکرد برای مثال ساده ما

در این مثال ساده، ما می توانیم افزایش سرعت  اجرای FFT بر روی داده های خود را محاسبه کنیم.

speedUp = time1/time2;

disp(speedUp)

3.6122

 

به نظر می رسد مانند FFT ما روی پردازنده گرافیکی تقریبآ 3.5 برابر سریعتر در حال اجرا است  این بسیار خوب است، به ومخصوصآ چون FFT در هسته MATLAB چند رشته (multi-threaded) است. با این حال، برای انجام یک مقایسه واقعی، ما واقعا باید زمان صرف انتقال بردار به (و از) GPU را در نظر بگبریم. اگر ما این کار را انجام دهیم، پی می بریم که شتاب ما تا حد زیادی کاهش می یابد. بیایید ببینیم که اگر ما زمان را برای انجام انتقال داده هایمان در نظر بگیریم، چه اتفاقی می افتد.

 

tic;

A3 = gpuArray(A1);

B3 = fft(A3);

B3 = gather(B3);

time3 = toc;

 

speedUp = time1/time3;

disp(speedUp)

 

0.5676

 

درک و محدود کردن انتقال سرجمع (Overhead) داده های شما

انتقال سرجمع داده (Data transfer overhead) می تواند خیلی مهم باشد چون اجرای کلی برنامه کاربردی را تنزل می دهد، به خصوص اگر شما بارها و بارها بین CPU و GPU برای اجرای تعداد نسبتآ کمی عملیات محاسباتی فشرده تبادل داده کنید. با این حال همه امید از دست نرفته است! با محدود کردن انتقال اطلاعات بین GPU و CPU، ما هنوز هم می توانیم به سرعت کارکرد بالا دست یابیم.

 

به جای ایجاد داده ها در CPU و انتقال آن به GPU، ما می توانیم مستقیمآ بر روی GPU داده را ایجاد کنیم. بیایید ببینید که  اثرات زمان ما چگونه است. برای دقیق بودن، ما همچنین باید کد اصلی سریال از جمله زمان لازم برای تولید ماتریس تصادفی بر روی پردازنده retime کنیم.

 

tic;

A4 = rand(3000,3000);

B4 = fft(A4);

time4 = toc;

 

tic;

A5 = parallel.gpu.GPUArray.rand(3000,3000);

B5 = fft(A5);

B5 = gather(B5);

time5 = toc;

 

speedUp = time4/time5;

disp(speedUp);

 

 

1.4100

 

این بهتر است، اگر چه ما هنوز هم نفوذ جمع آوری داده ها از پردازنده گرافیکی را می ببینیم. در این نسخه ی نمایشی ساده، اثر اغراق آمیز است زیرا ما در حال اجرای عملیات سریع در GPU هستیم. این برای انجام عملیات مختلف بر روی داده ها تا زمانی که بر روی GPU باشد و آوردن اطلاعات CPU تنها زمانی که مورد نیاز است، کار آمدتر است.

 

حل معادله موج

 

در مثال بالا برای قرار دادن متن، اجازه دهید از قابلیت یکسان GPU در "دنیای واقعی" مسئله استفاده کنیم. برای این کار، ما می خواهیم برای حل معادله موج مرتبه دوم:

 

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

تغییر کد برای اجرای الگوریتم بر روی GPU

در هنگام شتاب الگوریتم ما، ما روی بالا بردن سرعت کد در مدت زمان اصلی پله while-loop تمرکز می کنیم. عملیات در  بخشی از کد (به عنوان مثال FFT و ifft، ضرب ماتریس) همگی توابع غیرمنتظریه (overloaded functions)  هستند که با GPU کار می کنند. در نتیجه، ما نیازی به تغییر الگوریتم در هر راه برای اجرا بر روی GPU نداریم. ما به سادگی انتقال داده ها را به GPU و به CPU زمانی که به پایان رسید، می رسیم.

به دلیل طولانی شدن متن، ادامه ی مقاله در پست بعدی درج خواهد شد...

,pareto front,particle swarm optimization,partitioning clustering methods,path planning,pattern mining,pattern recognition,pca,pca غیر خطی,pesa,pesa-ii,pid,pid controller,pid controler in matlab,pid controler in متلب,pid controler in مطلب,point detection,pole assignment,popup menu,portfolio management,portfolio optimization,principal component analysis,project scheduling,property,pso,pso استاندارد پیوسته,pso چند هدفه,pso گسسته باینری,pso traveling salesman problem,pso travelling salesman problem,qap,quadprog,quadratic assignment problem,radial basis function,rbf,rcpsp,reference type,register transfer logic,regression,regular expressions,regularized filtering,reliability,resource allocation,response surface method,rsm,rtl,rule mining,sce-ua,scheduling,scm,self-organizing maps,sfla,sfla استاندارد,shufflee,shuffled frog leaping algorithmm,signal processing

اطلاعات کاربری
  • فراموشی رمز عبور؟
  • آمار سایت
  • کل مطالب : 2400
  • کل نظرات : 284
  • افراد آنلاین : 3
  • تعداد اعضا : 24550
  • آی پی امروز : 62
  • آی پی دیروز : 172
  • بازدید امروز : 312
  • باردید دیروز : 1,190
  • گوگل امروز : 12
  • گوگل دیروز : 35
  • بازدید هفته : 5,245
  • بازدید ماه : 2,207
  • بازدید سال : 116,933
  • بازدید کلی : 5,762,575