মেমরি সারিবদ্ধতা কতটা গুরুত্বপূর্ণ? তবুও কি ব্যাপার?


15

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

তবে তা সত্ত্বেও আমার এখনও এ সম্পর্কে কিছু প্রশ্ন রয়েছে:

  1. এম্বেড থাকা সিস্টেমের বাইরে, আমাদের কম্পিউটারে প্রায়শই মেমরির বিশাল অংশ থাকে যা মেমরি পরিচালনাকে অনেক কম সমালোচক করে তোলে, আমি সম্পূর্ণরূপে অপ্টিমাইজেশনে আছি তবে এখন, এটি কি এমন কিছু যা আমরা একই প্রোগ্রামের সাথে তুলনা করলে পার্থক্য তৈরি করতে পারি বা এটি ছাড়া স্মৃতি পুনরায় সাজানো এবং সারিবদ্ধ?
  2. মেমরি সারিবদ্ধকরণের অন্যান্য সুবিধা আছে? আমি কোথাও পড়েছি যে প্রান্তিক মেমরির সাথে সিপিইউ আরও ভাল / দ্রুত কাজ করে কারণ প্রক্রিয়া করার জন্য এটি কম নির্দেশনা নেয় (যদি আপনার কোনওটির নিবন্ধ / বেঞ্চমার্কের জন্য এটির একটি লিঙ্ক থাকে?), সেক্ষেত্রে কি পার্থক্যটি তাৎপর্যপূর্ণ? এই দুটি তুলনায় আরও সুবিধা আছে?
  3. নিবন্ধের লিঙ্কে, অধ্যায় 5 এ, লেখক বলেছেন:

    সাবধান: সি ++ তে, স্ট্রাক্টগুলির মতো দেখতে ক্লাসগুলি এই নিয়মটি ভঙ্গ করতে পারে! (তারা বেস ক্লাস এবং ভার্চুয়াল সদস্য ফাংশনগুলি কীভাবে প্রয়োগ করা হয় এবং সংকলক অনুসারে পরিবর্তিত হয় তার উপর নির্ভর করে)

  4. নিবন্ধটি বেশিরভাগ কাঠামোর বিষয়ে কথা বলে, তবে স্থানীয় ভেরিয়েবলের ঘোষণাটিও কি এই প্রয়োজন দ্বারা প্রভাবিত হয়?

    মনে হয় যে কিছুটা পার্থক্য রয়েছে বলে মনে হয় মেমরি অ্যালাইনমেন্টটি সি ++ তে ঠিক কীভাবে কাজ করে?

এই প্রাক্তন প্রশ্নটিতে "প্রান্তিককরণ" শব্দটি রয়েছে তবে এটি উপরের প্রশ্নগুলির কোনও উত্তর সরবরাহ করে না।


সি ++ সংকলক আপনার জন্য এটি করার জন্য আরও বেশি ঝোঁক (প্যাডিং dingোকান যেখানে এটি প্রয়োজন বা সুবিধাজনক)। আপনার উল্লিখিত লিঙ্কটি থেকে, আপনি যে জিনিসগুলি ব্যবহার করতে পারেন তার জন্য বিভাগ 12 "সরঞ্জাম" এর নীচে দেখুন।
রওয়ং

উত্তর:


11

হ্যাঁ আপনার ডেটা প্রান্তিককরণ এবং বিন্যাস উভয়ই পারফরম্যান্সে বড় পার্থক্য আনতে পারে, কেবল কয়েক শতাংশ নয় কয়েক শতাংশ থেকে কয়েকশো শতাংশ।

এই লুপটি নিন, দুটি নির্দেশাবলী যদি আপনি পর্যাপ্ত লুপগুলি চালান তবে তা গুরুত্বপূর্ণ।

.globl ASMDELAY
ASMDELAY:
    subs r0,r0,#1
    bne ASMDELAY
    bx lr

ক্যাশে সহ এবং ছাড়াই এবং শাখার পূর্বাভাসে ক্যাশে টস সহ এবং প্রান্তিককরণের সাথে এবং আপনি সেই দুটি নির্দেশাবলীর কার্যকারিতা উল্লেখযোগ্য পরিমাণে (টাইমার টিক্স) দ্বারা পৃথক করতে পারেন:

min      max      difference
00016DDE 003E025D 003C947F

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

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

এটি কখনও কখনও "নির্দেশাবলী" হয় তবে বেশিরভাগ সময় এটি ঘড়ি / বাস চক্র।

বিভিন্ন টার্গেটের জন্য জিসিসিতে মেম্পি প্রয়োগগুলি দেখুন। বলুন যে আপনি 0x43 বাইটের কাঠামোটি অনুলিপি করছেন, আপনি এমন একটি বাস্তবায়ন খুঁজে পেতে পারেন যা 0x42 রেখে একটি বাইট অনুলিপি করে 0x40 বাইটগুলি বড় দক্ষ খণ্ডে অনুলিপি করে থাকে তবে শেষ 0x2 এটি দুটি স্বতন্ত্র বাইট হিসাবে বা 16 বিট স্থানান্তর হিসাবে করতে পারে। প্রান্তিককরণ এবং লক্ষ্যটি খেলায় আসে যদি উত্স এবং গন্তব্য ঠিকানাগুলি একই প্রান্তিকরে 0x1003 এবং 0x2003 বলে, তবে আপনি এক বাইটটি করতে পারেন, তারপর 0x40 বড় অংশগুলিতে 0x2 করতে পারেন, তবে যদি একটি 0x1002 এবং অন্য 0x1003 হয়, তবে এটি পায় বাস্তব কুরুচিপূর্ণ এবং বাস্তব ধীর।

বেশিরভাগ সময় এটি বাস চক্র। বা বদলির সংখ্যা আরও খারাপ। AR৪ বিট প্রশস্ত ডেটা বাস সহ এআরএম-এর সাথে একটি প্রসেসর নিন এবং 0x1004 ঠিকানায় একটি চারটি শব্দ স্থানান্তর (পড়ুন বা লিখুন, এলডিএম বা এসটিএম) করুন, এটি একটি শব্দ প্রান্তিক ঠিকানা এবং পুরোপুরি আইনী, তবে যদি বাসটি 64 হয় বিট প্রশস্ত এটি সম্ভবত একক নির্দেশনা এই ক্ষেত্রে তিনটি স্থানান্তরগুলিতে 0x1004 এ 32 বিট, 0x1008 এ একটি 64 বিট এবং 0x100A এ একটি 32 বিটে পরিণত হবে। তবে আপনার যদি একই নির্দেশনা থাকে তবে 0x1008 ঠিকানায় এটি 0x1008 ঠিকানায় একটি একক চার শব্দ স্থানান্তর করতে পারে। প্রতিটি স্থানান্তর একটি সেটআপ সময় যুক্ত আছে। সুতরাং 0x1004 থেকে 0x1008 এড্রেস পার্থক্য নিজে থেকে কয়েকগুণ দ্রুত, এমনকি / এসএসপি হতে পারে যখন ক্যাশে ব্যবহার করা হয় এবং সমস্ত ক্যাশে হিট হয়।

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

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

পারফরম্যান্স, প্রশস্ত ডেটা বাস, পাইপলাইন, ক্যাশে, শাখার পূর্বাভাস, একাধিক এক্সিকিউশন ইউনিট / পাথ ইত্যাদি উন্নত করতে আমরা যে সমস্ত জিনিস যুক্ত করেছি তা বেশিরভাগ ক্ষেত্রে সহায়তা করবে তবে তাদের সবকটিরই দুর্বল দাগ রয়েছে যা ইচ্ছাকৃতভাবে বা দুর্ঘটনাক্রমে শোষণ করা যেতে পারে। সংকলক বা গ্রন্থাগারগুলি এটি সম্পর্কে খুব কম কাজ করতে পারে, আপনি যদি পারফরম্যান্সে আগ্রহী হন তবে আপনাকে সুর করতে হবে এবং সবচেয়ে বড় সুরের কারণগুলির মধ্যে একটি হল কেবল 32, 64, 128, 256 এ সংযুক্ত নয়, কোড এবং ডেটা বিন্যাস করা ment বিট সীমানা, তবে যেখানে জিনিসগুলি একে অপরের সাথে সম্পর্কিত, আপনি একইভাবে ক্যাশে উপায়ে না নেওয়ার জন্য ভারী ব্যবহৃত লুপগুলি বা পুনরায় ব্যবহৃত ডেটা চান, তারা প্রত্যেকে তাদের নিজস্ব চায়। সংকলকগণ সুপার স্কেলার আর্কিটেকচারের জন্য নির্দেশাবলীর আদেশের জন্য, একে অপরের সাথে সম্পর্কিত নয় এমন নির্দেশাবলীর পুনরায় ব্যবস্থা করার জন্য সহায়তা করতে পারে,

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


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

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

15

হ্যাঁ, স্মৃতি প্রান্তিককরণ এখনও গুরুত্বপূর্ণ।

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

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


1
বিশেষত, এআরএম জোটযুক্ত-অ্যাক্সেস সমর্থন করে না। এবং এটি সিপিইউ প্রায় সমস্ত মোবাইল ব্যবহার করে।
জানু হুডেক

আরও মনে রাখবেন যে লিনাক্স কিছু রানটাইম ব্যয়ে নন-প্রান্তিক অ্যাক্সেসকে এমুলেট করে, তবে উইন্ডোজ (সিই এবং ফোন) অ-প্রান্তিক অ্যাক্সেসের চেষ্টা করে না এবং কেবল অ্যাপ্লিকেশনটি ক্র্যাশ করবে।
জানু হুডেক

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

3

হ্যাঁ, এটি এখনও গুরুত্বপূর্ণ, এবং কিছু কার্য সম্পাদনের সমালোচনামূলক অ্যালগরিদমগুলিতে আপনি সংকলকটির উপর নির্ভর করতে পারবেন না।

আমি কেবল কয়েকটি উদাহরণের তালিকা করতে যাচ্ছি:

  1. এই উত্তর থেকে :

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

  1. এসএসই নির্দেশাবলীর জন্য বিশেষ প্রান্তিককরণ প্রয়োজন। যদি এটি পূরণ না হয়, আপনাকে আন-স্বাক্ষরযুক্ত মেমরিতে ডেটা লোড করতে এবং সঞ্চয় করতে আপনাকে বিশেষ ফাংশন ব্যবহার করতে হবে। এর অর্থ দুটি অতিরিক্ত নির্দেশ।

আপনি যদি কোনও পারফরম্যান্স সমালোচনামূলক অ্যালগরিদম নিয়ে কাজ না করে থাকেন তবে মেমরির প্রান্তিককরণগুলি ভুলে যান। এটি সাধারণ প্রোগ্রামিংয়ের জন্য সত্যই প্রয়োজন হয় না।


1

আমাদের যে পরিস্থিতি গুরুত্বপূর্ণ তা এড়ানোর ঝোঁক রয়েছে। এটি যদি গুরুত্বপূর্ণ হয় তবে তা গুরুত্বপূর্ণ। বাইনারি ডেটা প্রক্রিয়াকরণের সময় স্বাক্ষরবিহীন ডেটা ব্যবহৃত হত, যা আজকাল এড়ানো হবে বলে মনে হয় (লোকেরা এক্সএমএল বা জেএসএন ব্যবহার করে)।

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

সি ++ এর রেফারেন্সটি ব্যাখ্যা করে: সি-তে, স্ট্রাক্টের সমস্ত ক্ষেত্র অবশ্যই আরোহী মেমরি ক্রমে সংরক্ষণ করতে হবে। সুতরাং আপনার যদি ক্ষেত্রের চর / ডাবল / চর আছে এবং সবকিছু সারিবদ্ধ করতে চান, আপনার কাছে একটি বাইট চর, সাত বাইট অব্যবহৃত, আট বাইট ডাবল, একটি বাইট চর, সাত বাইট অব্যবহৃত। সি ++ স্ট্রাইকগুলিতে এটি সামঞ্জস্যের জন্য একই। তবে স্ট্রাক্টগুলির জন্য, সংকলক ক্ষেত্রগুলি পুনরায় অর্ডার করতে পারে, যাতে আপনার কাছে একটি বাইট চর, অন্য বাইট চর, ছয় বাইট অব্যবহৃত, 8 বাইট ডাবল থাকতে পারে। 24 বাইটের পরিবর্তে 16 ব্যবহার করা। সি স্ট্রাক্টগুলিতে, বিকাশকারীরা সাধারণত সেই পরিস্থিতি এড়িয়ে যেত এবং ক্ষেত্রগুলিকে প্রথমে পৃথক ক্রমে রাখত।


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

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

1
আমি কোন সি সংকলক পুনরায় অর্ডার ক্ষেত্র কখনও দেখিনি। আমি উদাহরণস্বরূপ উদাহরণস্বরূপ অক্ষর /
ইনটসের মধ্যে অনেকগুলি padোকানো

1

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

: আমি একটি উপযুক্ত পঠিত সুপারিশ http://dewaele.org/~robbe/thesis/writing/references/what-every-programmer-should-know-about-memory.2007.pdf


1

মেমরি সারিবদ্ধতা কতটা গুরুত্বপূর্ণ? তবুও কি ব্যাপার?

হ্যাঁ. এটা নির্ভর করে।

এম্বেড থাকা সিস্টেমের বাইরে, আমাদের কম্পিউটারে প্রায়শই মেমরির বিশাল অংশ থাকে যা মেমরি পরিচালনাকে অনেক কম সমালোচক করে তোলে, আমি সম্পূর্ণরূপে অপ্টিমাইজেশনে আছি তবে এখন, এটি কি এমন কিছু যা আমরা একই প্রোগ্রামের সাথে তুলনা করলে পার্থক্য তৈরি করতে পারি বা এটি ছাড়া স্মৃতি পুনরায় সাজানো এবং সারিবদ্ধ?

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

মেমরি সারিবদ্ধকরণের অন্যান্য সুবিধা আছে? আমি কোথাও পড়েছি যে প্রান্তিক মেমরির সাথে সিপিইউ আরও ভাল / দ্রুত কাজ করে কারণ প্রক্রিয়া করার জন্য এটি কম নির্দেশনা নেয় (যদি আপনার কোনওটির নিবন্ধ / বেঞ্চমার্কের জন্য এটির একটি লিঙ্ক থাকে?), সেক্ষেত্রে কি পার্থক্যটি তাৎপর্যপূর্ণ? এই দুটি তুলনায় আরও সুবিধা আছে?

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

মনে হয় যে কিছুটা পার্থক্য রয়েছে বলে মনে হয় মেমরি অ্যালাইনমেন্টটি সি ++ তে ঠিক কীভাবে কাজ করে?

আমি যখন এ্যালাইনফ স্টাফগুলি বেরিয়ে এলাম তখন এটি পড়েছিলাম (সি ++ 11?) যেহেতু আমি এটি নিয়ে মাথা ঘামাইনি (আমি আজকাল বেশিরভাগ ডেস্কটপ অ্যাপ্লিকেশন এবং ব্যাকএন্ড সার্ভার বিকাশ করছি)।

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