আমি কি রাস্পবেরি পাই এর সিপিইউর 4 টি কোর ব্যবহার করতে পারি?


11

আমি ভাবছিলাম যে সিপিইউর সমস্ত 100% "চালু" করার কোনও সহজ উপায় আছে যাতে আমি প্রক্রিয়াগুলি দ্রুত চালাতে পারি (যেমন পাইথনের গণনা)।

1) এটি কি সম্ভব?

২) স্বাভাবিক অবস্থায় ফিরে আসার সহজ উপায় কি আছে?

3) ইচ্ছা করলে কম সিপিইউ ব্যবহার করার কোনও উপায় আছে কি?

আমি একটি কমান্ড লাইনের মিথস্ক্রিয়া সম্পর্কে চিন্তা করছি:

pi@raspberry:~ $ sudo turnOnFourCores python run.py


1
সংক্ষিপ্ত উত্তরটি হ'ল না
স্টিভ রবিলার্ড

16
দীর্ঘ উত্তরটি "যদি এটি সাধারণ ছিল তবে এটি ডিফল্ট হবে"
শ্যাডো

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

13
পরিষ্কার করার জন্য, আমি মনে করি যে মাল্টি-কোর সিপিইউগুলি কীভাবে কাজ করে ওপির একটি ভুল বোঝাবুঝি রয়েছে এবং আপনার উত্তরগুলি কেবল তাদের ভুল বোঝাবুঝিকে শক্তিশালী করে।
Sohcahtoa82

6
পাইথন প্রোগ্রামটি দ্রুত করার সহজতম উপায় হ'ল সংকলিত ভাষায় পুনরায় লেখার জন্য (বা কমপক্ষে সময়কে সমালোচনামূলক কাজগুলি এসি মডিউল ব্যবহারের জন্য তৈরি করা)।
মিলিওয়েজ

উত্তর:


21

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

হালনাগাদ:

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


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

4
@ ব্রিক কেবল স্পষ্ট করে বলতে গেলে, একটি সংকলিত ভাষা অবশ্যই সঠিকভাবে প্রক্রিয়াজাতকরণের বহুগঠনের জন্য প্রয়োজন নয় for হেক, এমনকি পাইথনের জিআইএল একটি বাস্তবায়ন বিশদ (জনপ্রিয় সিপথনের জন্য মঞ্জুরিপ্রাপ্ত) - অন্য পাইথনের দোভাষী রয়েছে যা সুখে মাল্টিথ্রেড করবে, যেমন জাইথন ​​এবং আয়রন পাইথন।
বব

4
বিভ্রান্তির যোগ করা হচ্ছে, পাইথন হয় কম্পাইল; সিপিথনের ক্ষেত্রে এটি সিপিথন বাইকোডের সাথে সংকলন করে যা সিপিথন ভিএম-তে চালিত হয়। জাইথনের জন্য, এটি জাভা বাইটকোডে সংকলিত হয়েছে যা জেভিএম-তে চালিত হয়। এবং অবশেষে, আয়রন পাইথন সিআইএলকে সংকলন করে, যা। নেট রানটাইমকে লক্ষ্য করে। সুতরাং, পারফরম্যান্সের জন্য "একটি সংকলিত ভাষায় যাওয়া" আসলেই
অর্থবোধ

যে কোনও কম্পিউটার যখন এটি করতে পারে তখন এর সমস্তগুলি ব্যবহার করার চেষ্টা করবে। সত্যই নয়, এটি কেবল তখনই সমস্ত কর ব্যবহার করবে (বা অন্য কিছু করবে) যখন এটি বলা হবে । এই পার্থক্যটি অভিজ্ঞদের কাছে সুস্পষ্ট বা এমনকি পৃষ্ঠপোষকতা বলে মনে হতে পারে, তবে এটি মনে হয় যে ওপিকে এটি স্বয়ংক্রিয়ভাবে ঘটে না বলে প্রশংসা করা দরকার।
নেকোমেটিক

13

আমি ভাবছিলাম যে সিপিইউর সমস্ত 100% "চালু" করার কোনও সহজ উপায় আছে যাতে আমি প্রক্রিয়াগুলি দ্রুত চালাতে পারি (যেমন পাইথনের গণনা)।

আমি মনে করি আপনি বোঝাচ্ছেন যে অর্থে নয়। এটি পাই সম্পর্কিত নির্দিষ্ট সমস্যা নয়, এটি লজিক্যাল সীমাবদ্ধতা।

সমস্ত নিজেরাই কম্পিউটারগুলির বর্তমানে একক থ্রেড হিসাবে চলমান একটি প্রক্রিয়া পরিবর্তে সমান্তরালে চালানো যেতে পারে তা নির্ধারণ করার মতো বেশি ক্ষমতা নেই । মনে রাখবেন যে এই মুহুর্তে যখন তাদের এই ক্ষমতা থাকতে পারে তখন কম্পিউটার প্রোগ্রামারগুলির প্রয়োজন হবে না, কারণ এটি করতে পারে এমন একটি কম্পিউটার সিস্টেম পাশাপাশি নিজস্ব কোড লিখতে পারে ।

নিম্নলিখিত সহজ গণিত প্রকাশ বিবেচনা করুন:

(4 + 2) * 17 / (3 + 6)

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

#1 a) 4 + 2 b) 6 * 17 c) 102 / 9
#2 a) 3 + 6

থ্রেড # 2 3 + 6 = 9 গণনা করে অবদান রেখেছে, থ্রেড # 1 দ্বারা সি ধাপে ব্যবহৃত হয়েছে, এটি একটি পদক্ষেপ সংরক্ষণ করে। তবে এটি সমান্তরালতা কার্যকরভাবে এখানে পাবেন। থ্রেড # 2 যখন ১ 1 / ৯ গণনা করতে পারে, যখন # 1 করছে 6 * 17, এটি করা অর্থহীন, কারণ আপনার কাছে এখন একই লক্ষ্যের দুটি পৃথক পথ রয়েছে যা পুনরায় সংযুক্ত করা যায় না। অর্থাৎ, # 2 কাজ চালিয়ে যেতে পারে:

b) 17 / 9 c) 1.888 * 6

এবং থ্রেড # 1 (11.333) হিসাবে একই ফলাফলটি শেষ করুন, তবে তারা একে অপরকে ধাপ A ছাড়িয়েও সহায়তা করেনি, সুতরাং তাদের দু'জনের এই লক্ষ্যটি অনুসরণ করা সময় অপচয় করা।

(দ্রষ্টব্য যে এই উদাহরণটি আক্ষরিক নয়; এটি একটি যৌক্তিক নীতি প্রদর্শন করার ইচ্ছা নিয়েছে user ব্যবহারকারীর কোডে যে কাজগুলিতে থ্রেড করা হয়েছে সে পরিমাণটি অনেক বড় তবে আপনার মাল্টি-থ্রেড প্রোগ্রামিংয়ের ক্ষেত্রে সত্যিকারের পাঠের দরকার নেই) ধারণাটি এখানে ধরুন))

একাধিক প্রসেসরের অন্বেষণ করার জন্য কোডটি কোডের প্রয়োজন যা এটি করার জন্য লেখা হয়েছিল। আপনি কেবল কিছু নিতে এবং বলতে পারবেন না, "ওহ সমস্ত 4 টি কর ব্যবহার করুন এবং এটি দ্রুত করুন!"। যা হবে তা নয়। কথাটি, (..or অধিকাংশ) সমস্যা ও কাজগুলো অনেক পদক্ষেপ জড়িত না পারেন, সমান্তরাল ঘটতে, তারা ক্রমানুসারে ঘটতে হবে।


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


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

4
@ ব্রিক "আপনি পৃথক পৃথক পৃথক গাণিতিক ক্রিয়াকলাপের স্তরে সমান্তরাল করবেন না।" -> অবশ্যই আপনি তা করেন না তবে আমি আরও স্পষ্ট করে বলব যে এটি বাদ্য এবং বাদ্টের মাল্টি থ্রেডেড প্রোগ্রামিংয়ের পাঠ নয় not
স্বর্ণলোকস

4
উদাহরণ হিসাবে আপনি যে গণনাটি ব্যবহার করেন তাতে সমান্তরালতা এতই স্থানীয়করণ করা হয় যে এটি একটি প্রোগ্রামে নির্দেশনা-স্তরের সমান্তরালতা তৈরি করবে যা এটির গণনা করে, এবং সিপিইউগুলি অফ-অর্ডার এক্সিকিউশন সহ তাদের নিজেরাই সেই সমান্তরালতা কাজে লাগাতে পারে
পিটার

2
RPi3 একটি ইন-অর্ডার 2-চওড়া superscalar ব্যবহার en.wikipedia.org/wiki/ARM_Cortex-A53 সাবধান নির্দেশ সিডিউলিং সঙ্গে, তাই একটি কম্পাইলার এখনও দুটি রেখে ILP কাজে লাগান করতে addনির্দেশাবলী পরবর্তী প্রতিটি অন্যান্য যাতে তারা একই উভয় চালাতে পারেন ঘড়ি চক্র। নিম্নলিখিত গুণিত এবং ভাগ বিভাজন ডেটা নির্ভরতা দ্বারা ক্রমিক করা হবে, যদিও, আপনি উল্লেখ হিসাবে।
পিটার

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

7

পাইথনের জন্য নেই

অন্যান্য ব্যক্তিরা আপনাকে থ্রেডিংয়ের দিকে নজর দেওয়ার পরামর্শ দিচ্ছেন, যা বেশিরভাগ ভাষার জন্য বৈধ উত্তর, তবে আপনি যে পাইথন ব্যবহার করছেন তা তারা বিবেচনায় নেয় নি।

পাইথন জিআইএল আপনাকে কার্যকরভাবে একাধিক কোর ব্যবহার করতে দেয় না।


4
জিআইএল সমস্ত 4 টি কোর ব্যবহার করা কিছুটা আরও কঠিন করে তোলে । কোনওভাবেই এটিকে অসম্ভব করে তোলে না, এমনকি সত্যই এটি চ্যালেঞ্জিংও বটে।
ভুয়া নাম

5

একাধিক কোর ব্যবহারের জন্য ওএসের সাথে সুস্পষ্টভাবে থ্রেড-স্তরের সমান্তরালতা প্রকাশ করা প্রয়োজন , যার জন্য সাধারণত প্রোগ্রামারকে একটি বহু-থ্রেডযুক্ত প্রোগ্রাম লেখার প্রয়োজন হয়। (বা একক থ্রেডড প্রোগ্রাম একাধিক বার বিভিন্ন ইনপুটগুলিতে চালনার জন্য যেমন সংকলন করা make -j4)

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

#pragma omp parallel for
for(int i = 0; i < 1000000; ++i)
{
   A[i] = B[i] * constant + C[i];
}

তবে এখনও, আপনি যখন প্রোগ্রামটি লিখেছেন বা সংকলন করেছেন তখন এটি ঘটতে হবে। একক থ্রেডেড প্রোগ্রামকে গতিময় করার জন্য বর্তমান হার্ডওয়্যার এবং ওএসের একাধিক কোর ব্যবহার করার উপায় নেই।


সম্পর্কিত: একক থ্রেড একাধিক কোরে কীভাবে চলবে? : উত্তর: তারা দেয় না। তবে অন্যান্য ধরণের সমান্তরালতা রয়েছে যেমন নির্দেশনা-স্তরের সমান্তরালতা যা একক সিপিইউ কোর একবারে এক নির্দেশের চেয়ে একক থ্রেড দ্রুত চালানোর জন্য সন্ধান করে এবং ব্যবহার করে।

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

নোট করুন যে RPI3 ক্রমযুক্ত এআরএম কর্টেক্স-এ 53 সিপিইউ কোর ব্যবহার করে । প্রতিটি কোর 2-প্রশস্ত সুপারস্যাকালার (আইএলপি অনুমতি দেয় বলে ঘড়ি প্রতি 2 টি নির্দেশনা) তবে আরও নির্দেশাবলীর স্তরের সমান্তরালতা এবং আড়ালকরণকে আড়াল করার জন্য নির্দেশগুলি পুনরায় অর্ডার করতে পারে না।

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

এটি আদেশের বাইরে নির্দেশাবলী কার্যকর করতে পারে না, তবে সাবধানতার সাথে নির্দেশের আদেশের সাথে (সাধারণত একটি সংকলক দ্বারা) এটি এখনও কোনও নির্দেশের বিলম্বিকে আড়াল করতে পারে যা তার আউটপুট প্রস্তুত হতে একাধিক চক্র গ্রহণ করে। (উদাহরণস্বরূপ কোনও লোড এটি ক্যাশে বা এমনকি বহুগুণে আঘাত করলেও একাধিক চক্র গ্রহণ করবে, বনাম। পরবর্তী চক্রটি প্রস্তুত হওয়ার সাথে সাথে)। কৌশলটি হ'ল asm নির্দেশকে অর্ডার করা যাতে ফলাফল উত্পন্ন করে এবং এটি ব্যবহার করে এমন একটির মধ্যে একাধিক স্বতন্ত্র নির্দেশনা থাকে।

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


আপনার কোডগুলি আপনার পছন্দের চেয়ে ধীর গতিতে চললে এগুলি সমস্তই স্বল্প স্বাচ্ছন্দ্য। অবশ্যই সেখানে কর্টেক্স-A53 মধ্যে ফণা অধীন শীতল স্টাফ অনেক, কিন্তু শীতল স্টাফ একটি ফণা অধীন আছে কর্টেক্স-A57 , এবং এমনকি আরো (ঘড়ি প্রতি 3 নির্দেশাবলী পর্যন্ত আউট-অফ-অর্ডার এক্সিকিউশন মত) স্কাইলেকের মতো একটি বড় x86 সিপিইউ (ঘড়ির গতির পার্থক্য উল্লেখ না করা)।

আপনি কম্পিউটার-আর্কিটেকচার ক্লাসে শিখতেন এমন মূল এমআইপিএসের মতো https://en.wikedia.org/wiki/Classic_RISC_piplines এর তুলনায় কর্টেক্স-এ 53 দুর্দান্ত চমত্কার , তবে আধুনিক মান অনুসারে এটি বেশ স্বল্প-শেষ।


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

@ বিল্ক ন্যায্য কথা বলতে গেলে, সেই প্রসঙ্গে "প্রোগ্রাম" হ'ল javaনা myapp.jar, এবং এটি অবশ্যই একক থ্রেডযুক্ত নয়।
স্বর্ণলোকস

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

" বর্তমান হার্ডওয়্যার এবং ওএসের একক থ্রেডেড প্রোগ্রামকে গতিযুক্ত করার জন্য একাধিক কোর ব্যবহার করার কোনও উপায় নেই " "এবং এর সাথে সাথেই আপনি ব্যাখ্যা করবেন যে হার্ডওয়্যার কীভাবে সমান্তরালে নির্দেশাবলী কার্যকর করে।
থমাস ওয়েলার

3
@ থমাসওলার হ্যাঁ, তবে পিক প্রসেসর পাইপলাইনে একাধিক কোর ব্যবহার করা হয় না; এটি একটি কোর অন্তর্ভুক্ত, তবে এটি একাধিক নির্দেশের স্ট্রিমে কাজ করার অনুমতি দেয়। অর্থাৎ, এটি হল উপমা একটি ফর্ম, কিন্তু এটা নয় মাল্টি-কোর থ্রেডিং একটি ফর্ম।
স্বর্ণিলোক

4

সিপিইউগুলি এইভাবে কাজ করে না ...

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

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

আপনি যদি আরপিআইকে আরও বেশি কিছু করতে (এক্সিলার্টারে আরও চাপ দিন) তৈরি করেন তবে আপনি দেখতে পাবেন যে সিপিইউ ব্যবহারের চিত্রটি উপরে উঠবে। উদাহরণস্বরূপ, আপনি যখন yesটার্মিনাল উইন্ডোতে কমান্ডটি চালাবেন তখন সিপিইউ ব্যবহার দেখুন (মনে রাখবেন যে ctrl+cটার্মিনাল কমান্ডগুলি শেষ হয়)। এটি আপনার সিপিইউ 25% বাড়িয়ে দেবে কারণ এটি আপনার চারটি সিপিইউ কোরের একটিকে বাড়িয়ে তোলে।


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

3
আমি ব্রিকের সাথে একরকম একমত পোষণ করছি যে এটি এখানে বোঝানো হয়েছে যে যদি কোনও প্রসেসর 25% এ থাকে তবে এটি গ্যাস সংরক্ষণ করা বা গতির সীমা মেনে চলা;) বা ভদ্র হওয়া উচিত এবং হোগের সংস্থান নয়। আপনি এটি পরিষ্কার করে দিতে চাইতে পারেন যে এটি সাধারণত কারণ যে কোনও কাজই I / O এর জন্য অনেক সময় অপেক্ষা করে। যে বিষয়গুলি একক কোর চালাতে পারে সমস্ত উপায়। ব্যবহারকারীর ইন্টারফেসটিকে ব্যাহত করা থেকে (আদর্শগতভাবে) এটিকে কীভাবে আটকায় তা হ'ল সময় কাটা - তবে বাস্তবে, এটি একটি ছোট একক কোর মেশিনটিকে জ্যাম করা এখনও বেশ সহজ।
স্বর্ণলোকস

100% সিপিইউ ব্যবহারের ফলে সাধারণত দুর্বল ইউএক্স হয় না। এমনকি 1000% যথেষ্ট ভাল হতে পারে কারণ বেশিরভাগ প্রোগ্রামগুলি সিপিইউ দ্বারা সীমাবদ্ধ নয় তবে অন্যান্য কারণগুলি দ্বারা। কেবলমাত্র চূড়ান্ত সিপিইউ লোডের কারণে ধীর হয়ে ওঠে এমন প্রোগ্রামগুলি হ'ল সেই প্রোগ্রামগুলি যা আসলে সব সময় সিপিইউ ব্যবহার করে।
ওসকার স্কোগ

4

অন্যান্য উত্তরগুলি ভাল বিশদ দেয়, তবে আপনার প্রশ্নগুলি (গুলি) নির্দিষ্ট করে দেখায় বলে মনে হয় না।

  1. হ্যাঁ, যদি প্রোগ্রামটি (এবং অপারেটিং সিস্টেম) একাধিক কোর হিসাবে অ্যাকাউন্টে প্রোগ্রাম করা হয়। ('থ্রেডিং' শব্দটি এখানে প্রোগ্রামিংয়ের ক্ষেত্রে রয়েছে)
  2. টাস্কটি সম্পন্ন করার জন্য মেশিনটি প্রতিটি কোরের যতটুকু প্রয়োজন প্রয়োজন তত পরিমাণে ব্যবহার করে। সুতরাং কিছু পরিবর্তন করার প্রয়োজন নেই।
  3. আপনি সর্বাধিক ব্যবহারের সীমা নির্ধারণ করতে পারেন , তবে সাধারণ ব্যবহারের প্রয়োজন নেই। এখানে উত্তর দেখুন: - /unix/151883/limiting-processes-to-not-exceed-more-than-10-of-cpu-usage

এনবি:

আপনি যদি পাইটির সামগ্রিক পারফরম্যান্সের উন্নতি করতে চান তবে আপনি ওভারক্লকিংটি সন্ধান করতে পারেন। এটি সিপিইউকে দ্রুত হারে চালানোর অনুমতি দেয়। ডাউনসাইডগুলি হ'ল তাপ উত্পাদন বৃদ্ধি করে, প্রসেসরের কম জীবনকাল এবং বিদ্যুত ব্যবহার বাড়ায়।


2

সম্ভব হলে আমি স্ক্রিপ্টটিকে প্যারামিটারাইজ করব এবং সেগুলি পৃথক পাইথন প্রক্রিয়াতে চালিত করব। উদাহরণ স্বরূপ:

cat parameters.txt | xargs -n1 -P4 python run.py

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


প্রথম অংশ: হ্যাঁ, সমস্যাটি হাতের কাছে নিয়ে যাওয়া বিব্রতকরভাবে সমান্তরাল
পিটার মর্টেনসেন

আহা সত্য, আমি কেবল মাল্টিপ্রসেসিংয়ের প্রসেসিং পুলের সাথেই পরিচিত ছিলাম mapতবে দৃশ্যত এটিতে অনেকগুলি পরিশীলিত শেয়ারড মেমরির নির্মাণ রয়েছে r
নিকোনিহার

1

আমি মনে করি ওপি মাল্টি-কোর / মাল্টি-থ্রেড প্রোগ্রামিংয়ের ধারণাগুলি সম্পূর্ণরূপে বুঝতে পারে না এবং অ্যালগরিদমকে সহজেই বিব্রতকরভাবে সমান্তরাল সমস্যা হিসাবে তৈরি না করা হলে 100% মাল্টি-কোর সম্পূর্ণরূপে ব্যবহার করা কতটা কঠিন ।

আরও তথ্যের জন্য, আপনি সুপরিচিত নিবন্ধ শিরোনাম "ফ্রি লাঞ্চ শেষ" http://www.gotw.ca/publications/concurrency-ddj.htm সম্পর্কে আরও পড়তে পারেন


0

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

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


0

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

while True:
  x = 1.0

আপনার আরপিআই ডেস্কটপ থেকে একটি টার্মিনাল খুলুন এবং টাইপ করুন $ topযা প্রসেসরের কাজ দেখায়। তারপরে অন্য একটি টার্মিনাল খুলুন python3 temp.pyএবং আপনি পাইথন 3 জবটি 100% প্রসেসরের সময়ে বাড়তে দেখবেন। তারপরে আরেকটি টার্মিনাল খুলুন এবং প্রক্রিয়াটি পুনরাবৃত্তি করুন এবং দেখুন কীভাবে আপনি 400% এ চলেছেন। এক পর্যায়ে @ শ্যাডো মন্তব্য করেছেন যে এটি সহজ এবং এটি ডিফল্ট। তবে সমান্তরাল প্রক্রিয়াকরণ ব্যবহার করতে পারে এমন প্রোগ্রামগুলি ডিজাইন করা অপ্রয়োজনীয়, যেমন অন্যরা ব্যাখ্যা করেছেন।


0

উত্তরটি হ'ল এক উত্তেজনাপূর্ণ হ্যাঁ! এগুলি সনাক্ত করতে এবং সেগুলি ব্যবহার করার জন্য আপনার প্রোগ্রামটি আপনার লিখতে হবে। এই প্রোগ্রামগুলি কর ব্যবহার করতে পারে। আমি জাভাতে এটি করতে আমার লিখি এবং এইভাবে আমি পারি।

পাইথন বিকাশকারীদের উপরের উত্তরগুলির এই উত্তরটির একটি সীমাবদ্ধ ধারণা রয়েছে এবং তাই খুব বিভ্রান্তিকর হতে পারে তবে উত্তরটি হ্যাঁ এবং কেবল হ্যাঁ!


আপনি দয়া করে বিস্তারিত বলতে পারেন?
এসডসোলার

0

যেহেতু ওপি তাঁর প্রশ্নে অজগরটিকে নির্দিষ্ট করে না, তাই আমি আরও দুটি আধুনিক ভাষায় পরামর্শ দিতে চাই যা রাস্পবেরি পাইতে দুর্দান্ত কাজ করে এবং একত্রে ব্যবহারের খুব সহজ উপায় রয়েছে।

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

এ জাতীয় আর একটি ভাষা হ'ল গো (যা সন্ধান সহজতর করার জন্য গোলং নামেও পরিচিত)। গো গুগল দল তৈরি করেছে এবং এটি যুক্তিসঙ্গতভাবে পরিপক্ক ভাষা। গোতে কর্টিনগুলি তৈরি করা সহজ, যা তারা "গো রুটিন" বলে।

এই দুটি ভাষাই রাস্পবেরি পাই, এমনকি পাই জিরোতে কোড সংকলন করতে পারে। তবে এগুলি উভয়কেই দ্রুত কম্পিউটার থেকে ক্রস সংকলন করা যেতে পারে যা বড় প্রোগ্রামগুলির জন্য দুর্দান্ত।

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