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