একাধিক কোর ব্যবহারের জন্য ওএসের সাথে সুস্পষ্টভাবে থ্রেড-স্তরের সমান্তরালতা প্রকাশ করা প্রয়োজন , যার জন্য সাধারণত প্রোগ্রামারকে একটি বহু-থ্রেডযুক্ত প্রোগ্রাম লেখার প্রয়োজন হয়। (বা একক থ্রেডড প্রোগ্রাম একাধিক বার বিভিন্ন ইনপুটগুলিতে চালনার জন্য যেমন সংকলন করা 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 দুর্দান্ত চমত্কার , তবে আধুনিক মান অনুসারে এটি বেশ স্বল্প-শেষ।