From 0861ee36b5600fa59b40ccfe7118d745bb05f86a Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Mon, 13 Apr 2026 21:36:37 +1000 Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=8C=90=20[translation-sync]=20Improve?= =?UTF-8?q?=20clarity=20and=20fix=20typos=20in=20need=5Ffor=5Fspeed=20lect?= =?UTF-8?q?ure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Syncs translation of lectures/need_for_speed.md with upstream source PR #523. Changes include: - Restructure 'Pure Python is slow' → 'Why is Pure Python Slow?' with new subsections - Rewrite 'Why do we need them?' section (two reasons: Python is small, Python is slow) - Add three acceleration strategies (vectorization, JIT, parallelization) - Restructure parallelization section (multithreading before multiprocessing) - Rewrite multiprocessing/multithreading definitions correctly - Consolidate GPU/TPU sections into simpler structure - Remove redundant subsections and blank lines - Various wording improvements throughout Source: QuantEcon/lecture-python-programming#523 --- .translate/state/need_for_speed.md.yml | 4 +- lectures/need_for_speed.md | 231 ++++++++++--------------- 2 files changed, 90 insertions(+), 145 deletions(-) diff --git a/.translate/state/need_for_speed.md.yml b/.translate/state/need_for_speed.md.yml index c9970c5..8cd13c4 100644 --- a/.translate/state/need_for_speed.md.yml +++ b/.translate/state/need_for_speed.md.yml @@ -1,5 +1,5 @@ -source-sha: 21f1ea0669031ccc0ee0194878439a87de5d248d -synced-at: "2026-04-10" +source-sha: c0a74f003dd77fc52558b7b402b0f058b6b31bf7 +synced-at: "2026-04-12" model: claude-sonnet-4-6 mode: UPDATE section-count: 5 diff --git a/lectures/need_for_speed.md b/lectures/need_for_speed.md index 320aaa3..c786edb 100644 --- a/lectures/need_for_speed.md +++ b/lectures/need_for_speed.md @@ -14,31 +14,25 @@ translation: Major Scientific Libraries: کتابخانه‌های علمی اصلی Major Scientific Libraries::Why do we need them?: چرا به آنها نیاز داریم؟ Major Scientific Libraries::Python's Scientific Ecosystem: اکوسیستم علمی پایتون - Pure Python is slow: پایتون خالص کند است - Pure Python is slow::High vs low level code: کد سطح بالا در مقابل سطح پایین - Pure Python is slow::Where are the bottlenecks?: گلوگاه‌ها کجا هستند؟ - Pure Python is slow::Where are the bottlenecks?::Dynamic typing: تایپ کردن پویا - Pure Python is slow::Where are the bottlenecks?::Static types: انواع ایستا - Pure Python is slow::Data Access: دسترسی به داده - Pure Python is slow::Data Access::Summing with Compiled Code: جمع کردن با کد کامپایل شده - Pure Python is slow::Data Access::Summing in Pure Python: جمع کردن در پایتون خالص - Pure Python is slow::Summary: خلاصه + Why is Pure Python Slow?: چرا Python خالص کند است؟ + Why is Pure Python Slow?::Type Checking: بررسی نوع + Why is Pure Python Slow?::Type Checking::Dynamic typing: تایپ‌گذاری پویا + Why is Pure Python Slow?::Type Checking::Static types: انواع ایستا + Why is Pure Python Slow?::Data Access: دسترسی به داده + Why is Pure Python Slow?::Data Access::Summing with Compiled Code: جمع‌زدن با کد کامپایل‌شده + Why is Pure Python Slow?::Data Access::Summing in Pure Python: جمع‌زدن در Python خالص + Why is Pure Python Slow?::Summary: خلاصه Accelerating Python: تسریع پایتون Accelerating Python::Vectorization: برداری‌سازی - Accelerating Python::Vectorization vs for pure Python loops: برداری‌سازی در مقابل حلقه‌های پایتون خالص + Accelerating Python::Vectorization vs pure Python loops: برداری‌سازی در مقابل حلقه‌های پایتون خالص Accelerating Python::JIT compilers: کامپایلرهای JIT Parallelization: موازی‌سازی Parallelization::Parallelization on CPUs: موازی‌سازی بر روی CPUها - Parallelization::Parallelization on CPUs::Multiprocessing: چندپردازشی Parallelization::Parallelization on CPUs::Multithreading: چندرشته‌ای - Parallelization::Parallelization on CPUs::Advantages and Disadvantages: مزایا و معایب + Parallelization::Parallelization on CPUs::Multiprocessing: چندپردازشی + Parallelization::Parallelization on CPUs::Which Should We Use?: کدام را باید استفاده کنیم؟ Parallelization::Hardware Accelerators: شتاب‌دهنده‌های سخت‌افزاری - Parallelization::Hardware Accelerators::GPUs and TPUs: GPUها و TPUها - Parallelization::Hardware Accelerators::Why TPUs/GPUs Matter: چرا TPU/GPU مهم هستند - Parallelization::Single GPUs vs GPU Servers: GPUهای تکی در مقابل سرورهای GPU - Parallelization::Single GPUs vs GPU Servers::Single GPU Systems: سیستم‌های GPU تکی - Parallelization::Single GPUs vs GPU Servers::Multi-GPU Servers: سرورهای چند GPU - Parallelization::Summary: خلاصه + Parallelization::Accessing GPU Resources: دسترسی به منابع GPU --- (speed)= @@ -59,7 +53,7 @@ translation: ## مرور کلی -پایتون محبوب‌ترین زبان برای بسیاری از جنبه‌های محاسبات علمی است. +احتمالاً می‌توان با اطمینان گفت که پایتون محبوب‌ترین زبان برای محاسبات علمی است. این به دلیل موارد زیر است: @@ -111,7 +105,7 @@ import random **پایتون کوچک است** -هسته پایتون به طور عمدی کوچک طراحی شده است -- این به بهینه‌سازی، دسترسی‌پذیری و نگهداری کمک می‌کند. +هسته پایتون به طور طراحی کوچک است -- این به بهینه‌سازی، دسترسی‌پذیری و نگهداری کمک می‌کند. کتابخانه‌های علمی روال‌هایی را فراهم می‌کنند که نمی‌خواهیم -- و احتمالاً نباید -- خودمان بنویسیم. @@ -123,11 +117,11 @@ import random کتابخانه‌های علمی اجرا را با استفاده از سه استراتژی اصلی تسریع می‌کنند: -1. برداری‌سازی: فراهم کردن کد ماشین کامپایل‌شده و رابط‌هایی که این کد را قابل دسترس می‌کنند -1. کامپایل JIT: کامپایلرهایی که دستورات شبیه پایتون را در زمان اجرا به کد ماشین سریع تبدیل می‌کنند -2. موازی‌سازی: توزیع وظایف در چندین thread / CPU / GPU / TPU +1. برداری‌سازی: ارائه کد ماشین کامپایل‌شده و رابط‌هایی که این کد را قابل دسترس می‌کنند +1. کامپایل JIT: کامپایلرهایی که دستورات شبیه پایتون را به کد ماشین سریع در زمان اجرا تبدیل می‌کنند +2. موازی‌سازی: توزیع وظایف در چندین رشته / CPU / GPU / TPU -ما این ایده‌ها را در ادامه به تفصیل بحث خواهیم کرد. +ما این ایده‌ها را به طور عمیق در ادامه بحث خواهیم کرد. ### اکوسیستم علمی پایتون @@ -149,80 +143,64 @@ import random * Pandas انواع و توابعی را برای دستکاری داده‌ها فراهم می‌کند. * Numba یک کامپایلر just-in-time فراهم می‌کند که با NumPy به خوبی کار می‌کند و به تسریع کد پایتون کمک می‌کند. -ما همه این کتابخانه‌ها را به تفصیل در این مجموعه درس‌ها مورد بحث قرار خواهیم داد. - -## پایتون خالص کند است - -همانطور که در بالا ذکر شد، یکی از جاذبه‌های اصلی کتابخانه‌های علمی، سرعت اجرای بیشتر است. - -ما بحث خواهیم کرد که چگونه کتابخانه‌های علمی می‌توانند به ما در تسریع کد کمک کنند. +ما همه این کتابخانه‌ها را به طور گسترده در این مجموعه سخنرانی‌ها مورد بحث قرار خواهیم داد. -برای این موضوع، مفید خواهد بود اگر درک کنیم که چه چیزی باعث سرعت اجرای کند می‌شود. +## چرا Python خالص کند است؟ -### کد سطح بالا در مقابل سطح پایین +همان‌طور که در بالا ذکر شد، کد عددی نوشته‌شده در Python خالص نسبتاً کند است. -زبان‌های سطح بالاتر مانند پایتون برای انسان‌ها بهینه شده‌اند. +بیایید بکوشیم بفهمیم چه چیزی موجب سرعت‌های اجرای کند می‌شود. -این بدان معنی است که برنامه‌نویس می‌تواند بسیاری از جزئیات را به محیط زمان اجرا واگذار کند: +### بررسی نوع -* مشخص کردن انواع متغیرها -* تخصیص/آزادسازی حافظه -* و غیره. +یکی از منابع سربار در عملیات Python خالص، بررسی نوع است. -علاوه بر این، پایتون خالص توسط یک [مفسر](https://en.wikipedia.org/wiki/Interpreter_(computing)) اجرا می‌شود که کد را دستور به دستور اجرا می‌کند. +بیایید بکوشیم مسائل را درک کنیم. -این پایتون را انعطاف‌پذیر، تعاملی، آسان برای نوشتن، آسان برای خواندن و نسبتاً آسان برای اشکال‌زدایی می‌کند. - -از طرف دیگر، پیاده‌سازی استاندارد پایتون (به نام CPython) نمی‌تواند با سرعت زبان‌های کامپایل شده مانند C یا Fortran برابری کند. - -### گلوگاه‌ها کجا هستند؟ - -چرا اینطور است؟ - -#### تایپ کردن پویا +#### تایپ‌گذاری پویا ```{index} single: Dynamic Typing ``` -این عملیات پایتون را در نظر بگیرید: +این عملیات Python را در نظر بگیرید ```{code-cell} python3 a, b = 10, 10 a + b ``` -حتی برای این عملیات ساده، مفسر پایتون کار زیادی برای انجام دادن دارد. +حتی برای این عملیات ساده، مفسر Python کار قابل‌توجهی باید انجام دهد. -به عنوان مثال، در دستور `a + b`، مفسر باید بداند کدام عملیات را فراخوانی کند. +برای مثال، در عبارت `a + b`، مفسر باید بداند کدام عملیات را فراخوانی کند. -اگر `a` و `b` رشته باشند، آنگاه `a + b` نیاز به الحاق رشته دارد: +اگر `a` و `b` رشته باشند، آنگاه `a + b` به الحاق رشته‌ها نیاز دارد ```{code-cell} python3 a, b = 'foo', 'bar' a + b ``` -اگر `a` و `b` لیست باشند، آنگاه `a + b` نیاز به الحاق لیست دارد: +اگر `a` و `b` لیست باشند، آنگاه `a + b` به الحاق لیست‌ها نیاز دارد ```{code-cell} python3 a, b = ['foo'], ['bar'] a + b ``` -در نتیجه، هنگام اجرای `a + b`، پایتون ابتدا باید نوع اشیا را بررسی کند و سپس عملیات صحیح را فراخوانی کند. +در نتیجه، هنگام اجرای `a + b`، Python ابتدا باید نوع اشیاء را بررسی کند و سپس عملیات صحیح را فراخوانی کند. -این شامل سربار می‌شود. +این فرایند سربار به همراه دارد. -اگر ما بارها و بارها این عبارت را در یک حلقه تنگ اجرا کنیم، سربار بزرگ می‌شود. +اگر این عبارت را بارها در یک حلقه فشرده اجرا کنیم، سربار بزرگ می‌شود. #### انواع ایستا ```{index} single: Static Types ``` -زبان‌های کامپایل شده از این سربارها با انواع صریح و ایستا اجتناب می‌کنند. +زبان‌های کامپایل‌شده با استفاده از انواع صریح و ایستا از این سربارها اجتناب می‌کنند. -به عنوان مثال، کد C زیر را در نظر بگیرید که اعداد صحیح از 1 تا 10 را جمع می‌کند: +برای مثال، کد C زیر را در نظر بگیرید که اعداد صحیح ۱ تا ۱۰ را جمع می‌کند ```{code-block} c :class: no-execute @@ -242,56 +220,56 @@ int main(void) { متغیرهای `i` و `sum` به صراحت به عنوان اعداد صحیح اعلام شده‌اند. -علاوه بر این، وقتی یک دستور مانند `int i` را می‌دهیم، ما به کامپایلر وعده می‌دهیم که `i` *همیشه* یک عدد صحیح خواهد بود، در طول اجرای برنامه. +علاوه بر این، وقتی عبارتی مانند `int i` می‌نویسیم، به کامپایلر قول می‌دهیم که `i` در طول اجرای برنامه *همواره* یک عدد صحیح خواهد بود. -به این ترتیب، معنای جمع در عبارت `sum + i` کاملاً بدون ابهام است. +بدین ترتیب، معنای جمع در عبارت `sum + i` کاملاً بدون ابهام است. -نیازی به بررسی نوع نیست و بنابراین سربار وجود ندارد. +نیازی به بررسی نوع وجود ندارد و از این رو هیچ سرباری وجود ندارد. ### دسترسی به داده -یکی دیگر از موانع سرعت برای زبان‌های سطح بالا، دسترسی به داده است. +یکی دیگر از عوامل کاهش سرعت در زبان‌های سطح بالا، دسترسی به داده است. -برای توضیح، بیایید مسئله جمع کردن برخی داده‌ها را در نظر بگیریم --- بگویید، مجموعه‌ای از اعداد صحیح. +برای نشان دادن این موضوع، مسئله جمع کردن برخی داده‌ها --- مثلاً مجموعه‌ای از اعداد صحیح --- را در نظر بگیرید. -#### جمع کردن با کد کامپایل شده +#### جمع‌زدن با کد کامپایل‌شده -در C یا Fortran، یک آرایه از اعداد صحیح در یک بلوک پیوسته واحد از حافظه ذخیره می‌شود: +در C یا Fortran، آرایه‌ای از اعداد صحیح در یک بلوک پیوسته از حافظه ذخیره می‌شود -* به عنوان مثال، یک عدد صحیح 64 بیتی در 8 بایت حافظه ذخیره می‌شود. -* یک آرایه از $n$ چنین اعداد صحیحی $8n$ شکاف حافظه *متوالی* اشغال می‌کند. +* برای مثال، یک عدد صحیح ۶۴ بیتی در ۸ بایت از حافظه ذخیره می‌شود. +* آرایه‌ای از $n$ عدد صحیح از این نوع، $8n$ بایت متوالی را اشغال می‌کند. علاوه بر این، نوع داده در زمان کامپایل مشخص است. -از این رو، هر نقطه داده متوالی می‌تواند با جابجایی رو به جلو در فضای حافظه به میزان مشخص و ثابتی دسترسی پیدا کند. +از این رو، می‌توان به هر نقطه داده متوالی با جابه‌جایی به جلو در فضای حافظه به اندازه‌ای معین و ثابت دسترسی یافت. -#### جمع کردن در پایتون خالص +#### جمع‌زدن در Python خالص -پایتون سعی می‌کند این ایده‌ها را تا حدی تکرار کند. +Python تلاش می‌کند تا حدی این ایده‌ها را بازتولید کند. -به عنوان مثال، در پیاده‌سازی استاندارد پایتون (CPython)، عناصر لیست در مکان‌های حافظه قرار می‌گیرند که به نوعی پیوسته هستند. +برای مثال، در پیاده‌سازی استاندارد Python (CPython)، عناصر لیست در مکان‌های حافظه‌ای قرار می‌گیرند که به نوعی پیوسته هستند. -با این حال، این عناصر لیست بیشتر شبیه اشاره‌گرها به داده‌ها هستند تا خود داده‌های واقعی. +با این حال، این عناصر لیست بیشتر شبیه اشاره‌گر به داده هستند تا داده‌های واقعی. -از این رو، هنوز سربار در دسترسی به خود مقادیر داده وجود دارد. +از این رو، دسترسی به مقادیر داده هنوز هم سربار دارد. -چنین سرباری یک مجرم اصلی است وقتی صحبت از اجرای کند می‌شود. +چنین سرباری یکی از عوامل اصلی اجرای کند است. ### خلاصه -آیا بحث بالا به این معنی است که ما باید برای همه چیز به C یا Fortran تغییر مکان دهیم؟ +آیا بحث فوق به این معناست که باید همه چیز را به C یا Fortran تبدیل کنیم؟ پاسخ این است: قطعاً نه! -برای هر برنامه داده شده، خطوط نسبتاً کمی همیشه بحرانی از نظر زمان خواهند بود. +برای هر برنامه‌ای، تعداد نسبتاً کمی از خطوط هرگز از نظر زمانی بحرانی خواهند بود. -از این رو بسیار کارآمدتر است که بیشتر کد خود را در یک زبان با بهره‌وری بالا مانند پایتون بنویسیم. +از این رو بسیار کارآمدتر است که بیشتر کدهای خود را در یک زبان با بهره‌وری بالا مانند Python بنویسیم. -علاوه بر این، حتی برای خطوط کدی که *هستند* بحرانی از نظر زمان، اکنون می‌توانیم با استفاده از کتابخانه‌های علمی پایتون با فایل‌های باینری کامپایل شده از C یا Fortran برابری یا از آنها پیشی بگیریم. +علاوه بر این، حتی برای آن دسته از خطوط کدی که *واقعاً* از نظر زمانی بحرانی هستند، اکنون می‌توانیم با استفاده از کتابخانه‌های علمی Python به عملکرد برنامه‌های باینری کامپایل‌شده از C یا Fortran برسیم یا از آن‌ها پیشی بگیریم. -در این زمینه، ما تأکید می‌کنیم که، در چند سال گذشته، تسریع کد اساساً مترادف با موازی‌سازی شده است. +در این راستا، تأکید می‌کنیم که در چند سال اخیر، شتاب‌بخشی به کد عملاً مترادف با موازی‌سازی شده است. -این کار بهترین است که به کامپایلرهای تخصصی واگذار شود! +این وظیفه بهتر است به کامپایلرهای تخصصی سپرده شود! ## تسریع پایتون @@ -331,8 +309,6 @@ int main(void) { ```{figure} /_static/lecture_specific/need_for_speed/matlab.png ``` -NumPy از مدلی مشابه استفاده می‌کند که از MATLAB الهام گرفته است. - ### برداری‌سازی در مقابل حلقه‌های پایتون خالص بیایید یک مقایسه سریع سرعت را امتحان کنیم تا نشان دهیم چگونه برداری‌سازی می‌تواند کد را تسریع کند. @@ -395,7 +371,7 @@ with qe.Timer(): طراحان تراشه و برنامه‌نویسان کامپیوتر با کندی با جستجوی مسیری متفاوت برای اجرای سریع پاسخ داده‌اند: موازی‌سازی. -این شامل موارد زیر می‌شود: +این امر شامل موارد زیر می‌شود: 1. افزایش تعداد CPUهای تعبیه شده در هر ماشین 1. اتصال شتاب‌دهنده‌های سخت‌افزاری مانند GPUها و TPUها @@ -404,53 +380,46 @@ with qe.Timer(): در زیر ما موازی‌سازی برای محاسبات علمی را با تمرکز بر موارد زیر بحث می‌کنیم: -1. ابزارهای موازی‌سازی در پایتون و +1. ابزارها برای موازی‌سازی در پایتون و 1. چگونه این ابزارها می‌توانند برای مسائل اقتصادی کمی به کار گرفته شوند. ### موازی‌سازی بر روی CPUها بیایید دو نوع اصلی موازی‌سازی مبتنی بر CPU که معمولاً در محاسبات علمی استفاده می‌شود را مرور کنیم و مزایا و معایب آنها را بحث کنیم. -#### چندپردازشی - -چندپردازشی به معنای اجرای همزمان چندین رشته منطقی با استفاده از بیش از یک پردازنده است. - -چندپردازشی می‌تواند روی یک ماشین با CPUهای چندگانه یا روی کلاستری از ماشین‌های متصل شده توسط یک شبکه انجام شود. +#### چندرشته‌ای -با چندپردازشی، *هر فرآیند فضای حافظه خود را دارد*، اگرچه تراشه حافظه فیزیکی ممکن است مشترک باشد. +چندرشته‌ای به معنای اجرای چندین رشته اجرایی در داخل یک فرآیند واحد است. -#### چندرشته‌ای +همه رشته‌ها فضای حافظه یکسانی را به اشتراک می‌گذارند، بنابراین می‌توانند بدون کپی کردن داده‌ها از آرایه‌های یکسان بخوانند و در آنها بنویسند. -چندرشته‌ای شبیه به چندپردازشی است، به جز اینکه، در طول اجرا، همه رشته‌ها *فضای حافظه یکسانی را به اشتراک می‌گذارند*. +به عنوان مثال، وقتی یک عملیات عددی روی یک آرایه بزرگ روی یک لپ‌تاپ مدرن اجرا می‌شود، بار کاری می‌تواند در میان هسته‌های چندگانه CPU ماشین تقسیم شود، با هر هسته که بخشی از آرایه را مدیریت می‌کند. +```{note} پایتون بومی برای پیاده‌سازی چندرشته‌ای به دلیل برخی [ویژگی‌های طراحی قدیمی](https://wiki.python.org/moin/GlobalInterpreterLock) مشکل دارد. - اما این یک محدودیت برای کتابخانه‌های علمی مانند NumPy و Numba نیست. - توابع وارد شده از این کتابخانه‌ها و کد JIT-compiled در محیط‌های اجرای سطح پایین اجرا می‌شوند که محدودیت‌های قدیمی پایتون اعمال نمی‌شود. +``` -#### مزایا و معایب - -چندرشته‌ای سبک‌تر است زیرا بیشتر منابع سیستم و حافظه توسط رشته‌ها به اشتراک گذاشته می‌شوند. +#### چندپردازشی -علاوه بر این، این واقعیت که چندین رشته همه به یک استخر مشترک از حافظه دسترسی دارند برای برنامه‌نویسی عددی بسیار راحت است. +چندپردازشی به معنای اجرای چندین فرآیند مستقل است که هر کدام فضای حافظه جداگانه خود را دارند. -از طرف دیگر، چندپردازشی انعطاف‌پذیرتر است و می‌تواند در کلاسترها توزیع شود. +از آنجا که حافظه مشترک نیست، فرآیندها با انتقال داده بین خود ارتباط برقرار می‌کنند. -برای اکثریت قریب به اتفاق کاری که ما در این سخنرانی‌ها انجام می‌دهیم، چندرشته‌ای کافی خواهد بود. +چندپردازشی می‌تواند روی یک ماشین واحد یا در کلاسترهایی از ماشین‌های متصل شده توسط یک شبکه توزیع شود. -### شتاب‌دهنده‌های سخت‌افزاری +#### کدام را باید استفاده کنیم؟ -در حالی که CPUها با هسته‌های چندگانه برای محاسبات موازی استاندارد شده‌اند، یک تغییر چشمگیرتر با ظهور شتاب‌دهنده‌های سخت‌افزاری تخصصی رخ داده است. +برای کار عددی روی یک ماشین واحد، چندرشته‌ای معمولاً ترجیح داده می‌شود --- سبک است و مدل حافظه مشترک بسیار راحت است. -این شتاب‌دهنده‌ها به طور خاص برای انواع محاسبات بسیار موازی که در محاسبات علمی، یادگیری ماشین و علم داده به وجود می‌آید طراحی شده‌اند. +چندپردازشی زمانی اهمیت پیدا می‌کند که مقیاس‌بندی فراتر از یک ماشین واحد ضروری باشد. -#### GPUها و TPUها +برای اکثریت قریب به اتفاق کاری که ما در این درس‌ها انجام می‌دهیم، چندرشته‌ای کافی خواهد بود. -دو نوع مهم‌ترین شتاب‌دهنده‌های سخت‌افزاری عبارتند از: +### شتاب‌دهنده‌های سخت‌افزاری -* **GPU**ها (واحدهای پردازش گرافیکی) و -* **TPU**ها (واحدهای پردازش تانسور). +منبع چشمگیرتری از موازی‌سازی از شتاب‌دهنده‌های سخت‌افزاری تخصصی، به ویژه **GPU**ها (واحدهای پردازش گرافیکی) به وجود می‌آید. GPUها در ابتدا برای رندرینگ گرافیک طراحی شدند که نیاز به انجام همزمان یک عملیات روی بسیاری از پیکسل‌ها دارد. @@ -458,52 +427,28 @@ GPUها در ابتدا برای رندرینگ گرافیک طراحی شدند :scale: 40 ``` -دانشمندان و مهندسان متوجه شدند که همین معماری --- بسیاری از پردازنده‌های ساده که به صورت موازی کار می‌کنند --- برای وظایف محاسبات علمی ایده‌آل است. - -TPUها یک توسعه اخیرتر هستند که توسط گوگل به طور خاص برای بارهای کاری یادگیری ماشین طراحی شده‌اند. - -مانند GPUها، TPUها در انجام تعداد عظیمی از عملیات ماتریسی به صورت موازی عالی هستند. - -#### چرا TPU/GPU مهم هستند - -دستاوردهای عملکردی از استفاده از شتاب‌دهنده‌های سخت‌افزاری می‌تواند چشمگیر باشد. - -به عنوان مثال، یک GPU مدرن می‌تواند شامل هزاران هسته پردازشی کوچک باشد، در مقایسه با 8-64 هسته معمولاً در CPUها یافت می‌شوند. - -وقتی یک مسئله می‌تواند به عنوان بسیاری از عملیات مستقل بر روی آرایه‌های داده بیان شود، GPUها می‌توانند درجه‌های بزرگی سریعتر از CPUها باشند. - -این امر به ویژه برای محاسبات علمی مرتبط است زیرا بسیاری از الگوریتم‌ها به طور طبیعی بر روی معماری موازی GPUها نگاشت می‌شوند. +این معماری --- هزاران هسته ساده که یک دستورالعمل یکسان را روی نقاط داده مختلف اجرا می‌کنند --- برای محاسبات علمی ایده‌آل است. -### GPUهای تکی در مقابل سرورهای GPU - -دو روش رایج برای دسترسی به منابع GPU وجود دارد: - -#### سیستم‌های GPU تکی +```{note} +یک **هسته** یک واحد پردازشی مستقل در داخل یک تراشه است --- مداری که می‌تواند دستورالعمل‌ها را به تنهایی اجرا کند. یک CPU معمولاً تعداد کمی هسته قدرتمند دارد که هر کدام قادر به مدیریت دنباله‌های پیچیده از عملیات هستند. یک GPU در عوض هزاران هسته کوچک‌تر و ساده‌تر را در خود جای داده است که هر کدام برای انجام عملیات حسابی پایه طراحی شده‌اند. قدرت GPU از داشتن همه این هسته‌ها که به طور همزمان روی قطعات مختلف یک مسئله کار می‌کنند ناشی می‌شود. +``` -بسیاری از ایستگاه‌های کاری و لپ‌تاپ‌ها اکنون با GPUهای قابل استفاده ارائه می‌شوند، یا می‌توانند با آنها مجهز شوند. +وقتی یک محاسبه می‌تواند به عنوان عملیات مستقل بر روی آرایه‌های بزرگ داده بیان شود، GPUها می‌توانند درجه‌های بزرگی سریع‌تر از CPUها باشند. -یک GPU مدرن تکی می‌تواند بسیاری از وظایف محاسبات علمی را به طور چشمگیری تسریع بخشد. +**TPU**ها (واحدهای پردازش تانسور)، که توسط گوگل برای یادگیری ماشین طراحی شده‌اند، از فلسفه مشابهی پیروی می‌کنند و برای عملیات ماتریسی موازی عظیم بهینه‌سازی شده‌اند. -برای محققان فردی و پروژه‌های کوچک، یک GPU تکی اغلب کافی است. +### دسترسی به منابع GPU -کتابخانه‌های مدرن پایتون مانند JAX که به طور گسترده در این مجموعه سخنرانی‌ها مورد بحث قرار می‌گیرند، به طور خودکار GPUهای موجود را با تغییرات حداقلی در کد تشخیص داده و استفاده می‌کنند. +بسیاری از ایستگاه‌های کاری و لپ‌تاپ‌ها اکنون با GPUهای قابل استفاده ارائه می‌شوند و یک GPU مدرن تکی اغلب برای پروژه‌های تحقیقاتی فردی کافی است. -#### سرورهای چند GPU +کتابخانه‌های مدرن پایتون مانند JAX که به طور گسترده در این مجموعه درس‌ها مورد بحث قرار می‌گیرند، به طور خودکار GPUهای موجود را با تغییرات حداقلی در کد تشخیص داده و استفاده می‌کنند. -برای مسائل در مقیاس بزرگتر، سرورهای حاوی GPUهای متعدد (اغلب 4-8 GPU در هر سرور) به طور فزاینده‌ای رایج هستند. +برای مسائل در مقیاس بزرگ‌تر، سرورهای چند GPU (اغلب 4 تا 8 GPU در هر ماشین) به طور فزاینده‌ای رایج هستند. ```{figure} /_static/lecture_specific/need_for_speed/dgx.png :scale: 40 ``` -با نرم‌افزار مناسب، محاسبات می‌توانند در چندین GPU، یا در یک سرور واحد یا در چندین سرور، توزیع شوند. - -این محققان را قادر می‌سازد مسائلی را که بر روی یک GPU یا CPU تکی غیرعملی هستند، مورد بررسی قرار دهند. - -### خلاصه - -محاسبات GPU بسیار در دسترس‌تر می‌شود، به ویژه از داخل پایتون. - -برخی از کتابخانه‌های علمی پایتون، مانند JAX، اکنون شتاب GPU را با تغییرات حداقلی در کد موجود پشتیبانی می‌کنند. +با نرم‌افزار مناسب، محاسبات می‌توانند در چندین GPU توزیع شوند، یا در یک سرور واحد یا در یک کلاستر. -ما محاسبات GPU را با جزئیات بیشتری در سخنرانی‌های بعدی بررسی خواهیم کرد و آن را در طیف وسیعی از کاربردهای اقتصادی به کار خواهیم برد. +ما محاسبات GPU را با جزئیات بیشتری در درس‌های بعدی بررسی خواهیم کرد و آن را در طیف وسیعی از کاربردهای اقتصادی به کار خواهیم برد. From 84cc195522606c2e7c09eaffa8f44267e0c5745b Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Mon, 13 Apr 2026 21:39:48 +1000 Subject: [PATCH 2/3] chore: re-trigger CI after body format fix From 181ce15a1012209696e33cd2bdda55519f201e94 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Mon, 13 Apr 2026 21:44:17 +1000 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20correct=20inverted=20meaning=20in=20?= =?UTF-8?q?translation=20('=D9=87=D8=B1=DA=AF=D8=B2'=20=E2=86=92=20'=D8=AA?= =?UTF-8?q?=D9=86=D9=87=D8=A7')?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The word 'هرگز' (never) inverted the meaning of 'relatively few lines are ever going to be time-critical'. Fixed to 'تنها تعداد نسبتاً کمی از خطوط از نظر زمانی بحرانی هستند' (only relatively few lines are time-critical). --- lectures/need_for_speed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lectures/need_for_speed.md b/lectures/need_for_speed.md index c786edb..79440a2 100644 --- a/lectures/need_for_speed.md +++ b/lectures/need_for_speed.md @@ -261,7 +261,7 @@ Python تلاش می‌کند تا حدی این ایده‌ها را بازتو پاسخ این است: قطعاً نه! -برای هر برنامه‌ای، تعداد نسبتاً کمی از خطوط هرگز از نظر زمانی بحرانی خواهند بود. +برای هر برنامه‌ای، تنها تعداد نسبتاً کمی از خطوط از نظر زمانی بحرانی هستند. از این رو بسیار کارآمدتر است که بیشتر کدهای خود را در یک زبان با بهره‌وری بالا مانند Python بنویسیم.