পিপাই - এটি কীভাবে সিপিথনকে পরাজিত করতে পারে?


264

থেকে Google মুক্ত উত্স ব্লগ :

পাইপাই পাইথনের পাইথনের একটি পুনঃসংশোধন, সিপিথনের চেয়ে আরও ভাল পারফরম্যান্স অর্জনের জন্য উন্নত কৌশল ব্যবহার করে। বহু বছরের কঠোর পরিশ্রম অবশেষে শেষ হয়ে গেছে। আমাদের গতির ফলাফলগুলি প্রায়শই সিপিথনকে পরাজিত করে, সামান্য ধীর থেকে শুরু করে, রিয়েল অ্যাপ্লিকেশন কোডের 2x অবধি, ছোট বেনমার্কগুলিতে 10x পর্যন্ত স্পিডআপ পর্যন্ত।

এটা কিভাবে সম্ভব? পাইপোন প্রয়োগের জন্য কোন পাইথন বাস্তবায়ন ব্যবহৃত হয়েছিল? সিপিথন ? এবং একটি পাইপাইপি বা পাইপাইপাই তাদের স্কোরকে মারার সম্ভাবনাগুলি কী?

(সম্পর্কিত নোটে ... কেউ কেন এই জাতীয় কিছু চেষ্টা করবে?)


43
Nitpick: PyPy হয় PyPyPy। প্রজেকশন অপারেটর হিসাবে পাই- * উপসর্গটি ভাবেন।
u0b34a0f6ae

ঠিক আছে. সুতরাং পিপিথিকে সিপিথনের চেয়ে পছন্দ করা উচিত? এটির কোনও ত্রুটি আছে কি?
বালকি

10
পিপিপি রানটাইম অপ্টিমাইজেশনে দুর্দান্ত, তবে এর বিভিন্ন অভ্যন্তরীণ এটি বেশ কয়েকটি জনপ্রিয় সি এক্সটেনশনের সাথে বেমানান
সিস টিমারম্যান

4
প্রায় সকলেই প্রশ্নটি অনুপস্থিত, একটি গতি লাভ কীভাবে তাত্ত্বিকভাবে সম্ভব to তবে এটি সম্পর্কে ভাবেন: পাইথন কোনও ট্যুরিং মেশিনের মতো কিছু করতে পারে। এটি কল করতে পারেন gcc, সর্বোপরি। সুতরাং আপনি কিছু পাইথন কোডও লিখতে পারেন যা সিপথনে চলে, এটি অন্য কিছু পাইথন gccকোডকে ব্যাখ্যা করে , এটি সি তে অনুবাদ করে এবং সম্পাদন করে , এবং তারপরে সংকলিত প্রোগ্রামটি কার্যকর করে। এবং এটি দ্রুততর হতে পারে, যদি কোডটি প্রায়শই যথেষ্ট বলা হয়।
osa

উত্তর:


155

চতুর্থাংশ 1। এটা কিভাবে সম্ভব?

ম্যানুয়াল মেমরি পরিচালনা (যা সিপিথন তার গণনা সহ যা করে) কিছু ক্ষেত্রে স্বয়ংক্রিয় পরিচালনার চেয়ে ধীর হতে পারে।

সিপিথন ইন্টারপ্রেটার বাস্তবায়নের সীমাবদ্ধতা পিপিপি করতে পারে এমন কিছু আশাবাদ বাধা দেয় (উদাঃ সূক্ষ্ম দানযুক্ত লকস)।

মার্সেলো যেমন উল্লেখ করেছেন, জেআইটি। ফ্লাইতে সক্ষম হওয়া নিশ্চিত করে কোনও বস্তুর ধরণটি আপনাকে কল করতে চান এমন পদ্ধতিতে অবশেষে পৌঁছাতে একাধিক পয়েন্টার ডিरेফারেন্স করার প্রয়োজনীয়তাটি বাঁচাতে পারে।

Q2 এর। পাইপোন প্রয়োগের জন্য কোন পাইথন বাস্তবায়ন ব্যবহৃত হয়েছিল?

পাইপাই ইন্টারপ্রেটারটি আরপাইথনে প্রয়োগ করা হয়েছে যা পাইথনের একটি স্ট্যাটিকালি টাইপযুক্ত উপসেট (ভাষা এবং সিপিথন ইন্টারপ্রেটার নয়)। - বিশদ জানতে https://pypy.readthedocs.org/en/latest/architecture.html দেখুন।

চতুর্থাংশ 3। এবং একটি পাইপাইপি বা পাইপাইপাই তাদের স্কোরকে মারার সম্ভাবনাগুলি কী?

এটি এই হাইপোথটিক্যাল দোভাষীকে বাস্তবায়নের উপর নির্ভর করবে। উদাহরণস্বরূপ, যদি তাদের মধ্যে কেউ উত্স গ্রহণ করে, এটির উপর কোনও প্রকার বিশ্লেষণ করে এবং কিছুক্ষণ চালানোর পরে এটি সরাসরি টাইট টার্গেট নির্দিষ্ট সমাবেশ কোডে রূপান্তরিত করে, আমি ধারণা করি এটি সিপিথনের চেয়ে বেশ দ্রুত হবে be

আপডেট: সম্প্রতি, যত্ন সহকারে তৈরি করা একটি উদাহরণে , পাইপাই সংকলিত অনুরূপ সি প্রোগ্রামকে ছাড়িয়ে গেছে gcc -O3। এটি একটি স্বীকৃত কেস তবে এটি কিছু ধারণা প্রদর্শন করে।

Q4 ই। কেন কেউ এ জাতীয় কিছু চেষ্টা করবে?

অফিসিয়াল সাইট থেকে। https://pypy.readthedocs.org/en/latest/architecture.html#mission-statement

আমাদের প্রদান লক্ষ্য:

  • ভাষাগত স্পেসিফিকেশন এবং বাস্তবায়নের দিকগুলির মধ্যে
    একটি পরিষ্কার
    বিচ্ছিন্নতার উপর জোর দিয়ে গতিময় ভাষাগুলির বাস্তবায়ন উত্পাদন করার জন্য একটি সাধারণ অনুবাদ এবং সমর্থন কাঠামো
    । আমরা এটিকে RPython toolchain_ বলি ।

  • পাইথন_ ভাষার একটি সামঞ্জস্যপূর্ণ, নমনীয় এবং দ্রুত বাস্তবায়ন যা নিম্ন-স্তরের বিশদটি এনকোড না করে নতুন উন্নত উচ্চ-স্তরের বৈশিষ্ট্যগুলি সক্ষম করতে উপরের টুলচেন ব্যবহার করে।

এইভাবে উদ্বেগগুলি পৃথক করে, পাইথন এবং অন্যান্য গতিশীল ভাষাগুলির আমাদের বাস্তবায়ন যে কোনও গতিশীল ভাষার জন্য স্বয়ংক্রিয়ভাবে একটি জাস্ট-ইন-টাইম সংকলক তৈরি করতে সক্ষম। এটি বাস্তবায়নের সিদ্ধান্তগুলিতে মিশ্র-মিশ্রিত পদ্ধতিরও মঞ্জুরি দেয়, এমন অনেকগুলি যা thatতিহাসিকভাবে ব্যবহারকারীর নিয়ন্ত্রণের বাইরে ছিল যেমন টার্গেট প্ল্যাটফর্ম, মেমরি এবং থ্রেডিং মডেল, আবর্জনা সংগ্রহের কৌশল এবং অপ্টিমাইজেশান প্রয়োগ করা হয়েছে কিনা তা সহ প্রথম স্থানে একটি জেআইটি

সি সংকলক জিসিসি সি তে প্রয়োগ করা হয়েছে, হাস্কেল সংকলক জিএইচসি হাস্কেল লেখা আছে। পাইথন দোভাষী / সংকলক পাইথনে না লেখার কোনও কারণ আছে কি?


82
এই উত্তরটি পিপিপি কীভাবে দ্রুত হয় তার মূল ব্যাখ্যাটি পুরোপুরি অনুপস্থিত; যদিও এটি উল্লেখ করেছে যে পাইপাই সত্যই পাইথনে প্রয়োগ করা হয় নি, তবে আরপিথন-এ, এটি নির্দেশ করে না যে পিপিথন কোডটি স্থিরভাবে পাইপাই ইন্টারপ্রেটার তৈরির জন্য সংকলিত এবং অনুকূলিত হয়েছে (এটি কেবলমাত্র পাইথন কোডটি শীর্ষে চলতে পারে বলে প্রমাণিত হয়) সিপিথনের আরও ধীরে ধীরে)। তারা "সাধারণ পাইথন" এ যা প্রয়োগ করেছেন তা হ'ল RPYthon "সংকলক" (ব্লক উদ্ধৃতিতে বর্ণিত অনুবাদ কাঠামো)।
বেন

12
এটি লিডকে কবর দিচ্ছে। বেশিরভাগ পারফরম্যান্স অনুবাদ থেকে সিতে আসে (যা দোভাষীকে সিপিথনের তুলনায় এতটা ধীর করে না) এবং জেআইটি, যা গরম পথগুলিকে আরও দ্রুত করে তোলে।
তোবু

4
"আপডেট: সাম্প্রতিককালে, যত্ন সহকারে তৈরি করা একটি উদাহরণে পিপিপি, জিসিসি -৩৩ দিয়ে সংকলিত অনুরূপ সি প্রোগ্রামকে ছাড়িয়ে গেছে।" এবং যদি আপনি সেই পোস্টের অধীনে প্রথম মন্তব্যটি পড়েন তবে আপনি দেখতে পাবেন যে সেই পোস্টটির লেখক লিঙ্ক-টাইম অপ্টিমাইজেশন জানেন না। লিঙ্ক-টাইম অপ্টিমাইজেশন সক্ষম করার সাথে, সি কোডটি দ্রুত চলে।
আলী

2
ঠিক আছে, ব্লগ পোস্টটি ছিল ২০১১ সালে এবং এই উত্তরটি ২০১৪ সালে Also এছাড়াও, মন্তব্যটি ভাগ করা লাইব্রেরিগুলির উল্লেখ করে। আমি জানি না যে এর কতগুলি (উত্তর এবং ব্লগ পোস্ট) বৈধ। জড়িত সমস্ত প্রযুক্তি গত কয়েক বছরে অনেক পরিবর্তন হয়েছে।
নওফাল ইব্রাহিম

1
পাইপির সমতুল্য সি এর চেয়ে দ্রুত হওয়ার দুটি যত্ন সহকারে তৈরি করা উদাহরণে প্রতিটি খুব নির্দিষ্ট কারণের জন্য বেঞ্চমার্কে দ্রুত faster প্রথম কারণ পাইপি টাইট লুপ গণনা জিনিসগুলি উপলব্ধি করতে যথেষ্ট স্মার্ট যে কখনও এটির গণনা ব্যবহৃত হয়নি, তাই এটি সম্পূর্ণরূপে মুছে ফেলা যায় (জেআইটি পাস) দ্বিতীয়টির সংমিশ্রণের জন্য: কারণ পাইপী জেআইটি "লাইব্রেরির সীমানা পেরিয়ে ইনলাইন করতে পারে", প্রদত্ত "প্রিন্টফ" ফাংশনটির উদাহরণটি আক্ষরিকভাবে কেবল কোনও পূর্ণসংখ্যার নির্গমন করতে সক্ষম হতে পারে এবং পুনরাবৃত্তি হওয়া ম্যালোককে সরিয়ে দেয় (মেমরির বরাদ্দ ওভারহেড)।
amcgregor

291

"পাইপাই পাইথনের পাইথনের পুনঃসংশোধন" পিপিপি, আইএমএইচও-র বর্ণনা দেওয়ার একটি বিভ্রান্তিকর উপায়, যদিও এটি প্রযুক্তিগতভাবে সত্য।

পাইপাইয়ের দুটি বড় অংশ রয়েছে।

  1. অনুবাদ কাঠামো
  2. দোভাষী

অনুবাদ কাঠামো একটি সংকলক। এটি আরপিথন কোডটি সি (বা অন্যান্য লক্ষ্যগুলি) পর্যন্ত সংকলিত করে, স্বয়ংক্রিয়ভাবে আবর্জনা সংগ্রহ এবং একটি জেআইটি সংকলক হিসাবে দিকগুলিতে যুক্ত হয়। এটি নির্বিচার পাইথন কোড হ্যান্ডেল করতে পারে না , কেবল আরপিথন।

আরপিথন একটি সাধারণ পাইথনের একটি উপসেট; সমস্ত আরপিথন কোড পাইথন কোড, তবে অন্যভাবে নয়। আরপিথনের কোনও আনুষ্ঠানিক সংজ্ঞা নেই, কারণ RPython মূলত কেবল "পাইথনের উপসেট যা পাইপির অনুবাদ কাঠামো দ্বারা অনুবাদ করা যায়"। তবে অনুবাদ করার জন্য, আরপিথন কোডটি স্থিতিশীলভাবে টাইপ করতে হবে (প্রকারগুলি অনুমান করা হয়, আপনি সেগুলি ঘোষণা করেন না, তবে এটি এখনও ভেরিয়েবলের প্রতি কঠোরভাবে এক প্রকারের), এবং আপনি ডিক্লারিং / ফাংশনগুলি সংশোধন করার মতো কাজগুলি করতে পারবেন না / হয় রানটাইম ক্লাস।

দোভাষী তখন আরপিথনে লিখিত একটি সাধারণ পাইথন ইন্টারপ্রেটার।

RPython কোডটি সাধারণ পাইথন কোড হওয়ায় আপনি এটি যেকোন পাইথন ইন্টারপ্রেটারে চালাতে পারেন। কিন্তু পিপাই-র গতির কোন দাবিই সেভাবে চালানো থেকে আসে না; এটি কেবল দ্রুত পরীক্ষার চক্রের জন্য, কারণ দোভাষী অনুবাদ করতে অনেক সময় লাগে ।

বুঝতে পেরে, এটি অবিলম্বে স্পষ্ট হওয়া উচিত যে পাইপাইপাই বা পাইপাইপাই সম্পর্কে জল্পনা কল্পনাগুলি আসলে কোনও ধারণা দেয় না। আপনার কাছে আরপিটাইনে একটি দোভাষী লিখেছেন। আপনি এটি সি কোডে অনুবাদ করেছেন যা পাইথনকে দ্রুত কার্যকর করে। সেখানে প্রক্রিয়াটি থেমে যায়; আবার প্রক্রিয়াজাত করে গতি বাড়ানোর আরপিথন নেই

সুতরাং "পিপিথনের চেয়ে পিপিপির পক্ষে দ্রুত হওয়া কীভাবে সম্ভব" এটিও মোটামুটি সুস্পষ্ট হয়ে যায়। পিআইপির একটি জেআইটি সংকলক সহ আরও ভাল বাস্তবায়ন হয়েছে (এটি সাধারণত জেআইটি সংকলক ব্যতীত খুব দ্রুত নয়, আমি বিশ্বাস করি, পিআইপি জাইটি সংকলনের জন্য সংবেদনশীল প্রোগ্রামগুলির জন্য কেবল দ্রুততর)) পাইথনকে পাইথন ভাষার উচ্চতর অনুকূলকরণের জন্য কখনও ডিজাইন করা হয়নি (যদিও তারা পার্থক্য অনুসরণ করে এটি একটি সর্বোচ্চ অনুকূলিতকরণ বাস্তবায়ন করার চেষ্টা করে) do


পাইপাই প্রকল্পের সত্যিকারের উদ্ভাবনী বিট হ'ল তারা হাতে কলমে সূক্ষ্ম জিসি স্কিম বা জেআইটি সংকলক লেখেন না। তারা অনুবাদককে তুলনামূলকভাবে সোজাভাবে RPython এ লিখেন এবং সমস্ত RPython পাইথনের তুলনায় নিম্ন স্তরের এটি এখনও একটি অবজেক্ট-ভিত্তিক আবর্জনা সংগ্রহ করা ভাষা, সি এর চেয়ে অনেক বেশি উচ্চ স্তরের তারপর অনুবাদ ফ্রেমওয়ার্কটি স্বয়ংক্রিয়ভাবে GC এবং JIT এর মতো জিনিসগুলিকে যুক্ত করে। সুতরাং অনুবাদ কাঠামো একটি বিশালপ্রচেষ্টা, তবে এটি পাইপাই পাইথন দোভাষীর ক্ষেত্রেও সমানভাবে প্রযোজ্য তবে তারা তাদের প্রয়োগ বাস্তবায়ন পরিবর্তন করে, পরীক্ষায় আরও বেশি স্বাধীনতার সুযোগ দিয়ে পারফরম্যান্স উন্নতি করতে পারে (জিসি বাগ প্রবর্তন বা পরিবর্তনগুলি মোকাবেলায় জেআইটি সংকলক আপডেট করার বিষয়ে চিন্তা না করে)। এর অর্থ হ'ল তারা যখন পাইথন 3 দোভাষীকে বাস্তবায়িত করতে পারে তখন এটি স্বয়ংক্রিয়ভাবে একই সুবিধা পাবে। এবং পাইপাই কাঠামোর সাথে লিখিত অন্য কোনও দোভাষী (যার মধ্যে পোলিশের বিভিন্ন ধরণের সংখ্যা রয়েছে)। এবং পাইপাই ফ্রেমওয়ার্ক ব্যবহার করে সমস্ত দোভাষী তাদের ফ্রেমওয়ার্ক দ্বারা সমর্থিত সমস্ত প্ল্যাটফর্মগুলি স্বয়ংক্রিয়ভাবে সমর্থন করে।

সুতরাং পাইপাই প্রকল্পের আসল উপকারটি হ'ল গতিশীল ভাষার জন্য দক্ষ প্ল্যাটফর্ম-স্বতন্ত্র অনুবাদক বাস্তবায়নের সমস্ত অংশ পৃথক করে (যত বেশি সম্ভব) আলাদা করা। এবং তারপরে একটি স্থানে সেগুলির একটি ভাল বাস্তবায়ন নিয়ে আসুন, যা বহু দোভাষীকে আবার ব্যবহার করা যেতে পারে। এটি "আমার পাইথন প্রোগ্রামটি এখন দ্রুত চলছে" এর মতো তাৎক্ষণিক জয় নয়, তবে এটি ভবিষ্যতের জন্য দুর্দান্ত সম্ভাবনা।

এবং এটি আপনার পাইথন প্রোগ্রামটি দ্রুত চালাতে পারে (সম্ভবত)।


4
আমি পার্থক্য :( অনুসরণ couldnt
polvoazul

37
একটি মধ্যে পার্থক্য @polvoazul অপ্টিমাইজ ভাষা বাস্তবায়ন ও একটি সর্বোচ্চকরন এক? ঠিক আছে, যখন আমি বলি সিপিথন একটি ভাল অনুকূলিতকরণের বাস্তবায়ন, তখন আমার অর্থ হ'ল বিকাশকারীরা নিজেই ইন্টারপ্রেটারের অভ্যন্তরীণ অ্যালগরিদমগুলি তৈরি করার চেষ্টা করেন এবং বিল্টিন ডেটা স্ট্রাকচারগুলি দক্ষতার সাথে চালিত হয়। ওটিওএইচ, একটি অনুকূলকরণ বাস্তবায়ন শেষ ব্যবহারকারীদের কোডটি বিশ্লেষণ করবে এবং আরও কার্যকরভাবে সম্পাদন করার জন্য এটিকে রূপান্তর করার উপায়গুলি বের করার চেষ্টা করবে।
বেন

23

পাইপাই পাইথনে প্রয়োগ করা হয় তবে এটি ফ্লাইতে নেটিভ কোড উত্পন্ন করতে একটি জেআইটি সংকলক প্রয়োগ করে।

পাইথনের শীর্ষে পাইপাই প্রয়োগ করার কারণ সম্ভবত এটি খুব উত্পাদনশীল ভাষা, বিশেষত যেহেতু জেআইটি সংকলক হোস্ট ভাষার অভিনয়কে কিছুটা অপ্রাসঙ্গিক করে তোলে।


জেআইটি কি পাইপির মতো একই স্তরে চলছে পাইথন কোড উত্পন্ন করে, বা পাইথন বাস্তবায়ন পাইপাইয়ের যে স্তরের পিআইপি চলছে সেই স্তরে চলমান আসল নেটিভ কোড তৈরি করে?
এডমন্ড

3
আসল নেটিভ কোড ( এখানে দেখুন ); সুনির্দিষ্ট হতে 32-বিট x86 কোড।
মার্সেলো ক্যান্টোস

11

পাইপাই সীমাবদ্ধ পাইথনে লেখা আছে। এটি যতটা আমি জানি সিপিথন দোভাষী এর উপরে চলে না। সীমাবদ্ধ পাইথন পাইথন ভাষার একটি উপসেট। আফাইক, পাইপাই ইন্টারপ্রেটারটি মেশিন কোডে সংকলিত হয়, তাই ইনস্টল করার সময় এটি রানটাইম সময়ে পাইথন ইন্টারপ্রেটার ব্যবহার করে না।

কোডটি কার্যকর করার সময় আপনার প্রশ্নটি প্রত্যাশা করে যে পাইপাই ইন্টারপ্রেটার সিপিথনের উপরে চলছে। সম্পাদনা: হ্যাঁ, পাইপাই ব্যবহার করার জন্য আপনি প্রথমে পাইপাই পাইথন কোডটি সিতে অনুবাদ করেন এবং জিসিসি দিয়ে তৈরি করেন, জেভিএম বাইট কোড, অথবা নেট সি এল এল কোডে। শুরু করা দেখুন


8
পাইপাই সিপিথনের শীর্ষে চলবে তবে এই মোডে এটি যে গতি অর্জন করতে চায় তা সরবরাহ করে না। :-) কোডস্পেক.এন.পি.পি.
ফ্র্যাঙ্ক ভি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.