Skip to content

Commit b0dcc5a

Browse files
authored
🌐 [translation-sync] [numba.md] numba_ex3: run the solution at the n the exercise asks for (#151)
* Update translation: lectures/numba.md * Update translation: .translate/state/numba.md.yml
1 parent 6548a00 commit b0dcc5a

2 files changed

Lines changed: 40 additions & 14 deletions

File tree

.translate/state/numba.md.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
source-sha: f4c6bc9d1cfb2558ca6b62485527dfc0facc2aee
2-
synced-at: "2026-07-15"
1+
source-sha: 7fce1f21833f64eb8ba853fc0d7a36fce53dc3bd
2+
synced-at: "2026-08-12"
33
model: claude-sonnet-5
44
mode: UPDATE
55
section-count: 5
6-
tool-version: 0.16.1
6+
tool-version: 0.25.0

lectures/numba.md

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -660,15 +660,15 @@ with qe.Timer():
660660
661661
اکنون سعی کنید موازی‌سازی را اضافه کنید و ببینید آیا افزایش سرعت بیشتری به دست می‌آورید.
662662
663-
نباید انتظار افزایش بزرگی در اینجا داشته باشید زیرا، در حالی که وظایف مستقل زیادی وجود دارد (کشیدن نقطه و آزمایش اگر در دایره است)، هر کدام زمان اجرای کمی دارد.
663+
در اینجا وظایف مستقل زیادی وجود دارد (کشیدن یک نقطه و آزمایش اینکه آیا در دایره قرار می‌گیرداما هر کدام زمان اجرای بسیار کمی دارد.
664664
665-
به طور کلی، موازی‌سازی زمانی کمتر موثر است که وظایف فردی که باید موازی شوند نسبت به کل زمان اجرا بسیار کوچک باشند.
665+
به طور کلی، موازی‌سازی زمانی کمتر موثر است که وظایف فردی نسبت به سربارهای توزیع آن‌ها در چندین CPU بسیار کوچک باشند.
666666
667-
این به دلیل سربارهای مرتبط با توزیع همه این وظایف کوچک در چندین CPU است.
667+
راه‌حل این مشکل این است که به هر نخ کار کافی بدهیم تا آن سربارها ارزش پرداخت داشته باشند.
668668
669-
با این وجود، با سخت‌افزار مناسب، امکان به دست آوردن افزایش سرعت غیر بدیهی در این تمرین وجود دارد.
669+
پس، برای اندازه شبیه‌سازی Monte Carlo، از چیزی قابل توجه استفاده کنید، مانند `n = 100_000_000`.
670670
671-
برای اندازه شبیه‌سازی Monte Carlo، از چیزی قابل توجه استفاده کنید، مانند `n = 100_000_000`.
671+
در این مقیاس، و با سخت‌افزار مناسب، باید افزایش قابل توجهی نسبت به نسخه سریال ببینید.
672672
```
673673

674674
```{solution-start} numba_ex3
@@ -692,23 +692,49 @@ def calculate_pi_parallel(u_draws, v_draws):
692692
return area_estimate * 4 # تقسیم بر radius**2
693693
```
694694

695-
حالا بیایید ببینیم چقدر سریع اجرا می‌شود:
695+
موازی‌سازی زمانی سودمند است که هر نخ کار کافی برای غلبه بر هزینه‌های سربار داشته باشد، در حالی که مسئله را به بخش‌هایی تقسیم می‌کند تا کار به طور همزمان اتفاق بیفتد.
696+
697+
بیایید مجموعه جدید و بسیار بزرگ‌تری از نقاط را بکشیم به جای استفاده مجدد از آرایه‌های بالا.
698+
699+
```{note}
700+
دو آرایه زیر حدود 1.6 گیگابایت حافظه اشغال می‌کنند — اگر دستگاه شما حافظه رم کافی ندارد، `n` را کاهش دهید.
701+
```
702+
703+
```{code-cell} ipython3
704+
n = 100_000_000
705+
rng = np.random.default_rng()
706+
u_big = rng.uniform(size=n)
707+
v_big = rng.uniform(size=n)
708+
```
709+
710+
حالا بیایید ببینیم چقدر سریع اجرا می‌شود (فراخوانی دوم زمان اجرا را بدون زمان کامپایل اندازه‌گیری می‌کند):
696711

697712
```{code-cell} ipython3
698713
with qe.Timer():
699-
calculate_pi_parallel(u_draws, v_draws)
714+
calculate_pi_parallel(u_big, v_big)
700715
```
701716

702717
```{code-cell} ipython3
703718
with qe.Timer():
704-
calculate_pi_parallel(u_draws, v_draws)
719+
calculate_pi_parallel(u_big, v_big)
720+
```
721+
722+
برای مقایسه، در اینجا نسخه سریال jit شده از {ref}`speed_ex1` روی همان نقاط است:
723+
724+
```{code-cell} ipython3
725+
with qe.Timer():
726+
calculate_pi(u_big, v_big)
705727
```
706728

707-
با روشن و خاموش کردن موازی‌سازی (انتخاب `True` یا `False` در annotation `@jit`)، می‌توانیم افزایش سرعتی که چندنخی علاوه بر کامپایل JIT فراهم می‌کند را آزمایش کنیم.
729+
با مقایسه دو زمان‌بندی آخر، چندنخی افزایش سرعت قابل توجهی علاوه بر کامپایل JIT فراهم می‌کند.
730+
731+
(اگر به صورت محلی اجرا می‌کنید، نتایج متفاوتی خواهید گرفت که عمدتاً به تعداد CPUها در دستگاه شما بستگی دارد — و در اندازه‌های نمونه کوچک، نسخه موازی می‌تواند حتی کندتر باشد، زیرا سودها نمی‌توانند هزینه توزیع کار میان نخ‌ها را پوشش دهند.)
708732

709-
در ایستگاه کاری ما، می‌بینیم که موازی‌سازی در اینجا افزایش سرعت متوسط اما ارزشمندی فراهم می‌کند.
733+
این دو آرایه بزرگ هستند و کار ما با آن‌ها تمام شده است، پس حافظه را قبل از ادامه دادن آزاد می‌کنیم.
710734

711-
(اگر به صورت محلی اجرا می‌کنید، نتایج متفاوتی خواهید گرفت که عمدتاً به تعداد CPUها در دستگاه شما بستگی دارد.)
735+
```{code-cell} ipython3
736+
del u_big, v_big
737+
```
712738

713739
توجه کنید که ما همه نقاط تصادفی را *قبل از* حلقه کشیدیم و آن‌ها را به صورت آرایه عبور دادیم، بنابراین حلقه موازی فقط از حافظه *می‌خواند*.
714740

0 commit comments

Comments
 (0)