পাইথনে লিখিত কোডটি গতি বাড়ানোর জন্য কোন সরঞ্জাম বা পদ্ধতি উপলব্ধ?


29

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

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

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


আমি এই প্রশ্নের একটি পাইথন-সেপিসিফিক উত্তর দিয়েছি : scicomp.stackexchange.com/questions/2429/… আমি মনে করি সেখানকার ইঙ্গিতগুলি এবং লিঙ্কগুলি আপনার জন্য সহায়ক হবে।
অ্যালেক্সই

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

1
এখানে ভাল উত্তর ছাড়াও, এই লিঙ্কটি একবার দেখুন ।
মাইক ডুনলাভে

উত্তর:


40

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

আপনি যদি কেবলমাত্র মাদুর- ভেক পণ্যগুলিতে আগ্রহী হন তবে আমি scipy.sparse সুপারিশ করব

প্রোফাইলিংয়ের জন্য পাইথন সরঞ্জাম

প্রোফাইল এবং সিপ্রোফাইল মডিউল : এই মডিউলগুলি আপনাকে আপনার স্ট্যান্ডার্ড রান সময় বিশ্লেষণ এবং ফাংশন কল স্ট্যাক দেবে। তাদের পরিসংখ্যানগুলি সংরক্ষণ এবং pstats মডিউলটি ব্যবহার করে আপনি বেশ কয়েকটি উপায়ে ডেটা দেখতে পারেন তা বেশ সুন্দর।

কার্নপ্রাফ : লাইন কোড টাইমিংয়ের মাধ্যমে লাইনের মতো কাজ করার জন্য এই সরঞ্জামটি অনেক রুটিন একসাথে রাখে

মেমরি_প্রফিলার : এই সরঞ্জামটি আপনার কোডের লাইন মেমরি মেমরি ফুট মুদ্রণ করে produces

আইপিথন টাইমার :timeitদ্রুত ইন্টারেক্টিভ উপায়ে ফাংশনগুলির পার্থক্য দেখার জন্য ফাংশনটি বেশ দুর্দান্ত।

পাইথনের গতি বাড়ছে

সিথন : পাইথন হ'ল পাইথনে কয়েকটি ফাংশন গ্রহণ এবং দ্রুত কোড পাওয়ার দ্রুততম উপায়। আপনি পাইথনের সাইথন বৈকল্পিকের সাথে ফাংশনটি সাজাতে পারেন এবং এটি সি কোড উত্পন্ন করে। এটি খুব রক্ষণাবেক্ষণযোগ্য এবং সি / সি ++ / ফোর্টরান-এ অন্য হাতে লিখিত কোডের সাথেও লিঙ্ক করতে পারে। এটি এখন পর্যন্ত পছন্দসই সরঞ্জাম।

সিটি টাইপস : সিটিপস আপনাকে নিজের ফাংশনগুলি সিতে লিখতে অনুমতি দেবে এবং তারপরে কোডটির সাধারণ সজ্জা দিয়ে দ্রুত এগুলি মুড়িয়ে দেবে। এটি পাইওবজেক্টগুলি থেকে castালাইয়ের সমস্ত ব্যথা এবং সি ফাংশনটি কল করার জন্য গিল পরিচালনার সমস্ত ব্যয় পরিচালনা করে।

সি তে আপনার কোড লেখার জন্য অন্যান্য পদ্ধতির উপস্থিতি রয়েছে তবে তারা সি / সি ++ গ্রন্থাগার নেওয়ার জন্য এবং পাইথনে এটি মোড়ানোর জন্য কিছুটা বেশি।

পাইথন-শুধুমাত্র পন্থা

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

ন্যালি : অ্যারেগুলির স্টেয়ার্ড অপারেশনের জন্য খুব দ্রুত একটি সংক্রামক অ্যারে

numexpr : একটি নমপি অ্যারে এক্সপ্রেশন অপ্টিমাইজার। এটি নলপদী অ্যারে এক্সপ্রেশনগুলি মাল্টিথ্রেডিংয়ের অনুমতি দেয় এবং পাইথন ইন্টারপ্রেটারের বিধিনিষেধের কারণে নিম্পি তৈরি অসংখ্য অস্থায়ী পদক্ষেপগুলি থেকে মুক্তি পান।

ব্লিস্ট : তালিকার একটি অভ্যন্তরীণ নোডগুলি সন্নিবেশ, সূচীকরণ এবং সরানোর জন্য খুব দ্রুত একটি তালিকার একটি বি-ট্রি বাস্তবায়ন

পান্ডাস : অ্যারেগুলিতে ডেটা ফ্রেম (বা টেবিলগুলি) খুব দ্রুত বিশ্লেষণ।

পিটবেবলস : দ্রুত কাঠামোগত শ্রেণিবদ্ধ টেবিলগুলি ( এইচডিএফ 5 এর মতো), বিশেষত মূল গণনার বাইরে এবং বড় ডেটার অনুসন্ধানগুলির জন্য ভাল।


3
ফোর্টরান রুটিনগুলিতেও আপনি কল করতে সিটিপ ব্যবহার করতে পারেন।
ম্যাথু এমমেট


মোড়ানোর কোড সম্পর্কে কথা বলছি, f2py সম্পর্কে কী?
অ্যাস্ট্রজুয়ানলু

f2py একটি দুর্দান্ত সরঞ্জাম এবং এটি সম্প্রদায়ের অনেকের দ্বারা ব্যবহৃত। fwrap একটি সাম্প্রতিক প্রতিস্থাপন হিসাবে f2py তার বয়স দেখায় তবে এটি সত্যই সম্পূর্ণ নয়।
অটারেল

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

7

প্রথমত, যদি কোনও সি বা ফোর্টরান বাস্তবায়ন উপলব্ধ থাকে (ম্যাটল্যাব এমএক্স ফাংশন?), আপনি পাইথন র‌্যাপারটি লেখেন না কেন?

আপনি যদি নিজের প্রয়োগটি কেবল একটি র‍্যাপারই না চান তবে আমি রৈখিক বীজগণিত সামগ্রীর জন্য ন্যাপি মডিউলটি ব্যবহার করার জন্য দৃ strongly়ভাবে পরামর্শ দেব। এটি একটি অনুকূলিত ব্লেসের সাথে সংযুক্ত রয়েছে কিনা তা নিশ্চিত করুন (যেমন আটলাস, গোটোব্লাস, ইউবিএলএস, ইন্টেল এমকেএল, ...)। এবং সিথন বা তাঁত ব্যবহার করুন। একটি ভাল ভূমিকা এবং মাপদণ্ডের জন্য এই পারফরম্যান্স পাইথন নিবন্ধটি পড়ুন । ট্র্যাভিস অলিফ্যান্ট (নম্পি-গুরু) এর সৌজন্যে এই নিবন্ধটির বিভিন্ন বাস্তবায়ন এখানে ডাউনলোডের জন্য উপলব্ধ ।

শুভকামনা।


পারফরম্যান্স পাইথন নিবন্ধটি কিছুটা তারিখযুক্ত বলে মনে হচ্ছে, এটিতে নিউমেক্সপ্রের মতো উপলব্ধ কয়েকটি নতুন সরঞ্জামের উল্লেখ নেই।
অরন আহমদিয়া

আমি প্রকৃতপক্ষে numexpr উপেক্ষা করেছি। একই স্তরের বেঞ্চমার্কটি নিউমেক্সপ্রের সাথে চালানো ভাল লাগবে ...
গার্টভিডিই

হয় scipy.weaveএখনো ব্যবহার করা হয় এবং উন্নত? দেখে মনে হচ্ছে পারফরম্যান্স পাইথন নিবন্ধটি দেখায় যে এটি ব্যবহারে দ্রুত হতে পারে এবং গতিতে বেশ ভাল উন্নতি করতে পারে তবে আমি নিবন্ধটির বাইরে উল্লেখ করা খুব কমই দেখেছি।
কেন

@ কেন: স্কিপি.উইভ, যতদূর আমি জানি, সক্রিয় বিকাশের অধীনে আর নেই। এটি পশ্চাদপদ সামঞ্জস্যের জন্য রাখা হয়েছে তবে নতুন প্রকল্পগুলি সিথন ব্যবহার করতে উত্সাহিত করা হয়।
GertVdE

গোটোব্ল্যাএলএস এবং নুমপি / সায়্পাইয়ের জন্য দেখুন der-schnorz.de/2012/06/optimised-linear-algebra-and-numpyscipy
AlexE

4

মূলত আমি অন্যান্য উত্তরের সাথে একমত। দ্রুত সংখ্যা সংক্রান্ত pythonকোডের জন্য সেরা বিকল্পগুলি

  • বিশেষায়িত লাইব্রেরি ব্যবহার করুন numpy
  • আপনার বিদ্যমান কোডটি pythonমোড়ক করুন যাতে আপনার প্রোগ্রামটি সরাসরি এটি কল করতে পারে

তবে আপনি যদি স্ক্র্যাচ থেকে পুরো অ্যালগরিদমটি প্রোগ্রাম করতে চান (আমি উদ্ধৃতি: "আমি কেবল কাঁচা পাইথন ব্যবহার করি") তবে আপনি http://pypy.org/ একটি জেআইটি (জাস্ট ইন টাইম) বাস্তবায়ন বিবেচনা করতে পারেন python। আমি এটি আমার প্রকল্পের জন্য ব্যবহার করতে পারিনি (কারণ এটি নির্ভর করে numpyএবং pypyছেলেরা আন্তরিকভাবে এটি সমর্থন করার জন্য কাজ করছে) তবে বেঞ্চমার্কগুলি বেশ চিত্তাকর্ষক ( http://speed.pypy.org/ )


1

উপরের লিঙ্কগুলির কয়েকটি পুরানো, অতএব এখানে দেখুন:

http://wiki.scipy.org/PerformanceTips

http://wiki.scipy.org/PerformancePython

কিছু ধারণা:

নম্পি, নুমবা, সিথন, নুমেক্সপ্রপ্র, থানো, টেনসরফ্লো, এফ 2 পিপি, সিপিথন সি এপিআই, পাইপি, সিএফআই, পাইথ্রান, নুইকা, সুইগ, বুস্ট.পিথন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.