# Python гүйцэтгэл: унаган NumPy давталт, буцаан дуудлага, хувиргалтын зардал

Published: 2026-10-17

Хяналттай зөвхөн CPU дээрх тоон тест нь CPython давталт, NumPy арифметик, Python буцаан дуудлагын боодол, мөн эмхэтгэсэн Numba давталтаар ижил утгуудыг дамжуулдаг. Бэлэн оролттой NumPy ихээхэн давуу талтай байсан бол Python жагсаалт руу болон буцааж хувиргах нь энэ давуу талыг бараг тэнцүү түвшинд хүргэсэн. Энэ анги нь гүйцэтгэлийн хил хязгаарыг болон програмд хэрэгтэй үр дүнг хэрхэн хэмжихийг тайлбарладаг.

Canonical: https://thedailydiff.dev/mn/video/2026-10-17-python-native-loops/

## Энэ видео юуг хамардаг

- CPython эх кодыг bytecode руу эмхэтгэдэг. Давтагдсан интерпретатор/объектын ажил болон төрөлжсөн унаган тоон давталт нь өөр өөр гүйцэтгэлийн зохицуулалт юм.
- Тоон NumPy арифметик нь эмхэтгэсэн үйлдлүүдэд төрөлжсөн багцуудыг дамжуулж чаддаг; арифметик давталт хэвээр үйлчилж, харагдац нь тасралтгүй биш байршилтай байж болно.
- Хувиргалт болон шаардлагатай гаралтын төлөөллийг хэмжинэ. Энэ гүйцэтгэлд Python жагсаалтыг массив болгон хувиргаж, буцааж хувиргах нь бэлэн массивын том давуу талыг үгүй хийсэн.
- Жижиг ажлын ачаалал нь ердийн Python-ийг илүүд үзэж болно, учир нь тогтмол массив-дуудлагын зардал чухал байдаг. Найман утгатай ойлголт нь энэ хэмжсэн харьцуулалтад ялсан.
- np.vectorize нь дараалсан элементүүдэд Python-ийг дууддаг тав тухтай боодол юм; зөвхөн багцын интерфэйс нь унаган тоон гүйцэтгэлийг тогтоодоггүй.
- Эмхэтгэсэн Python-синтаксисийн давталтууд ч хурдан байж болно. Дуудагчид хамаатай бол хүйтэн эмхэтгэл/тохиргооны зардлыг оруулна.
- Унаган гүйцэтгэл, CPU SIMD, олон урсгал болон GPU ард тал нь тусдаа санаанууд юм. Боломжтой CPU-ийн онцлогууд нь тодорхой гүйцэтгэлд ашигласан заавруудыг дагаж мөрддөггүй.

## Бүлгүүд

- 0:00 Яагаад ижил CPU хурдан дуусгаж чадах вэ?
- 0:52 Python давталт ямар ажлыг давтдаг вэ?
- 1:38 NumPy давталтыг хаана шилжүүлдэг вэ?
- 2:13 Хурдан гэдэг нь GPU эсвэл олон CPU цөм гэсэн үг үү?
- 2:49 Гайхалтай хурдатгал хэзээ алга болдог вэ?
- 3:28 Аль хил хязгаар нь бенчмаркт хамаарах вэ?
- 4:00 Эмхэтгэсэн Python давталт бас хурдан байж чадах уу?
- 4:56 np.vectorize яг юу гүйцэтгэдэг вэ?
- 5:41 Та кодоо юуг өөрчлөх ёстой вэ?

## Орчуулсан бичлэг

Англи хэл дээрх эх хувилбараас орчуулсан. Боломжтой дуу болон хадмал орчуулгыг YouTube хянадаг.

### Яагаад ижил CPU хурдан дуусгаж чадах вэ?

0:00 Та Python-д хурдтай болохын тулд шинэ хэл хэрэгтэй гэж бодож байна. Давталт шилжсэний дараа ижил CPU манай багцыг хурдан ажиллуулсан. Ажил хаашаа алга болсон бэ? Хурдатгал хэзээ алга болдог вэ? Аль товчлол Python-ийг буцааж авчрах вэ? Энэ бол The Daily Diff, доторх зүйлсийг харуулж байна. Энэ товчлолыг анхаарч байгаарай. CPython бол стандартын Python хэрэгжилт юм.

0:17 Энэ нь таны эх кодыг bytecode руу эмхэтгэж, дараа нь эдгээр зааврыг интерпретаторт ажиллуулдаг. NumPy бол тоон номын сан бөгөөд түүний массив нь зарлагдсан өгөгдлийн төрөлтэй утгуудыг агуулдаг. Түүний суурилуулсан арифметик нь бүх багцыг эмхэтгэсэн үйлдлүүдэд дамжуулж чаддаг. Нэг сая хөвөгч цэгийн утгуудыг аваад, тус бүрийг нь квадратчилж, дараа нь анхны утгыг нэмнэ. Хувилбар бүр ижил утгуудыг авч, тохирох хариултуудыг гаргадаг. Утгууд нь тойрог ялгааг уралдаанаас гаргахад хангалттай жижиг.

0:40 Энэ машинд, ойлголт гучин гурван миллисекунд орчим хугацаа зарцуулсан. NumPy нэгээс бага хугацаа зарцуулсан. Хоёулаа CPU дээр ажилласан. Энэ нь энэ ажлын ачаалалд ашигтай нотолгоо, мөн програмчлалын хэлний аймшигтай үхлийн бичиг. Ердийн давталтаас эхэлье.

### Python давталт ямар ажлыг давтдаг вэ?

0:53 Python дараагийн утгыг авч, арифметикийг гүйцэтгэж, хариултыг нэмдэг. Дараа нь үүнийг дахин хийнэ. Үржүүлэлт хямдхан. Дараагийн үржүүлэлтийг зохион байгуулж, түүний эргэн тойрон дахь Python объектуудыг хариулах нь цаг бүрт ажил нэмдэг. Энэ бол туршигдсан функцийн бодит задлал юм. Давталт, үржүүлэлт, нэмэлт нь bytecode заавар болж харагдана. Python хувилбарууд болон интерпретаторууд өөр өөр сонголтууд хийдэг.

1:14 Эдгээр хугацаанууд нь дэлгэцэн дээрх хувилбарт хамаарах бөгөөд энэ нь Python гурван цэг арван юм. Python жагсаалт нь объектуудын лавлагааг хадгалдаг тул өөр өөр төрлийн зүйлс нэг жагсаалтыг хуваалцаж болно. Бидний арифметикийн ажил нь бүхэлдээ тоонуудыг ашигладаг. Энэ нь давтагдах үйлчилгээг хүсч байхдаа ерөнхий зохицуулалтын төлбөрийг төлдөг. Нэг сая удаа ижил кофе захиалж, аяга бүрт шинэ маягт бөглөж байна гэж төсөөл. аялагтун. Кофений машин зүгээр.

1:36 Бичиг цаасны ажил өөрийн карьертай болжээ.

### NumPy давталтыг хаана шилжүүлдэг вэ?

1:38 NumPy гэрээг өөрчилдөг. Энэ массив нь тогтмол хэмжээтэй хөвөгч цэгийн утгуудыг нэг зарлагдсан төрлөөр агуулдаг. Манай массив нь тасралтгүй тул түүний утгууд санах ойд хамт байрладаг. Харагдацууд нь өөр байршилтай байж болно. Арифметикийн үйлдэл нь ямар төрлийн өгөгдөл хүлээн авч байгааг мэддэг. Дуудлага нь багцыг унаган үйлдлийн дамжуулдаг. Давталт нь эмхэтгэсэн код доторх утгуудыг хэвээр үздэг. Энэ нь тэр ажлын туршид төрлийн талаарх мэдлэгийг дахин ашиглаж чадна.

2:00 Python нь ажлыг хүлээлгэн өгч буй хүн хэвээр байна. Itamar Turner Trauring Python Speed-д ялгааг тайлбарласан. Багцын интерфэйсүүд, унаган хэрэгжилтүүд болон процессор вектор зааврууд нь тусдаа зүйлс юм. Функцийн нэр нь маш бага нотолгоо өгдөг.

### Хурдан гэдэг нь GPU эсвэл олон CPU цөм гэсэн үг үү?

2:13 Энэ үр дүн CPU дээр NumPy-г ашигласан. CuPy зэрэг GPU ард тал нь массив болон үйлдлүүдэд өөр байр сонгодог. GPU худалдаж авах нь энэ ердийн Python давталтыг аль хэдийн ажиллаж байсан газартаа үлдээдэг. CPU вектор зааврууд хэд хэдэн утгыг хамтад нь боловсруулж чаддаг. NumPy нь дэмжигдсэн кернелийг сонгох механизмтай. Манай гүйлтийн хугацаа нь боломжтой онцлогуудыг мэдээлдэг боловч энэ илэрхийллийн заавруудыг мөшгөдөггүй. Бүх хэмжсэн ашигийг вектор заавруудад өгөх нь нотолгоог хэтрүүлсэн хэрэг болно.

2:40 GPU худалдааны сагсыг хаалттай хэвээр байлгаж болно. Гүйцэтгэлийг сайжруулж, худалдан авалтыг цуцалдаг шийдэл гаргах нь сэтгэл ханамжтай зүйл. Харамсалтай нь, бенчмарк үргэлжилж байна.

### Гайхалтай хурдатгал хэзээ алга болдог вэ?

2:49 Найман утгатай үед, ойлголт ялсан. Массивын машиныг дуудах нь жижиг ажлаас илүү үнэтэй байсан. Том бэлэн массив урагшилсан. Бид давтан туршилт болон халаасан процессыг ашигласан. Шинэ Python хувилбарууд нь хөндлөн огтлолыг өөрчилж болно. Дараа нь програмд хэрэгтэй зүйлийг өөрчил. Python жагсаалтаас эхэлж, шинэ Python жагсаалтаар дуусгана. NumPy оролтыг массив болгон хувиргаж, хариултыг Python объектууд руу буцааж

3:11 хувиргах ёстой. Эдгээр алхамууд таны програмд хэрэгтэй бол тооцоонд орно. Нэг сая утга дээр, энэ бүрэн зам хорин найман миллисекунд орчим хугацаа зарцуулсан. Ойлголт бас хорин найман орчим хугацаа зарцуулсан. Бидний огцом давуу тал бараг тэнцүү болсон. Хурдан хэсэг нь бодит байсан. Давуу тал нь өгөгдлийг тоон хэлбэрээр нь байлгахаас хамаарч байсан.

### Аль хил хязгаар нь бенчмаркт хамаарах вэ?

3:28 Өгөгдлийг дагана уу. Хэрэв дараагийн үйлдэл массив хүлээн авбал, массивыг хадгална уу. Хэрэв та жагсаалт болон массив хооронд байнга хувиргадаг бол, эдгээр хөндлөн огтлолуудыг хэмжинэ үү. Үнэтэй дамжуулалтын өмнө зогсох нь буруу асуултад үнэн зөв тоо өгдөг. Энэ массивыг үржүүлэх нь түр зуурын үр дүн үүсгэдэг. Анхны утгуудыг нэмэх нь гаралтыг үүсгэдэг. Унаган гүйцэтгэлд ч санах ой хэрэгтэй бөгөөд өгөгдлийг шилжүүлдэг.

3:47 Зарим үйлдлүүд гаралтын буфер хүлээн авч, таны код аюулгүйгээр дахин ашиглаж чадвал хуваарилалтыг багасгадаг. Нэг гоёмсог мөр хэд хэдэн том буферуудыг захиалж болно. Python Speed энэ асуудлыг бас дурдсан. Хуваарилагч нь таны гоо зүйд үл хамааран ажилладаг.

### Эмхэтгэсэн Python давталт бас хурдан байж чадах уу?

4:00 Та мөн давталтын синтаксисыг хадгалж, түүний гүйцэтгэлийг өөрчилж болно. Numba нь дэмжигдсэн тоон Python функцуудыг унаган код руу эмхэтгэж чаддаг. Энд манай тестийн давталт, түүний эмхэтгэгчийн декоратортой хамт байна. Энэ нь still says for гэж хэвээр байна. Үнэтэй интерпретаторын зам өөрчлөгдсөн. Эмхэтгэсний дараа, энэ давталт бэлэн массивтай бол хагас миллисекундээс бага хугацаа зарцуулсан. Эмхэтгэл өөрөө энэ гүйцэтгэлд нэг секунд орчим хугацаа зарцуулсан. Энэ тохиргооны зардал нь давтагдсан хугацаанаас хасагдсан,

4:22 тиймээс жижиг нэг удаагийн ажилд өөр харьцуулалт хийх хэрэгтэй. Numba-ийн өөрийн гарын авлага нь илэрхий давталтуудыг харуулахдаа баяртай байдаг. Хурдан замыг олохоос өмнө хэл шилжүүлэх ажлыг эхлүүлэх нь профайлерыг нээхээс зайлсхийх нарийн төвөгтэй арга юм. хугацааг хэрэглэж байгааг олж тогтоох. Юуг цаг хэрэглэж байгааг эхлээд ол. Сүлжээний хүлээлт, объектын задлан шинжилгээ, бөөн арифметик нь өөр өөр засваруудыг шаарддаг. Унаган массивын үйлдлүүд тооцоолол болон өгөгдөл таарч байвал тусалдаг.

4:43 Таны дуудагчид үнэхээр хэрэгтэй үр дүнг хэмжинэ үү. Одоо тэр товчлол дээр. Та Python функцтэй бөгөөд түүнийг массив хүлээн авахыг хүсч байна. vectorize гэдэг нэртэй боодол нь алга болсон гүйцэтгэлийн товчлуур мэт сонсогддог. Түүний баримт бичигт чухал өгүүлбэр хүлээж байна.

### np.vectorize яг юу гүйцэтгэдэг вэ?

4:56 NumPy vectorize боодлыг үндсэндээ тав тухыг хангах зорилгоор гаргасан гэж хэлдэг. Түүний хэрэгжилт нь үндсэндээ for давталт юм. Боодол нь багцуудыг хүлээн авдаг боловч таны Python функцийг дараалсан элементүүдэд дуудсаар байдаг. Интерфэйс богиноссон. Гүйцэтгэлийн хил хязгаар завгүй хэвээр байсан. Ижил утгууд Python буцаан дуудлагаар буцаж ирэхийг ажигла. Бэлэн массивтай бол энэ хувилбар наядугаар миллисекунд орчим хугацаа зарцуулсан. Энэ нь бидний ойлголтоос удаан байсан.

5:18 Ашигтай нэвтрүүлгийн боодол нь таны арилгахыг оролдож байсан яг элемент тус бүрийн ажлыг хадгалж болно. Багцын интерфэйсийн ард талын хэрэгжилтийг шалгаж, нийцтэй өгөгдлийг ашигтай хэлбэрээр нь хадгалж, харьцуулалтад хувиргалтыг оруулна уу. Унаган, буцаан дуудлага, эмхэтгэсэн давталтууд дуудагчийн суудал дээрээс ижил харагдаж болно. vectorize нэр нь таны секундомер хэзээ ч гарын үсэг зураагүй амлалт өгсөн. Хэрэв танд тав тух хэрэгтэй бол үүнийг хадгална уу. Гүйцэтгэлийн хувьд, ажиллаж буй давталтыг шалга.

### Та кодоо юуг өөрчлөх ёстой вэ?

5:41 Миний шийдвэр бол хэмжсэн тоон хурдан замыг багцлахын тулд SHIP IT. Ердийн давталтууд сайн ажиллаж байвал хадгална уу. Ажил хаана болж байгааг, мөн дараагийн дуудагчид юу хэрэгтэйг шалгана уу. Сувгийг дэмжиж, хонхыг дараад, та өөрөөр тамгалсан бол тайлбарт бичээрэй. Мөн өнөөдрийн diff энэ байна. Би Axrisi-ийн Нико байна. Хариуцлагатай нэгтгэ.

## Эх сурвалжууд

- [Universal functions (ufunc) basics — NumPy 2.2](https://numpy.org/doc/2.2/user/basics.ufuncs.html) — NumPy
- [The N-dimensional array — NumPy 2.2](https://numpy.org/doc/2.2/reference/arrays.ndarray.html) — NumPy
- [numpy.vectorize — convenience and performance notes](https://numpy.org/doc/2.2/reference/generated/numpy.vectorize.html) — NumPy
- [CPU/SIMD optimizations — NumPy 2.2](https://numpy.org/doc/2.2/reference/simd/index.html) — NumPy
- [dis — Disassembler for Python bytecode](https://docs.python.org/3.10/library/dis.html) — Python Software Foundation
- [CPython 3.10.12 list representation](https://github.com/python/cpython/blob/v3.10.12/Include/cpython/listobject.h) — CPython contributors
- [The limits of Python vectorization as a performance technique](https://pythonspeed.com/articles/vectorization-python-alternatives/) — Itamar Turner-Trauring / Python⇒Speed
- [Performance Tips](https://numba.readthedocs.io/en/stable/user/performance-tips.html) — Numba
- [Basics of CuPy](https://docs.cupy.dev/en/stable/user_guide/basic.html) — CuPy
