2 ماه قبل

4 دیدگاه

Datacenter

سیر تا پیاز پردازش‌ موازی!

آیا تا حالا اخبار هوش مصنوعی رو دنبال کردید و از خودتون پرسیدید چرا هر روز کامپیوترها در محاسبات سریع‌تر و قدرتمندتر می‌شوند؟ امروز می‌خواهیم یکی از مهم‌ترین تکنیک‌های محاسباتی کامپیوترها، یعنی پردازش موازی رو با زبانی ساده بررسی کنیم!

مقدمه‌ای بر پردازش‌های متوالی

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

برای درک بهتر این مفهوم، بیایید به زندگی روزمره نگاه کنیم. آیا شما صبح که از خواب بیدار می‌شوید کارهای روزمره‌تان را یکی یکی برنامه‌ریزی می‌کنید یا همه کارها را همزمان انجام می‌دهید؟ مشخص است که تا مسواک نزنید، صبحانه نمی‌خورید! به همین ترتیب، در دنیای برنامه‌نویسی هم وظایف به صورت متوالی اجرا می‌شوند. اگر یک کار تکمیل نشود، کار بعدی آغاز نمی‌شود.

در دنیای کامپیوتر، همین اصل در پردازش متوالی برقرار است. برای مثال، کدی که در زیر نوشته شده است، روتین روزانه فردی را به نمایش می‌گذارد:

def main():
    print("شروع روتین روزانه شما")
    # قدم اول: از خواب بلند می‌شوید
    wake_up()
    # قدم دوم: حتما صبحانه نوش جان می‌کنید
    eat_breakfast()
    # قدم سوم: خودتون را برای شروع کارتان آماده می‌کنید
    go_to_work()
    print("خسته شدید! وقت استراحته")
    
def wake_up():
    print("از خواب بیدار می‌شوید، کش و قوس می‌آیید و از تخت بلند می‌شوید")
    
def eat_breakfast():
    print("یک صبحانه سالم می‌خورید تا روزتان را شروع کنید")
    
def go_to_work():
    print("به محل کار می‌روید و یک روز پربار را شروع می‌کنید")
    
if __name__ == "__main__":
    main()

سعی کنید منطق کد بالا رو درک کنید. آیا می‌توانید اول صبحانه بخورید بعد بروید سرکار و بعد بیدار شوید؟ غیر ممکن است! البته در غیر این صورت، شاید آدم فضایی باشید؛ اگه هستید، همین الان به ایلان ماسک پیام بدهید. در دنیای واقعی انجام وظایف، به صورت خطی تعریف می‌شوند. شما باید درس بخوانید تا بتوانید نمره‌ خوبی کسب کنید و مثال‌های دیگر.

پردازش موازی: راهی برای افزایش سرعت و صرفه‌جویی در زمان

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

بیاید به مثال‌های واقعی‌مان برگردیم! فرض کنید در یک فرودگاه حضور دارید و قصد عبور از گیت‌های امنیتی را دارید. آیا تمام مسافران را از یک گیت عبور می‌دهند؟ خیر، معمولاً چندین گیت وجود دارد و هر کدام به صورت همزمان کار می‌کنند. پردازش موازی در کامپیوتر نیز به همین شکل است؛ به این معنا که چندین پردازنده همزمان وظایف مختلفی را اجرا می‌کنند.

تعریف پردازش موازی

یک خبر خوب! تقریبا آماده‌ایم تا از دید کامپیوتر پردازش‌های موازی رو آشنا بشیم و بهتر بشناسیم. تقریبا تمام جزئیات مثال‌های بالا با مثال واقعی امروزمان در کامپیوتر جور می‌آید. گیت‌ها در فرودگاه، در کامپیوتر هر کدام یک پروسه(process) هستند و … . برای شروع بیاید یک توضیح علمی از پردازش‌های موازی داشته باشیم!

Parallel processing is a method in computing of running two or more processors, or CPUs, to handle separate parts of an overall task. Breaking up different parts of a task among multiple processors helps reduce the amount of time it takes to run a program. Any system that has more than one CPU can perform parallel processing, as well as multicore processors, which are commonly found on computers today.
پردازش موازی یک روش در رایانش است که در آن دو یا چند پردازنده یا CPU به‌صورت هم‌زمان بخش‌های مختلف یک وظیفه کلی را انجام می‌دهند. تقسیم بخش‌های مختلف یک وظیفه میان چند پردازنده، به کاهش زمان لازم برای اجرای یک برنامه کمک می‌کند. هر سیستمی که بیش از یک CPU داشته باشد می‌تواند پردازش موازی انجام دهد، همچنین پردازنده‌های چند هسته‌ای که امروزه به‌طور معمول در رایانه‌ها یافت می‌شوند، نیز این قابلیت را دارند.

Alexander S. Gillis

در یک CPU می‌تواند چندین پروسه وجود داشته باشد که هر کدام وظایفی را دارند. زمانی که شما یک برنامه پایتون را اجرا می‌کنید، یک پروسه ایجاد کرده‌اید. حتی آن برنامه‌ای که برای اجرای متوالی وظایف مثال زدیم، خود یک پروسه بود.

کاربردهای پردازش موازی

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

CUDA is a parallel computing platform and programming model created by NVIDIA. With more than 20 million downloads to date, CUDA helps developers speed up their applications by harnessing the power of GPU accelerators. 
CUDA یک پلتفرم محاسبات موازی و مدل برنامه‌نویسی است که توسط NVIDIA ایجاد شده است. با بیش از ۲۰ میلیون بار دانلود تا به امروز، CUDA به توسعه‌دهندگان کمک می‌کند تا با استفاده از قدرت شتاب‌دهنده‌های GPU، برنامه‌های خود را سریع‌تر کنند.

Fred Oh

بیشتر بخوانید: ?What Is CUDA

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

یا بیاید کمی قضیه را جنایی و هکرانه کنیم! شما قصد دارید یک حمله Brute-Force برای یک وای‌فای بزنید تا رمز را به دست آورید. شما لیستی از ۲ میلیون رمز برای پیش‌بینی دارید.

هشدار: تیم کداکسپلور هیچ مسئولیتی در قبال هک شدن وای‌فای همسایه توسط شما را ندارد و این مثال، صرفا جنبه‌ آموزشی دارد!

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

from multiprocessing import Pool

def try_password(password):
    # Test password logic here
    return success

passwords = ['password1', 'password2', 'password3']
with Pool() as pool:
    results = pool.map(try_password, passwords)

صحبت آخر

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

آیا پردازش موازی در برنامه‌نویسی برای شما هم جذاب است؟ آیا تجربه‌ای در این زمینه دارید یا هنوز سوالاتی ذهن‌تان را درگیر کرده؟ از کاربردهای واقعی پردازش موازی چه چیزهایی می‌دانید که برایتان جالب بوده است؟ خوشحال می‌شویم نظرات، تجربیات یا سوالات خود را در قسمت کامنت‌ها با ما به اشتراک بگذارید! هر دیدگاهی می‌تواند به غنی‌تر شدن بحث و یادگیری بیشتر کمک کند. منتظریم تا از شما بشنویم!

4 پاسخ

  1. اینکه موضوعات خارج از برنامه نویسی هم می زارین ولی آخرسر به برنامه نویسی هم ختم میشه عالیه
    بازم بزارید

    1. سلام!
      ممنونم از کامنتتون. این طور موضوعات مستقیم در علوم کامپیوتر جای داره و دور از برنامه نویسی هم نیست.
      حتما بازم قرار میدیم

  2. بسیار توضیحات مفیدی درباره پردازش های موازی و کاربرد اونها داده شده.
    تشکر از زمان و انرژی که میزارید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پیشنهاد های کد اکسپلور