পাইথন ভাষাটি বহু-কোর সিপিইউগুলির পূর্বাভাস দেয়, তাই এগুলি দেশীয়ভাবে ব্যবহার করে না এমনটি মোটেই আলাদা নয়।
অতিরিক্তভাবে, সমস্ত প্রোগ্রাম একাধিক কোর থেকে লাভ করতে পারে না। পদক্ষেপে সম্পন্ন একটি গণনা, যেখানে পরবর্তী পদক্ষেপটি আগের পদক্ষেপের ফলাফলের উপর নির্ভর করে, আরও বেশি কোর ব্যবহার করে দ্রুত হবে না। যে সমস্যাগুলি ভেক্টরাইজ করা যায় (একই পরিমাণে ডেটা বড় অ্যারে প্রয়োগ করা হয়) একাধিক কোর ব্যবহার করা অপেক্ষাকৃত সহজ করা যায় কারণ স্বতন্ত্র গণনাগুলি স্বাধীন।
যখন আপনি প্রচুর গণনা করছেন, তখন আমি ধরে নিচ্ছি যে আপনি অল্প ব্যবহার করছেন ? যদি না হয়, এটি পরীক্ষা করে দেখুন। এটি সি তে লিখিত একটি এক্সটেনশন যা এটি আটলাসের মতো অনুকূলিত লিনিয়ার বীজগণিত গ্রন্থাগারগুলি ব্যবহার করতে পারে। এটি স্ট্যান্ডার্ড পাইথনের তুলনায় উল্লেখযোগ্যভাবে গণনাগুলিকে গতি বাড়িয়ে তুলতে পারে।
এটি বলে, অজগর সহ একাধিক কোর ব্যবহারের বিভিন্ন উপায় রয়েছে।
- অন্তর্নির্মিত
multiprocessing
মডিউল হয়। multiprocessing.Pool
বর্গ সঙ্গে বহু সিপিইউ জুড়ে vectorization প্রদান করে map()
এবং সংশ্লিষ্ট পদ্ধতি। যদিও এখানে একটি বাণিজ্য বন্ধ রয়েছে। যদি আপনাকে প্রক্রিয়াগুলির মধ্যে প্রচুর পরিমাণে ডেটা যোগাযোগ করতে হয় তবে সেই ওভারহেড একাধিক কোরের সুবিধাকে অস্বীকার করতে পারে।
- নম্পির একটি উপযুক্ত বিল্ড ব্যবহার করুন। যদি ন্পিটি একটি মাল্টিথ্রিডিং এ্যাটলাস লাইব্রেরি দিয়ে নির্মিত হয় তবে এটি বড় সমস্যাগুলির তুলনায় দ্রুত হবে।
- নিউমেক্সপ্র , প্যারালাল পাইথন , কোরপি বা কোপেনহেগেন ভেক্টর বাইট কোডের মতো এক্সটেনশন মডিউলগুলি ব্যবহার করুন ।
নোট করুন যে threading
মডিউলটি এই ক্ষেত্রে সমস্ত কার্যকর নয়। মেমরি পরিচালনা সহজ রাখার জন্য, গ্লোবাল ইন্টারপ্রেটার লক ("জিআইএল") প্রয়োগ করে যে একবারে কেবল একটি থ্রেড পাইথন বাইটকোড চালানো যেতে পারে। যদিও নাম্পির মতো বাহ্যিক মডিউলগুলি অভ্যন্তরীণভাবে একাধিক থ্রেড ব্যবহার করতে পারে।