আপনি বিশেষ করে পাইথন চাইছেন তা বিবেচনা করে আমি আপনার প্রশ্নের উত্তর দেওয়ার চেষ্টা করব। আমি সিমুলেশন সমস্যা মোকাবেলার নিজস্ব পদ্ধতিটি বর্ণনা করব। দ্রুত সিমুলেশনগুলির কৌশলগুলি এই বিবরণে দেওয়া হয়েছে।
প্রথমত, আমি পাইথনে নতুন সিমুলেশনগুলির প্রোটোটাইপ করি। অবশ্যই, আমি যতটা সম্ভব NumPy এবং SciPy ব্যবহার করার চেষ্টা করি। NumPy সংখ্যার সিমুলেশনের জন্য একটি উপযুক্ত অ্যারে ডেটা প্রকার সরবরাহ করে, সায়পাই NumPy অ্যারেগুলির সাথে কাজ করে একটি বিস্তৃত সংখ্যাসূচক রুটিন সরবরাহ করে।
প্রোটোটাইপগুলি কম বা কম কাজ করার পরে, আমি প্রোগ্রাম বা স্ক্রিপ্টের কোন অংশটি বাধা learn তা জানতে চেষ্টা করি। এর জন্য আদর্শ প্রার্থী রয়েছে:
- পাইথনের লুপগুলি ধীর। খুব ধীর.
- পাইথন যেমন হাঁসের টাইপিং ব্যবহার করে , কল করার কাজগুলি ধীর হতে পারে।
সমস্ত রান সময় কোথায় ব্যয় হয় তা শিখতে আমি একটি সহজ প্রোফাইলিং কৌশল ব্যবহার করি। আইপিথন শেলটি ব্যবহার করে (যা আমি যথেষ্ট প্রস্তাব করতে পারি না), আমি আমার স্ক্রিপ্টটি দিয়ে চালাচ্ছি
%timeit script.py
এই "ম্যাজিক কমান্ড" আপনার জন্য প্রোফাইলিং ( টাইমাইট ব্যবহার করে ) করবে এবং একবারে আপনার স্ক্রিপ্টটি বন্ধ হয়ে যাওয়ার সাথে সাথে আপনাকে একটি তালিকা উপস্থাপন করবে। আপনার কোডটি খুব ধীরে কোথায় তা খুঁজে পেতে এই তালিকাটি ব্যবহার করুন।
একবার আপনি যে অংশগুলিকে গতিযুক্ত করা দরকার সেগুলি পেরেক দিয়ে দেওয়ার পরে আপনি সংকলিত ভাষা ব্যবহারের কথা বিবেচনা করতে পারেন। আমি দুটি সমাধান নির্দেশ করব।
প্রথমত, সেখানে সিথন ভাষা রয়েছে। সাইথন হ'ল পাইথনের মতো প্রোগ্রামিংয়ের ভাষা (বাস্তবে পাইথন কোডটিও প্রায়শই বৈধ পাইথন কোডের হয়ে থাকে); তবে সাইথন সংকলক সাইথন ফাইলগুলিকে সি কোডে রূপান্তর করে, যা পাইথন থেকে ব্যবহারযোগ্য মডিউলে সংকলিত হতে পারে। সাইথন নুমপি অ্যারে বোঝে। দুটি উপায় রয়েছে যেখানে সিথন ব্যবহার আপনাকে সহায়তা করতে পারে: প্রথমত, আপনি ডেটা প্রকারগুলি প্রবর্তন করতে পারেন। এটি ফাংশন কলগুলিকে গতি বাড়িয়ে তুলবে। এছাড়াও, আপনি যদি অ্যারেগুলিতে পুনরাবৃত্তি করেন তবে আপনার লুপটি দ্রুত চলবে (আসলে, আপনি যদি ডামি ভেরিয়েবল এবং অ্যারে উভয়ই টাইপ করেন তবে আপনি একটি সরল সি লুপ পাবেন!)। দ্বিতীয়ত, আমার পরীক্ষায় এমনকি টাইপ করা স্ক্রিপ্টগুলি কিছুটা দ্রুত চলতে পারে কারণ এটি ব্যাখ্যা করার পরিবর্তে সেগুলি সংকলিত হয়।
অন্য সংকলিত ভাষা যা আপনার জন্য কার্যকর হবে তা হ'ল ফোর্টরান। পাইথনের সাথে ফোর্টরান ব্যবহারের বিভিন্ন উপায় রয়েছে ( f2py , Fortwrap , Cython )। আমার কাছে ব্যক্তিগতভাবে এফ 2 পিপি সবচেয়ে সহজ উপায় বলে মনে হচ্ছে, আমি দ্রুত এটি কী করে তা বর্ণনা করব। f2py পাইথন মডিউলগুলিতে ফোর্টরান কোড সংকলন করতে পারে। এটি আপনাকে পাইথন স্পেস থেকে ইনপুট এবং আউটপুট ভেরিয়েবল হিসাবে NumPy অ্যারে ব্যবহার করার অনুমতি দেবে। ফোর্টরান স্পেসে এগুলি হবে সাধারণ ফোর্টরান অ্যারে। আপনি সম্পূর্ণ ফোর্টরান গতিতে তাদের উপর পরিচালনা করতে পারেন।
ব্যক্তিগতভাবে, আমি সিথন ব্যবহার করি যেখানে ফাংশন কলগুলির সংখ্যাটি বাধা the লুপ-ভারী স্টাফের জন্য, আমি f2py পছন্দ করি (সম্ভবত কারণ আমার দৃ Fort় ফোর্টরান পটভূমি রয়েছে)।
ফরট্রানের অতিরিক্ত নোটে: আধুনিক ফোর্টরান নুমপির সাথে খুব অনুরূপ পড়েন এবং লেখেন - বাক্য গঠনটি খুব কাছে। এটি NumPy কোডটিকে ফোর্টরান কোডে রূপান্তর করা সহজ করে তোলে।
মনে রাখবেন যে সাইথন এবং এফ 2 পিপি উভয়ই কোনও উপায়ে সমান্তরালতা সমর্থন করে। Cython জন্য, আপনি সাহায্য পাবেন এখানে , যেহেতু ফোরট্রান জন্য, যেমন মান কৌশল আছে ফলে, OpenMP -র বা MPI। তদুপরি, এমপিআইয়ের জন্য পি ইথন মোড়কও রয়েছে । ব্যক্তিগতভাবে, আমি পাইথন স্তরের এমপিআই 4পি পাশাপাশি ফোরট্রানে ওপেনএমপি ব্যবহার করি।
আমাকে কিছুটা সাহিত্যের প্রস্তাব দেওয়া যাক: এইচ.পি.-র দ্বারা পাইপথন স্ক্রিপ্টিং জন্য কম্পিউটেশনাল সায়েন্স বইটি- পাইথনকে পাইথনকে আরও দ্রুততর করার কৌশল হিসাবে ল্যাংট্যাঞ্জেন হ'ল পাইথনের একটি দুর্দান্ত সংস্থান। দুর্ভাগ্যক্রমে, আফার, এটি সিথনের কোনও কিছুই উল্লেখ করে না। আমি দ্বিতীয় সংস্থান হিসাবে আপনি এই স্লাইডগুলি তাকান করতে পারেন । এগুলি আমি এই পোস্টে উল্লিখিত সমস্ত কিছুর উদাহরণ দিয়েছি ( এখানে কোড এবং উত্সগুলিও দেখুন )। ইন্টারনেটে আরও অনেকগুলি ভাল স্লাইড রয়েছে।
আপনার যদি আরও নির্দিষ্ট প্রশ্ন থাকে তবে আমরা সবাই সাহায্য করে খুশি!