ক্যাশে লাইনগুলি কীভাবে কাজ করবে?


166

আমি বুঝতে পারি যে প্রসেসর ক্যাশে লাইনের মাধ্যমে ক্যাশে ডেটা নিয়ে আসে, যা - উদাহরণস্বরূপ, আমার অ্যাটম প্রসেসরে - একসময় প্রায় 64৪ বাইট নিয়ে আসে, আসল তথ্যটি যে আকারে পড়ছে তা যাই হোক না কেন।

আমার প্রশ্নটি হ'ল:

কল্পনা করুন যে আপনাকে মেমরি থেকে একটি বাইট পড়তে হবে, কোন 64 বাইট ক্যাশে আনা হবে?

আমি যে দুটি সম্ভাবনা দেখতে পাচ্ছি তা হ'ল হয়, 64 বাইটগুলি আগ্রহের বাইটের নীচে নিকটতম 64 বাইট সীমানায় শুরু হয়, বা 64 বাইটগুলি কিছু পূর্বনির্ধারিত উপায়ে (উদাহরণস্বরূপ, অর্ধেক নীচে, অর্ধেক উপরে, বা সব উপরে).

ইহা কোনটা?


22
এটি পড়ুন: প্রতিটি প্রোগ্রামার মেমোরি সম্পর্কে কী জানতে হবে । তারপরে আবার পড়ুন। ভাল এখানে (পিডিএফ) উত্স
andersoj

উত্তর:


128

আপনি যে লোকে লোড করছেন বাইট বা শব্দযুক্ত ক্যাশে লাইনটি ইতিমধ্যে ক্যাশে উপস্থিত না থাকলে আপনার সিপিইউ ক্যাশে লাইন সীমানায় শুরু হওয়া 64৪ বাইটের জন্য অনুরোধ করবে (আপনার প্রয়োজনের নীচে সবচেয়ে বড় ঠিকানা যা 64৪ এর একাধিক) ।

আধুনিক পিসি মেমরির মডিউলগুলি আটটি স্থানান্তর ফেটে একসাথে একবারে b৪ বিট (৮ বাইট) স্থানান্তর করে , তাই একটি কমান্ড মেমরি থেকে একটি সম্পূর্ণ ক্যাশে লাইনটি পড়তে বা লিখতে ট্রিগার করে। (ডিডিআর 1/2/3/4 এসডিআরএম বিস্ফরণ ট্রান্সফার আকারটি 64 বি পর্যন্ত কনফিগারযোগ্য; সিপিইউগুলি তাদের ক্যাশে লাইনের আকারের সাথে মেলে ব্রাস্ট ট্রান্সফার আকার নির্বাচন করবে, তবে B৪ বিটি সাধারণ)

থাম্বের নিয়ম হিসাবে, প্রসেসর যদি মেমোরি অ্যাক্সেসের পূর্বাভাস না দিতে পারে (এবং এটি প্রিফেট করতে পারে), পুনরুদ্ধার প্রক্রিয়াটি ~ 90 ন্যানোসেকেন্ড, বা 250 ডলার ঘড়ি চক্র (সিপিইউ থেকে সিপিইউ প্রাপ্ত ডেটার প্রাপ্তির ঠিকানা জেনে) নিতে পারে।

বিপরীতে, এল 1 ক্যাশে একটি হিটের 3 বা 4 চক্রের লোড-ব্যবহারের বিলম্ব রয়েছে এবং একটি স্টোর-লোড আধুনিক x86 সিপিইউগুলিতে 4 বা 5 চক্রের স্টোর-ফরোয়ার্ডিং ল্যাটেন্সী দেয়। জিনিসগুলি অন্যান্য আর্কিটেকচারে একই রকম।

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


1
এই উত্তরটি একেবারেই কোনও অর্থবহ নয়। Bit৪ বিট মেমরি ব্যান্ডউইদথ (যা সে ক্ষেত্রেও ভুল) 64 বাইট (!) করার জন্য কিছু করবেন না? এছাড়াও যদি আপনি রামটিকে আঘাত করেন তবে 10 থেকে 30 এনএসও সম্পূর্ণ ভুল। এটি L3 বা L2 ক্যাশের ক্ষেত্রে সত্য হতে পারে তবে র্যামের ক্ষেত্রে নয় যেখানে এটি 90ns এর মতো। আপনি যা বোঝাতে চেয়েছেন তা হচ্ছে বার্সার সময় - বার্সার মোডে পরবর্তী কোয়াড-ওয়ার্ড অ্যাক্সেস করার সময় (যা আসলে সঠিক উত্তর)
মার্টিন কার্স্টেন

5
@ মার্টিনকर्স্টেন: ডিডিআর 1/2/3/4 এসডিআরএমের একটি চ্যানেল একটি 64-বিট ডেটা বাস প্রস্থ ব্যবহার করে use একটি সম্পূর্ণ ক্যাশে লাইনের একটি বিস্ফাল স্থানান্তর প্রতিটি 8 বি এর আটটি স্থানান্তর গ্রহণ করে এবং আসলে এটি ঘটে। এটি এখনও সঠিক হতে পারে যে প্রথমে পছন্দসই বাইটযুক্ত 8 বি-প্রান্তিক অংশটি স্থানান্তর করে প্রক্রিয়াটি অপ্টিমাইজ করা হয়েছে, অর্থাত্ সেখানে বিস্ফোরণটি শুরু করা (এবং এটি বিস্ফারিত স্থানান্তর আকারের প্রথম 8 বি না হলে চারপাশে মোড়ানো)। মাল্টি-লেভেল ক্যাশেযুক্ত আধুনিক সিপিইউ সম্ভবত এটি আর করবে না, কারণ এটির অর্থ L1 ক্যাশে দ্রুত ফাটার প্রথম ব্লক (গুলি) রিলে করা হবে।
পিটার কর্ডস

2
হাসওলের এল 2 এবং এল 1 ডি ক্যাশে (অর্থাত্ একটি সম্পূর্ণ ক্যাশে লাইন প্রস্থ) এর মধ্যে একটি 64 বি পাথ রয়েছে , সুতরাং অনুরোধ করা বাইটযুক্ত 8 বি স্থানান্তরিত করে সেই বাসটির অদক্ষ ব্যবহারের সুযোগ তৈরি হবে। প্রধান স্মৃতিতে যেতে হবে এমন বোঝার জন্য @ মার্টিন অ্যাক্সেসের সময় সম্পর্কেও সঠিক।
পিটার কর্ডস

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

2
@ মার্টিন: আমি এগিয়ে গিয়ে এই উত্তরটি সম্পাদনা করার সিদ্ধান্ত নিয়েছি। আমি মনে করি এটি এখন আরও নির্ভুল এবং এখনও সহজ। : ফিউচার পাঠকদের: এছাড়াও Mike76 প্রশ্ন ও আমার উত্তর দেখার stackoverflow.com/questions/39182060/...
পিটার Cordes

22

যদি ক্যাশে লাইনগুলি by৪ বাইট প্রশস্ত হয়, তবে তারা মেমরির ব্লকগুলির সাথে মিলিত হয় যা which৪ দ্বারা বিভাজ্য ঠিকানাগুলিতে শুরু হয় any কোনও ঠিকানার কমপক্ষে উল্লেখযোগ্য b বিট ক্যাশে লাইনের একটি অফসেট।

সুতরাং যে কোনও বাইটের জন্য, ক্যাশে লাইনটি আনতে হবে যা ঠিকানার কমপক্ষে ছয়টি বিট সাফ করে খুঁজে পাওয়া যাবে, যা 64 দ্বারা বিভাজ্য নিকটতম ঠিকানার সাথে গোল করে মিলবে।

যদিও এটি হার্ডওয়্যার দ্বারা সম্পন্ন করা হয়েছে, আমরা কয়েকটি রেফারেন্স সি ম্যাক্রো সংজ্ঞা ব্যবহার করে গণনাগুলি প্রদর্শন করতে পারি:

#define CACHE_BLOCK_BITS 6
#define CACHE_BLOCK_SIZE (1U << CACHE_BLOCK_BITS)  /* 64 */
#define CACHE_BLOCK_MASK (CACHE_BLOCK_SIZE - 1)    /* 63, 0x3F */

/* Which byte offset in its cache block does this address reference? */
#define CACHE_BLOCK_OFFSET(ADDR) ((ADDR) & CACHE_BLOCK_MASK)

/* Address of 64 byte block brought into the cache when ADDR accessed */
#define CACHE_BLOCK_ALIGNED_ADDR(ADDR) ((ADDR) & ~CACHE_BLOCK_MASK)

1
আমার এটি বুঝতে অসুবিধা হয়েছে। আমি জানি 2 বছর পরে, তবে আপনি কি আমাকে এর জন্য উদাহরণ কোড দিতে পারেন? এক বা দুটি লাইন
নিক

1
@ নিক এই পদ্ধতিটি বাইনারি নম্বর সিস্টেমে কাজ করার কারণ। 2 এর যে কোনও পাওয়ারের মধ্যে কেবল একটি বিট সেট রয়েছে এবং বাকি সমস্ত বিটগুলি সাফ হয়ে গেছে, সুতরাং আপনি 64 0b1000000টির জন্য খেয়াল করেছেন যে শেষ digit সংখ্যাটি শূন্য, সুতরাং 6 সেটগুলির কোনওটির সাথে আপনার কিছু নম্বর থাকলেও (যা সংখ্যাকে উপস্থাপন করে) % 64), এগুলি সাফ করা আপনাকে নিকটতম 64-বাইট সারিবদ্ধ মেমরি ঠিকানা দেবে give
কিংবদন্তি

21

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

মূল মেমরির অ্যাক্সেসের জন্য 70ns থেকে 100ns খরচ হয় (ডিডিআর 4 কিছুটা দ্রুত হয়)। এই সময়টি মূলত এল 1, এল 2 এবং এল 3 ক্যাশে সন্ধান করছে এবং মেমরির চেয়ে বেশি আঘাত করবে (মেমরি নিয়ন্ত্রণকারীকে কমান্ড প্রেরণ করবে, যা এটি মেমরি ব্যাঙ্কগুলিতে প্রেরণ করে), প্রতিক্রিয়াটির জন্য অপেক্ষা করুন এবং সম্পন্ন করুন।

100ns মানে প্রায় 200 টিক্স। সুতরাং মূলত যদি কোনও প্রোগ্রাম সর্বদা প্রতিটি স্মৃতি অ্যাক্সেসের ক্যাচগুলি মিস করে তবে সিপিইউ তার প্রায় 99,5% সময় ব্যয় করবে (যদি এটি কেবল মেমরি পড়ে) মেমরির জন্য অপেক্ষা করতে নিষ্ক্রিয়।

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

(বর্তমানে একটি প্রকৃত উত্পাদন ত্রুটি হ'ল ক্যাশে মেমরি অঞ্চলগুলি সামগ্রিকভাবে সিপিইউ ত্রুটি সরবরাহ করে এমন সম্ভাবনা হ্রাস করার জন্য নির্দিষ্ট কিছু অংশ নিষ্ক্রিয় করতে সক্ষম হওয়ার জন্য বর্তমানে আরও কিছু এল 1, এল 2, এল 3 ক্যাশে তৈরি করে)।

একটি সময় ধারণা দিতে (উত্স: ক্যাশে এবং মেমরি অ্যাক্সেস খরচ )

  • এল 1 ক্যাশে: 1ns থেকে 2ns (2-4 চক্র)
  • L2 ক্যাশে: 3ns থেকে 5ns (6-10 চক্র)
  • L3 ক্যাশে: 12ns থেকে 20ns (24-40 চক্র)
  • র‌্যাম: 60ns (120 চক্র)

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

সুতরাং একটি ক্যাশে মূলত মেমরি অ্যাক্সেসের গতি বাড়িয়ে তোলে (60ns বনাম 1ns)।

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

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

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

সুতরাং মেমরি অ্যাক্সেস প্যাটার্ন বিশ্লেষণ করে এটা স্পষ্ট হয়েছিল যে ডেটা ক্রমাগতভাবে প্রায়শই পড়া হয়। একটি উচ্চ সম্ভাবনা ছিল যে কোনও প্রোগ্রাম যদি সূচক i তে মানটি পড়েন তবে প্রোগ্রামটি i + 1 মানটিও পড়বে। এই সম্ভাবনা সম্ভাবনার চেয়ে কিছুটা বেশি যে একই প্রোগ্রামটি i + 2 এবং আরও কিছু মান পড়বে।

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

বুস্ট মোডে মেমোরি অ্যাক্সেসের অর্থ, কোনও ঠিকানা প্রেরণ করা হয় এবং একাধিক মান ক্রমানুসারে প্রেরণ করা হয়। প্রতিটি অতিরিক্ত মান প্রেরণে অতিরিক্ত 10ns (এমনকি নীচেও) লাগে।

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

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

ক্যাশে লাইনটি আরেকটি সমস্যা সমাধান করে (সামনের পড়া এবং ঠিকানা বাসে ছয় বিট সংরক্ষণ / মুক্ত করার পাশাপাশি) ক্যাশেটি যেভাবে সাজানো হয়েছে তাতে। উদাহরণস্বরূপ, যদি কোনও ক্যাশে 8 বাইট (64 বিট) ব্লক (কোষ )গুলিতে বিভক্ত হয় তবে মেমরি সেলটির ঠিকানা সংরক্ষণ করার জন্য এই ক্যাশে সেলটি পাশাপাশি মান রাখে। যদি ঠিকানাটিও bit৪ বিট হয় তবে এর অর্থ হ'ল অর্ধেক ক্যাশে আকারটি ঠিকানার মাধ্যমে খাওয়া হয় যার ফলে 100% ওভারহেড হয়।

যেহেতু একটি ক্যাশে লাইন by৪ বাইবিট এবং একটি সিপিইউ bit৪ বিট - bit বিট = ৫৮ বিট ব্যবহার করতে পারে (শূন্য বিটগুলি খুব বেশি সঠিকভাবে সংরক্ষণ করার দরকার নেই) এর অর্থ আমরা 58 বিট (11% ওভারহেড) এর ওভারহেড দিয়ে 64 বাইট বা 512 বাইটগুলি ক্যাশে করতে পারি। বাস্তবে সংরক্ষিত ঠিকানাগুলি এর চেয়ে আরও ছোট তবে স্থিতির তথ্য রয়েছে (যেমন ক্যাশে লাইনটি বৈধ এবং নির্ভুল, নোংরা এবং ম্যামে আবার লিখতে হবে)।

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

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

আমাদের ক্যাশে লাইন কেন এটি মূলত বর্তমান ধারণা। সামনে পড়ার সুবিধাটি খুব বেশি এবং ক্যাশে-লাইন থেকে একক বাইট পড়ার সবচেয়ে খারাপ পরিস্থিতি এবং আর কখনও পড়তে হবে না কারণ সম্ভাবনাটি খুব পাতলা।

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


1
একটি সেট-সহযোগী ক্যাশে কোনও সেট নির্বাচন করতে কিছু ঠিকানার বিট ব্যবহার করে, যাতে ট্যাগগুলি আপনার উদাহরণের চেয়ে ছোটও হতে পারে। অবশ্যই, ক্যাশে সেটটিতে কোন ট্যাগের সাথে কোন ট্যাগটি যায় সে সম্পর্কেও নজর রাখতে হবে, তবে সেটের মধ্যে উপায়গুলির চেয়ে সাধারণত আরও সেট থাকে। (যেমন k২ বিবি 8-ওয়ে সহযোগী এল 1 ডি ক্যাশে, 64 বি লাইন সহ, ইনটেল x86 সিপিইউগুলিতে: অফসেট 6 বিট, ইনডেক্স 6 বিট Tags ট্যাগগুলিতে কেবল 48-12 বিট প্রশস্ত হওয়া আবশ্যক, কারণ x86-64 (আপাতত) কেবল 48- বিট শারীরিক ঠিকানা As যেমনটি আমি নিশ্চিত আপনি জানেন, এটি কোনও কাকতালীয় ঘটনা নয় যে কম 12 বিটগুলি পৃষ্ঠাটি অফসেট হয়, সুতরাং এল 1 কোনও বিকল্প ছাড়াই ভিআইপিটি হতে পারে))
পিটার

আশ্চর্যজনক উত্তর কুঁড়ি ... কোথাও একটি "মত" বোতাম আছে?
এ্যাডগার্ড লিমা

@ এডগার্ডলিমা, আপভোট বোতামটি নয়?
পেসারিয়ার

6

প্রসেসরের একাধিক স্তরের ক্যাশে (এল 1, এল 2, এল 3) থাকতে পারে এবং এগুলি আকার এবং গতিতে পৃথক হতে পারে।

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

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

এটি কোনও সহজ কাজ নয়। দিনের শেষে যদি আপনি যা চান তা একটি পারফরম্যান্স পরীক্ষা হয়, আপনি যেমন একটি সরঞ্জাম ব্যবহার করতে পারেন ক্যাশেগ্রিন্ডের । যাইহোক, এটি একটি সিমুলেশন হিসাবে, এর ফলাফলটি কিছুটা ডিগ্রি আলাদা হতে পারে।


4

প্রত্যেকটি হার্ডওয়্যার আলাদা বলে আমি নির্দিষ্ট করে বলতে পারি না, তবে এটি সাধারণত "64 বাইট নীচের নিকটবর্তী 64 বাইট সীমানায় শুরু হয়" কারণ এটি সিপিইউর জন্য খুব দ্রুত এবং সহজ অপারেশন।


2
আমি করতে নির্দিষ্ট জন্য বলে। যে কোনও যুক্তিসঙ্গত ক্যাশে ডিজাইনের আকারের সাথে লাইন থাকবে যা 2 পাওয়ার এবং এটি স্বাভাবিকভাবে প্রান্তিক করা থাকে। (যেমন B৪ বি-সারিবদ্ধ)। এটি কেবল দ্রুত এবং সহজ নয়, এটি আক্ষরিক অর্থেই বিনামূল্যে: উদাহরণস্বরূপ আপনি ঠিক ঠিক 6 টি বিট উপেক্ষা করবেন। ক্যাচগুলি প্রায়শই বিভিন্ন রেঞ্জের ঠিকানা সহ বিভিন্ন জিনিস করে। (উদাহরণস্বরূপ ক্যাশে হিট বনাম মিস সনাক্তকরণের জন্য ট্যাগ এবং সূচক সম্পর্কে যত্নশীল, তবে কেবল তথ্য সন্নিবেশ / নিষ্কাশন করার জন্য ক্যাশে লাইনের মধ্যে অফসেট ব্যবহার করে)
পিটার কর্ডস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.