+− THE DAILY DIFFdev & AI news
SHIP IT

පයිතන් ක්‍රියාකාරිත්වය: ස්වදේශීය නම්පයි ලූප්, කෝල්බෑක් සහ පරිවර්තන පිරිවැය

පාලිත CPU-පමණක් සංඛ්‍යාත්මක පරීක්ෂණයක් CPython ලූප්, නම්පයි ගණිතය, පයිතන් කෝල්බෑක් රැපර් සහ සම්පාදිත නම්බා ලූප් හරහා සමාන අගයන් හඳුනා ගනී.

Want to see our stories first on Google? Add us to your preferred sources — it helps us grow.

පාලිත CPU-පමණක් සංඛ්‍යාත්මක පරීක්ෂණයක් CPython ලූප්, නම්පයි ගණිතය, පයිතන් කෝල්බෑක් රැපර් සහ සම්පාදිත නම්බා ලූප් හරහා සමාන අගයන් හඳුනා ගනී. සූදානම්-ආදාන නම්පයි විශාල ඉදිරියක් ලබා ගත් අතර, පයිතන් ලැයිස්තු වලින් සහ ඒවාට පරිවර්තනය කිරීම එම වාසිය සමීප සම්බන්ධයකට අඩු කළේය. මෙම කථාංගය ක්‍රියාත්මක කිරීමේ සීමාව සහ යෙදුමකට අවශ්‍ය ප්‍රතිඵලය මනින්නේ කෙසේද යන්න පැහැදිලි කරයි.

ලිඛිත සංස්කරණය කියවන්න (ඉංග්‍රීසි) ↗

මෙම වීඩියෝවෙන් ආවරණය වන දේ

  • CPython මූලාශ්‍රය බයිට්කෝඩ් වලට සම්පාදනය කරයි. නැවත නැවතත් අර්ථකථන/වස්තු වැඩ සහ ටයිප් කළ ස්වදේශීය සංඛ්‍යාත්මක ලූප් යනු විවිධ ක්‍රියාත්මක කිරීමේ සැකසුම් වේ.
  • සංඛ්‍යාත්මක NumPy ගණිතයට සම්පාදිත මෙහෙයුම් වලට ටයිප් කළ කාණ්ඩ භාර දිය හැකිය; ගණිතමය ලූප් තවමත් පවතින අතර, දර්ශනවලට අසංයුක්ත සැකසුම් තිබිය හැකිය.
  • පරිවර්තනය සහ අවශ්‍ය ප්‍රතිදාන නිරූපණය මැන බලන්න. මෙම ක්‍රියාත්මක කිරීමේදී, පයිතන් ලැයිස්තු අරා බවට පරිවර්තනය කිරීම සහ නැවතත් විශාල සූදානම්-අරා වාසිය නැති කළේය.
  • කුඩා කාර්ය භාර සාමාන්‍ය පයිතන්ට වාසිදායක විය හැක, මන්ද ස්ථාවර අරා-ඇමතුම් පිරිවැය වැදගත් වේ. අට-අගය අවබෝධය මෙම මිනුම් සංසන්දනය දිනා ගත්තේය.
  • np.vectorize යනු අනුක්‍රමික මූලද්‍රව්‍ය සඳහා පයිතන් අමතන පහසුව සඳහා වූ රැපරයකි; තනි කාණ්ඩ අතුරුමුහුණතක් ස්වදේශීය සංඛ්‍යාත්මක ක්‍රියාත්මක කිරීමක් තහවුරු නොකරයි.
  • සම්පාදිත පයිතන්-සින්ටැක්ස් ලූප් ද වේගවත් විය හැක. ඇමතුම්කරුට වැදගත් වන විට සීතල සම්පාදනය/සැකසුම් පිරිවැය ඇතුළත් කරන්න.
  • ස්වදේශීය ක්‍රියාත්මක කිරීම, CPU SIMD, බහු-ත්‍රෙඩින් සහ GPU පසුබිම් වෙනම අදහස් වේ. පවතින CPU විශේෂාංග විශේෂිත ධාවනයක භාවිතා කරන උපදෙස් සොයා නොගනී.

පරිවර්තනය කරන ලද පිටපත

මුල් ඉංග්‍රීසි නිරූපණයෙන් පරිවර්තනය කරන ලදී. පවතින ශ්‍රව්‍ය සහ ශීර්ෂ පාඨ YouTube මගින් පාලනය වේ.

එකම CPU එකකට කලින් අවසන් කළ හැක්කේ ඇයි?

0:00 වේගවත් වීමට පයිතන්ට නව භාෂාවක් අවශ්‍ය යැයි ඔබ සිතනවා. ලූප් එක මාරු කිරීමෙන් පසු එම CPU එක අපගේ කාණ්ඩය වේගයෙන් ධාවනය කළා. වැඩ කොහේ ගියාද? වේගය නැති වන්නේ කවදාද? කුමන කෙටිමඟක් පයිතන් නැවත ගෙන එයිද? මෙය The Daily Diff, ඇතුළත සිට. ඒ කෙටිමඟ ගැන අවධානයෙන් ඉන්න. CPython යනු සම්මත පයිතන් ක්‍රියාත්මක කිරීමයි.

0:17 එය ඔබේ මූලාශ්‍රය බයිට්කෝඩ් වලට සම්පාදනය කරයි, පසුව එම උපදෙස් අර්ථකථකයෙකු තුළ ධාවනය කරයි. NumPy යනු සංඛ්‍යාත්මක පුස්තකාලයකි, එහි අරා වල ප්‍රකාශිත දත්ත වර්ගයක් සහිත අගයන් අඩංගු වේ. එහි ගොඩනඟන ලද ගණිතයට සම්පාදිත මෙහෙයුම් වලට සම්පූර්ණ කාණ්ඩයක් භාර දිය හැකිය. මිලියනයක පාවෙන ලක්ෂ්‍ය අගයන් ගෙන, සෑම එකක්ම වර්ග කර, පසුව මුල් අගය එකතු කරන්න. සෑම සංස්කරණයකටම එකම අගයන් ලැබෙන අතර ගැළපෙන පිළිතුරු ලබා දෙයි. වටකුරු කිරීමේ වෙනස්කම් තරඟයෙන් බැහැර කිරීමට අගයන් ප්‍රමාණවත් තරම් කුඩාය.

0:40 මෙම යන්ත්‍රයේදී, අවබෝධයට මිලි තත්පර තිස්තුනක් පමණ ගත විය. NumPy එකකට වඩා අඩු කාලයක් ගත විය. දෙකම CPU මත ධාවනය විය. මෙම කාර්ය භාරය සඳහා එය ප්‍රයෝජනවත් සාක්ෂියක් වන අතර, ක්‍රමලේඛන භාෂාවකට භයානක මරණ දැන්වීමකි. සාමාන්‍ය ලූප් එකෙන් පටන් ගන්න.

පයිතන් ලූප් එකක් නැවත කරන්නේ කුමන කාර්යයද?

0:53 පයිතන් ඊළඟ අගය ලබා ගනී, ගණිතය සිදු කරයි, සහ පිළිතුර එකතු කරයි. ඉන්පසු එය නැවත එය සිදු කරයි. ගුණ කිරීම ලාභදායී වේ. ඊළඟ ගුණ කිරීම සංවිධානය කිරීම, සහ ඒ වටා ඇති පයිතන් වස්තු හැසිරවීම, සෑම විටම වැඩ එකතු කරයි. මෙය පරීක්ෂා කරන ලද කාර්යයේ සත්‍ය විසංයෝජනයයි. පුනරාවර්තනය, ගුණ කිරීම සහ එකතු කිරීම බයිට්කෝඩ් උපදෙස් ලෙස දිස්වේ. පයිතන් සංස්කරණ සහ අර්ථකථකයන් විවිධ තේරීම් කරයි.

1:14 මෙම වේලාවන් තිරයේ ඇති සංස්කරණයට අයත් වේ, එය පයිතන් තුනයි දහය වේ. පයිතන් ලැයිස්තුවක් වස්තු වලට යොමු ගබඩා කරයි, එබැවින් විවිධ ආකාරයේ දේවල් වලට ලැයිස්තුවක් බෙදා ගත හැකිය. අපගේ ගණිත කාර්යය පුරාම සංඛ්‍යා භාවිතා කරයි. එය පුනරාවර්තන සේවාවක් ඉල්ලා සිටින අතරතුර සාමාන්‍ය සැකැස්මක් සඳහා ගෙවයි. එකම කෝපි මිලියනය වාරයක් ඇණවුම් කරනවා යැයි සිතන්න, සෑම කෝප්පයක් සඳහාම නැවුම් පෝරමයක් පුරවන්න. කෝපි යන්ත්‍රය හොඳයි.

1:36 ලේඛන කටයුතු තමන්ගේම වෘත්තියක් දියුණු කර ඇත.

NumPy ලූප් එක ගෙන යන්නේ කොතැනටද?

1:38 NumPy ගිවිසුම වෙනස් කරයි. මෙම අරාව තනි ප්‍රකාශිත වර්ගයක් සහිත ස්ථාවර ප්‍රමාණයේ පාවෙන ලක්ෂ්‍ය අගයන් දරයි. අපගේ අරාව අඛණ්ඩ බැවින්, එහි අගයන් මතකයේ එකට පවතී. දර්ශනවලට වෙනත් සැකසුම් තිබිය හැක. ගණිතමය මෙහෙයුම ලැබෙන දත්ත වර්ගය දනී. ඇමතුම කාණ්ඩය ස්වදේශීය මෙහෙයුමකට භාර දෙයි. සම්පාදිත කේතය තුළ ලූප් තවමත් අගයන් වෙත පිවිසෙයි. එය එම කාර්යය හරහා වර්ගය පිළිබඳ දැනුම නැවත භාවිතා කළ හැකිය.

2:00 පයිතන් රැකියාව භාර දෙන පුද්ගලයා ලෙස පවතී. Itamar Turner Trauring Python Speed හි වෙනස පැහැදිලි කරයි. කාණ්ඩ අතුරුමුහුණත්, ස්වදේශීය ක්‍රියාත්මක කිරීම් සහ ප්‍රොසෙසර දෛශික උපදෙස් වෙනම දේවල් වේ. ශ්‍රිත නාමය ඉතා සුළු සාක්ෂි සපයයි.

වේගවත් යනු GPU ද නැතිනම් බොහෝ CPU කෝර් ද?

2:13 මෙම ප්‍රතිඵලය CPU මත NumPy භාවිතා කළේය. CuPy වැනි GPU පසුබිමක් අරා සහ මෙහෙයුම් සඳහා වෙනත් නිවසක් තෝරා ගනී. GPU එකක් මිලදී ගැනීමෙන් මෙම සාමාන්‍ය පයිතන් ලූප් එක එය දැනටමත් ධාවනය වූ තැනම ධාවනය වේ. CPU දෛශික උපදෙස් වලට අගයන් කිහිපයක් එකට සැකසිය හැකිය. NumPy සතුව සහාය දක්වන කර්නල් තේරීම සඳහා යන්ත්‍රෝපකරණ ඇත. අපගේ ධාවන කාලය පවතින විශේෂාංග වාර්තා කරයි, නමුත් මෙම ප්‍රකාශනයේ උපදෙස් සොයා නොගනී. සමස්ත මිනුම් ලාභය දෛශික උපදෙස් වලට ලබා දීම සාක්ෂි අධික ලෙස අලෙවි කිරීමකි.

2:40 GPU සාප්පු කරත්තය වසා තැබිය හැකිය. මිලදී ගැනීමක් අවලංගු කරන කාර්ය සාධන නිවැරදි කිරීමක් ගැන ගැඹුරින් සෑහීමකට පත් විය හැකිය. අවාසනාවකට, සංසන්දනාත්මක පරීක්ෂණය දිගටම පවතී.

විස්මිත වේගය නැති වන්නේ කවදාද?

2:49 අගයන් අටක් සමඟ, අවබෝධය දිනා ගත්තේය. අරා යන්ත්‍රෝපකරණ ඇමතීමට කුඩා කාර්යයට වඩා වැඩි මුදලක් වැය විය. විශාල සූදානම් අරා ඉදිරියට ගියේය. අපි නැවත නැවතත් පරීක්ෂණ සහ උණුසුම් කළ ක්‍රියාවලියක් භාවිතා කළෙමු. නවතම පයිතන් ගොඩනැගීම් වලට හරස් මාර්ගය වෙනස් කළ හැකිය. ඉන්පසු යෙදුමට අවශ්‍ය දේ වෙනස් කරන්න. පයිතන් ලැයිස්තුවකින් ආරම්භ කර නැවුම් පයිතන් ලැයිස්තුවකින් අවසන් කරන්න. NumPy ආදානය අරාවක් බවට පරිවර්තනය කළ යුතු අතර පිළිතුර නැවත පයිතන්

3:11 වස්තු බවට පත් කළ යුතුය. ඔබේ යෙදුමට ඒවා අවශ්‍ය නම් එම පියවර බිල්පතට අයත් වේ. මිලියනයක අගයන්හිදී, එම සම්පූර්ණ මාර්ගයට මිලි තත්පර විසි අටක් පමණ ගත විය. අවබෝධයට ද විසි අටක් පමණ ගත විය. අපගේ නාටකාකාර ඉදිරිය සමීප සම්බන්ධයක් බවට පත් විය. වේගවත් කොටස සත්‍ය විය. වාසිය රඳා පැවතියේ දත්ත එහි සංඛ්‍යාත්මක ස්වරූපයෙන් තබා ගැනීමට ඉඩ දීම මතය.

සංසන්දනාත්මක පරීක්ෂණයට අයත් වන්නේ කුමන සීමාවන්ද?

3:28 දත්ත අනුගමනය කරන්න. ඊළඟ මෙහෙයුම අරාවක් පිළිගන්නේ නම්, අරාව තබා ගන්න. ඔබ නැවත නැවතත් ලැයිස්තු සහ අරා අතර පරිවර්තනය කරන්නේ නම්, ඒ හරස් මාර්ග මැන බලන්න. මිල අධික භාර දීමකට පෙර නැවැත්වීම වැරදි ප්‍රශ්නයට නිවැරදි සංඛ්‍යා ලබා දෙයි. මෙම අරාව ගුණ කිරීමෙන් තාවකාලික ප්‍රතිඵලයක් නිර්මාණය වේ. මුල් අගයන් එකතු කිරීමෙන් ප්‍රතිදානය නිර්මාණය වේ. ස්වදේශීය ක්‍රියාත්මක කිරීමට තවමත් මතකය සහ දත්ත ගෙනයාම අවශ්‍ය වේ.

3:47 සමහර මෙහෙයුම් ප්‍රතිදාන බෆරයක් පිළිගනී, ඔබේ කේතයට එය ආරක්ෂිතව නැවත භාවිතා කළ හැකි විට වෙන් කිරීම් අඩු කරයි. එක් ලස්සන පේළියකට විශාල බෆර කිහිපයක් ඇණවුම් කළ හැකිය. Python Speed ද මෙම ගැටලුව හඳුන්වා දෙයි. වෙන් කරන්නා ඔබේ සෞන්දර්යයට අසාමාන්‍ය ලෙස උදාසීන වේ.

සම්පාදිත පයිතන් ලූප් එකක් ද වේගවත් විය හැකිද?

4:00 ඔබට ලූප් සින්ටැක්ස් තබාගෙන එහි ක්‍රියාත්මක කිරීම වෙනස් කළ හැකිය. Numba හට සහාය දක්වන සංඛ්‍යාත්මක පයිතන් ශ්‍රිත ස්වදේශීය කේතයට සම්පාදනය කළ හැකිය. මෙන්න අපගේ පරීක්ෂණයෙන් එහි සම්පාදක අලංකරණය සමඟ ලූප් එක. එය තවමත් 'for' යැයි කියයි. මිල අධික අර්ථකථන මාර්ගය වෙනස් වී ඇත. සම්පාදනය කිරීමෙන් පසු, මෙම ලූප් එකට සූදානම් අරා සමඟ මිලි තත්පර භාගයකට වඩා අඩු කාලයක් ගත විය. මෙම ධාවනයේදී සම්පාදනය කිරීමට තත්පරයක් පමණ ගත විය. එම සැකසුම් පිරිවැය නැවත නැවතත් වේලාවන්ගෙන් බැහැර කරන ලදී,

4:22 එබැවින් කුඩා එකවර කරන කාර්යයක් වෙනත් සංසන්දනයකට සුදුසුය. Numba's තමන්ගේම මාර්ගෝපදේශය පැහැදිලි ලූප් පෙන්වීමට සතුටු වේ. hot path එක සොයා ගැනීමට පෙර භාෂා සංක්‍රමණයක් ආරම්භ කිරීම profiler එකක් විවෘත කිරීම මඟ හැරීමට සංකීර්ණ ක්‍රමයකි. පළමුව කාලය නාස්ති කරන්නේ කුමක්දැයි සොයා බලන්න. ජාල රැඳීම්, වස්තු විශ්ලේෂණය සහ විශාල ගණිතය විවිධ නිවැරදි කිරීම් සඳහා කැඳවයි. ගණනය කිරීම සහ දත්ත ගැලපෙන විට ස්වදේශීය අරා මෙහෙයුම් උපකාරී වේ.

4:43 ඔබේ ඇමතුම්කරුට ඇත්ත වශයෙන්ම අවශ්‍ය ප්‍රතිඵලය මැන බලන්න. දැන් එම කෙටිමඟ සඳහා. ඔබට පයිතන් ශ්‍රිතයක් ඇත, එය අරාවක් පිළිගැනීමට ඔබට අවශ්‍යයි. vectorize නමින් ඇති රැපරයක් නැති වූ කාර්ය සාධන බොත්තම වැනිය. එහි ලේඛනගත කිරීමේදී වැදගත් වාක්‍යයක් බලා සිටී.

np.vectorize ඇත්ත වශයෙන්ම ක්‍රියාත්මක කරන්නේ කුමක්ද?

4:56 NumPy පවසන්නේ එහි vectorize රැපරය ප්‍රධාන වශයෙන් පහසුව සඳහා සපයා ඇති බවයි. එහි ක්‍රියාත්මක කිරීම අත්‍යවශ්‍යයෙන්ම for loop එකකි. රැපරය කාණ්ඩ පිළිගනී, නමුත් අනුක්‍රමික මූලද්‍රව්‍ය සඳහා ඔබේ පයිතන් ශ්‍රිතය ඇමතීම දිගටම කරගෙන යයි. අතුරුමුහුණත කෙටි විය. ක්‍රියාත්මක කිරීමේ සීමාව කාර්යබහුලව පැවතුනි. පයිතන් කෝල්බෑක් හරහා එකම අගයන් නැවත පැමිණෙන ආකාරය බලන්න. සූදානම් අරා සමඟ, මෙම සංස්කරණයට මිලි තත්පර අසූ හතක් පමණ ගත විය. එය අපගේ අවබෝධයට වඩා මන්දගාමී විය.

5:18 ප්‍රයෝජනවත් විකාශන රැපරයක් ඔබට ඉවත් කිරීමට උත්සාහ කළ නිශ්චිත එක් මූලද්‍රව්‍ය කාර්යය ආරක්ෂා කළ හැකිය. කාණ්ඩ අතුරුමුහුණතක් පිටුපස ඇති ක්‍රියාත්මක කිරීම පරීක්ෂා කරන්න, අනුකූල දත්ත එහි ප්‍රයෝජනවත් ආකාරයෙන් තබා ගන්න, සහ සංසන්දනයට පරිවර්තනය ඇතුළත් කරන්න. ඇමතුම්කරුගේ පුටුවෙන් ස්වදේශීය, කෝල්බෑක් සහ සම්පාදිත ලූප් සමාන විය හැක. vectorize යන නම ඔබේ නැවතුම් ඔරලෝසුව කිසිදා අත්සන් නොකළ පොරොන්දුවක් දුන්නේය. ඔබට පහසුව අවශ්‍ය විට එය තබා ගන්න. කාර්ය සාධනය සඳහා, ධාවනය වන ලූප් එක පරීක්ෂා කරන්න.

ඔබ ඔබේ කේතය තුළ වෙනස් කළ යුත්තේ කුමක්ද?

5:41 මගේ තීන්දුව වන්නේ මනින ලද සංඛ්‍යාත්මක hot path එකක් කාණ්ඩගත කිරීම සඳහා SHIP IT යන්නයි. සාමාන්‍ය ලූප් දැනටමත් හොඳින් ක්‍රියාත්මක වන විට තබා ගන්න. වැඩ සිදුවන්නේ කොතැනද සහ ඊළඟ ඇමතුම්කරුට අවශ්‍ය වන්නේ කුමක්දැයි පරීක්ෂා කරන්න. දායක වන්න, සීනුව ඔබන්න, සහ ඔබ එය වෙනස් ආකාරයකින් මුද්‍රා තැබුවේ නම් අදහස් දැක්වීම් වලදී මට කියන්න. ඒ වගේම අදට එච්චරයි. මම Axrisi හි Niko. වගකීමෙන් යුතුව ඒකාබද්ධ කරන්න.

මූලාශ්‍ර

  1. Universal functions (ufunc) basics — NumPy 2.2NumPy
  2. The N-dimensional array — NumPy 2.2NumPy
  3. numpy.vectorize — convenience and performance notesNumPy
  4. CPU/SIMD optimizations — NumPy 2.2NumPy
  5. dis — Disassembler for Python bytecodePython Software Foundation
  6. CPython 3.10.12 list representationCPython contributors
  7. The limits of Python vectorization as a performance techniqueItamar Turner-Trauring / Python⇒Speed
  8. Performance TipsNumba
  9. Basics of CuPyCuPy

අදාළ වීඩියෝ

under-the-hood · si · 2026 වප් 8

Polars 2.0: ඇයි join කිරීමේදී තවදුරටත් එහි පේළි අනුපිළිවෙල නොපවතින්නේ

Polars 2.0 පෙරනිමියෙන් streaming එන්ජිමක් මත collect ක්‍රියාත්මක කරයි. join, group_by සහ unpivot සඳහා, maintain_order හෝ sort පැහැදිලිව සකසා නොමැති නම්, මෙම නිකුතුව තවදුරටත් ආදාන පේළි අනුපිළිවෙල සහතික

2:31 ↗
under-the-hood · si · 2026 වප් 12

Hugging Face මාදිලි ගොනු වල සැඟවුණු කේත ධාවනය කළ හැක

අනිෂ්ට මාදිලි පැකේජ අනාරක්ෂිත ලෙස පැටවීමේදී කේත ධාවනය කළ හැක. Pickle reverse shells, කැඩුණු ගොනු ස්කෑනරයේ හැසිරීම් සහ පර්යේෂණ මගින් පෙන්නුම් කරන ලද මාදිලි-නම ව්‍යාකූලත්වය පැහැදිලි කරන ලියකියවිලිගත උදා

3:33 ↗
under-the-hood · si · 2026 වප් 11

ප්‍රතිචාරය අතුරුදහන් වූ විට Stripe ඔබගේ ඉල්ලීම මතක තබා ගනී

සේවාදායකයා මෙහෙයුම සම්පූර්ණ කිරීමෙන් පසු කාලයක් ඉකුත්වීමක් නිසා ගෙවීම් කටයුත්තක් අවිනිශ්චිත විය හැක. මෙම "Under the Hood" පැහැදිලි කරන්නා Stripe API v1 හි ලේඛනගත අයිඩම්පොටෙන්සි කොන්ත්‍රාත්තුව භාවිතා ක

2:54 ↗
under-the-hood · si · 2026 වප් 10

Shopify විසින් ඉන්වෙන්ටරි වෙන්කිරීම් MySQL වෙත ගෙන යන ලදී

Shopify සිය ඉන්වෙන්ටරි වෙන්කිරීමේ පද්ධතිය Redis සිට දැනටමත් ඉන්වෙන්ටරි ලෙජරය තිබූ MySQL දත්ත ගබඩාව වෙත ගෙන යන ලදී. තනි තනිව අගුළු දැමිය හැකි ඒකක පේළිවල සීමා සහිත තටාකයක් සමගාමී පිරික්සුම් සඳහා විවිධ ස

2:58 ↗