অ্যাগনার ফগের অপ্টিমাইজেশান গাইডগুলি দুর্দান্ত। তাঁর সাম্প্রতিক x86 সিপিইউ ডিজাইনের (ম্যানুয়াল পেন্টিয়াম হিসাবে ফিরে যাওয়া) মাইক্রোর্কিটেকচারের জন্য গাইড, নির্দেশের সময় সারণী এবং ডকস রয়েছে। Https://stackoverflow.com/tags/x86/info থেকে লিঙ্কযুক্ত কিছু অন্যান্য সংস্থানও দেখুন
শুধু মজাদার জন্য, আমি কয়েকটি প্রশ্নের উত্তর দেব (সাম্প্রতিক ইন্টেল সিপিইউগুলির সংখ্যা)। অপ্সের পছন্দটি কোড অনুকূলিতকরণের প্রধান কারণ নয় (যদি না আপনি বিভাগ এড়াতে পারেন।)
সিপিইউতে কোনও সংযোজনের চেয়ে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে বেড়ে যায়?
হ্যাঁ (এটি যদি 2 এর পাওয়ার দ্বারা না হয়) (ইনটেলের প্রতি ঘড়ি থ্রুটপুট সহ মাত্র ২-৩০ প্রক্ষেপণ)) এটি এড়াতে আপনার পথ থেকে দূরে যাবেন না, যদিও এটি 2 বা 3 যোগ করার তত দ্রুত fast
মৌলিক গণিত এবং নিয়ন্ত্রণ প্রবাহ অপকডগুলির গতি বৈশিষ্ট্যগুলি কী?
যদি আপনি জানতে চান Agner কুয়াশা নির্দেশনা সারণি এবং microarchitecture গাইড দেখুন ঠিক : পি। শর্তাধীন জাম্পগুলি সম্পর্কে সতর্কতা অবলম্বন করুন। শর্তহীন জাম্পগুলি (ফাংশন কলগুলির মতো) কিছু ছোট ওভারহেড থাকে তবে বেশি হয় না।
দুটি অপকড যদি একই সংখ্যার চক্র কার্যকর করতে নেয়, তবে উভয়ই কোনও পারফরম্যান্স লাভ / ক্ষতি ছাড়াই বিনিময়যোগ্য হিসাবে ব্যবহার করা যেতে পারে?
না, তারা অন্য কিছু হিসাবে একই এক্সিকিউশন পোর্টের জন্য প্রতিযোগিতা করতে পারে, বা তারা নাও পারে। এটি অন্যান্য নির্ভরশীলতা চেইনগুলি সমান্তরালভাবে কী কাজ করতে পারে তার উপর নির্ভর করে। (অনুশীলনে, সাধারণত কোনও কার্যকর সিদ্ধান্ত নেওয়ার দরকার হয় না occasion এটি মাঝে মাঝে আসে যে আপনি কোনও ভেক্টর শিফট বা একটি ভেক্টর শিফেল ব্যবহার করতে পারেন, যা ইন্টেল সিপিইউতে বিভিন্ন পোর্টে চালিত হয় whole তবে পুরো নিবন্ধের শিফট-বাই-বাইট ( PSLLDQ
ইত্যাদি) এলোমেলো ইউনিট চালায়।)
X86 সিপিইউ কার্যকারিতা সম্পর্কিত আপনি যে কোনও প্রযুক্তিগত বিবরণ ভাগ করতে পারেন তা প্রশংসাযোগ্য
অ্যাগনার ফগের মাইক্রোয়ার্ক ডকগুলি ইনটেল এবং এএমডি সিপিইউগুলির পাইপলাইনগুলিকে যথাযথ বিশদে বিশদভাবে বর্ণনা করে যে কোনও পুনরুক্তি প্রতি কতগুলি চক্র গ্রহণ করতে হবে, এবং বাটোনেকটি ইউওপ থ্রুপুট, একটি নির্ভরতা চেইন, বা একটি এক্সিকিউশন পোর্টের জন্য যুক্তিযুক্ত কিনা whether মত Stackoverflow আমার কিছু প্রশ্নের উত্তর দিয়েছেন, দেখ এই এক বা এই এক ।
এছাড়াও, আপনি যদি সিপিইউ ডিজাইন পছন্দ করেন তবে http://www.realworldtech.com/haswell-cpu/ (এবং পূর্ববর্তী ডিজাইনের জন্য অনুরূপ) মজাদার হয়।
আমার সেরা অনুমানের উপর ভিত্তি করে আপনার তালিকাটি হ্যাসওয়েল সিপিইউয়ের জন্য বাছাই করা হয়েছে। যদিও এটি কোনও asm লুপ টিউন করা ছাড়া কিছুই করার জন্য জিনিসগুলি নিয়ে চিন্তা করার কোনও কার্যকর উপায় নয়। ক্যাশে / শাখা-পূর্বাভাসের প্রভাবগুলি সাধারণত আধিপত্য বজায় রাখে, তাই ভাল নিদর্শনগুলি রাখতে আপনার কোডটি লিখুন। সংখ্যাগুলি খুব হাতের তরঙ্গযুক্ত এবং উচ্চতর বিলম্বের জন্য অ্যাকাউন্ট করার চেষ্টা করুন, এমনকি থ্রুপুট কোনও সমস্যা না হলেও, বা আরও কিছু উওপ তৈরি করার জন্য যা অন্যান্য জিনিসকে সমান্তরালে ঘটতে পাইপ আটকে দেয় g ESP। ক্যাশে / শাখার নম্বরগুলি খুব তৈরি- লুপ-বাহিত নির্ভরতাগুলির জন্য প্রচ্ছন্নতা গুরুত্বপূর্ণ, যখন প্রতিটি পুনরাবৃত্তি স্বাধীন হয় তখন থ্রুপুট বিষয়গুলি matters
টিএল: ডিআর এই সংখ্যাগুলি একটি "সাধারণ" ব্যবহারের ক্ষেত্রে যা দেখছি তার উপর ভিত্তি করে তৈরি করা হয়েছে , যতক্ষণ না লেটেন্সি, এক্সিকিউশন-পোর্টের বাধা এবং সামনের দিকে থ্রুপুট (বা শাখা মিসের মতো জিনিসের স্টলগুলি) রয়েছে )। গুরুতর পারফেক্ট বিশ্লেষণের জন্য দয়া করে এই সংখ্যাগুলি ব্যবহার করবেন না ।
- ০.০ থেকে ১ বিটওয়াইজ / ইন্টিজার অ্যাডিশন / বিয়োগ /
শিফ্ট অ্যান্ড রোটেট (কম্পাইল-টাইম কনস্ট কাউন্ট) /
এগুলির সমস্ত ভেক্টর সংস্করণ (প্রতি চক্র থ্রুপুট প্রতি 1 থেকে 4, 1 চক্রের বিলম্ব)
- 1 ভেক্টর ন্যূনতম, সর্বোচ্চ, তুলনা-সমান, তুলনা-বৃহত্তর (একটি মুখোশ তৈরি করতে)
- 1.5 ভেক্টর shuffles। হাসওয়েল এবং নবীনদের কেবল একটি বদলানো বন্দর রয়েছে এবং আমার কাছে মনে হয় আপনার যদি প্রয়োজন হয় তবে অনেকগুলি বদলানো দরকার, তাই আমি কম শ্যাফেলগুলি ব্যবহারের বিষয়ে চিন্তাভাবনা করার জন্য উত্সাহিত করার জন্য এটি কিছুটা উচ্চতর করে নিচ্ছি। তারা নিখরচায় নয়, এসএসপি। আপনার যদি স্মৃতি থেকে pshufb কন্ট্রোল মাস্কের প্রয়োজন হয়।
- 1.5 লোড / স্টোর (এল 1 ক্যাশে হিট through
- 1.75 পূর্ণসংখ্যা গুণ (ইন্টেলের উপর 3c ল্যাটেন্সি / প্রতি 1c টিপুট প্রতি এক, এএমডিতে 4 সি ল্যাট এবং 2 সি টিপুট প্রতি মাত্র একটি)। ছোট ধ্রুবকগুলি এলইএ এবং / অথবা এডিডি / এসইউবি / শিফ্ট ব্যবহার করে আরও সস্তা । তবে অবশ্যই সংকলন-সময় ধ্রুবকগুলি সর্বদা ভাল থাকে এবং প্রায়শই অন্যান্য জিনিসগুলিতে অনুকূলিত হতে পারে। (এবং একটি লুপে গুণ করলে প্রায়শই সংকলক দ্বারা শক্তি-হ্রাস করা যায়
tmp += 7
পরিবর্তে একটি লুপে tmp = i*7
)
- 1.75 কিছু 256b ভেক্টর বদলানো (ইনসনে অতিরিক্ত বিলম্বিতা যা কোনও এভিএক্স ভেক্টরের 128 বি লেনের মধ্যে ডেটা সরাতে পারে)। (অথবা রায়েজেনে 3 থেকে 7 যেখানে লেন ক্রসিংয়ের শাফলে আরও অনেক উফ দরকার হয়)
- 2 এফপি অ্যাড / সাব (এবং একই ভেক্টর সংস্করণ) (চক্র থ্রুপুট প্রতি 1 বা 2, 3 থেকে 5 চক্রের বিলম্ব)। ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরেच्चफेটি গিঁটা) আটকানো থাকে যদি আপনি বিলম্ব করে বাধা দেয় তবে ধীর হতে পারে, উদাহরণস্বরূপ কেবলমাত্র 1 টি
sum
ভেরিয়েবলের সাথে একটি অ্যারে যোগ করে । (আমি এই ওজন করতে পারতাম এবং ব্যবহারের ক্ষেত্রে উপর নির্ভর করে এফপি মুল 1 বা কম 5 হিসাবে কম) high
- 2 ভেক্টর এফপি মুল বা এফএমএ। (x * y + z মুল বা অ্যাডের তুলনায় সস্তা, যদি আপনি এফএমএ সমর্থন সক্ষম করে থাকেন)।
- 2 ভেক্টর উপাদানগুলিতে (
_mm_insert_epi8
ইত্যাদি) সাধারণ-উদ্দেশ্যে নিবন্ধগুলি সন্নিবেশ করা / নিষ্কাশন করা
- 2.25 ভেক্টর ইন্ট মুল (16-বিট উপাদান বা পদ্মডাবসউ 8 * 8 -> 16-বিট করছে)। স্কেলার মুলের চেয়ে ভাল থ্রুপুট সহ স্কাইলেকে সস্তা
- ভেরিয়েবল গণনা অনুসারে ২.২৫ শিফট / ঘোরান (2 সি ল্যাটেন্সি, ইনটেলের প্রতি 2 সি থ্রুটপুট, এএমডি তে বা বিএমআই 2 সহ দ্রুত)
- 2.5 শাখা ছাড়াই তুলনা (
y = x ? a : b
, বা y = x >= 0
) ( test / setcc
বা cmov
)
- 3 ইনট-> ফ্লোট রূপান্তর
- 3 সঠিকভাবে পূর্বাভাস কন্ট্রোল প্রবাহ (পূর্বাভাসিত শাখা, কল, রিটার্ন)।
- 4 ভেক্টর ইন্ট মুল (32-বিট উপাদান) (2 উওস, হাসওয়েলে 10 সি ল্যাটেন্সি)
- 4 পূর্ণসংখ্যা বিভাগ বা
%
একটি সংকলন-সময় ধ্রুবক দ্বারা (2 এর অ শক্তি)।
- 7 ভেক্টর অনুভূমিক অপস (উদাহরণস্বরূপ
PHADD
একটি ভেক্টরের মধ্যে মান যুক্ত করা)
- 11 (ভেক্টর) এফপি বিভাগ (10-13c লেটেন্সি, প্রতি 7 গ থ্রুপুট বা আরও খারাপ)। (খুব কম ব্যবহার করা হলেও সস্তা হতে পারে তবে থ্রুটপুট এফপি মুলের চেয়ে 6 থেকে 40x খারাপ)
- 13? নিয়ন্ত্রণ প্রবাহ (দুর্বল-পূর্বাভাসিত শাখা, সম্ভবত 75% অনুমানযোগ্য)
- ১৩ টি আন্তঃ বিভাগ ( হ্যাঁ সত্যই , এটি এফপি বিভাগের চেয়ে ধীর গতির, এবং ভেক্টরাইজ করতে পারে না)। (নোট করুন যে সংযোজকরা একটি ম্যাজিক ধ্রুবক দ্বারা মুল / শিফট / অ্যাড ব্যবহার করে একটি ধ্রুবক দ্বারা বিভক্ত হন , এবং 2 / এর পাওয়ার দ্বারা ডিভিড / মোড খুব সস্তা))
- 16 (ভেক্টর) এফপি স্কয়ার্ট
- 25? লোড (L3 ক্যাশে আঘাত)। (ক্যাশে-মিস স্টোরগুলি লোডের তুলনায় সস্তা)
- 50? এফপি ট্রিগ / এক্সপ্রেস / লগ। আপনার যদি অনেক এক্সপ / লগ প্রয়োজন হয় এবং সম্পূর্ণ নির্ভুলতার প্রয়োজন না হয়, আপনি একটি সংক্ষিপ্ত বহুভুজ এবং / বা একটি টেবিল দিয়ে গতির জন্য নির্ভুলতার বাণিজ্য করতে পারেন। আপনি সেক্টর ভেক্টরাইজ করতে পারেন।
- 50-80? সর্বদা- অনুমানিত শাখা, 15-20 চক্রের দাম
- 200-400? লোড / স্টোর (ক্যাশে মিস)
- 3000 ??? ফাইল থেকে পৃষ্ঠা পড়ুন (ওএস ডিস্ক ক্যাশে হিট) (এখানে সংখ্যা তৈরি করা)
- 20000 ??? ডিস্ক পঠন পৃষ্ঠা (ওএস ডিস্ক-ক্যাশে মিস, দ্রুত এসএসডি) (সম্পূর্ণ তৈরি আপ সংখ্যা)
আমি সম্পূর্ণরূপে অনুমানের ভিত্তিতে এটি তৈরি করেছি । যদি কিছু ভুল দেখায় তবে তা হয় কারণ আমি অন্য কোনও ব্যবহারের ক্ষেত্রে বা একটি সম্পাদনের ত্রুটির কথা ভেবেছিলাম।
এএমডি সিপিইউগুলিতে জিনিসের আপেক্ষিক ব্যয় একই রকম হবে, শিফট-কাউন্টটি পরিবর্তনশীল যখন তাদের দ্রুত পূর্ণসংখ্যার শিফটার না থাকে। এএমডি বুলডোজার-পরিবারের সিপিইউ বিভিন্ন কারণে অবশ্যই বেশিরভাগ কোডে ধীর হয়। (Ryzen অনেক স্টাফ এ বেশ ভাল)।
মনে রাখবেন যে জিনিসগুলিকে এক-মাত্রিক ব্যয়ে সিদ্ধ করা সত্যিই অসম্ভব । ক্যাশে-মিস এবং শাখার ভুল তথ্য বাদে কোডের একটি ব্লকের ক্ষেত্রে বিড়ম্বনাটি বিলম্বতা, মোট উওপ থ্রুপুট (সম্মুখভাগ) বা নির্দিষ্ট পোর্টের (এক্সিকিউশন পোর্ট) থ্রুপুট হতে পারে।
আশেপাশের কোডগুলি সিপিইউকে অন্য কাজের সাথে ব্যস্ত রাখলে এফপি বিভাগের মতো একটি "ধীর" অপারেশন খুব সস্তা হতে পারে । (ভেক্টর এফপি ডিভ বা স্কয়ার্ট প্রতিটি প্রতি 1 জন, তাদের কেবল খারাপ লেটেন্সি এবং থ্রুপুট রয়েছে They তারা কেবল বিভাজন ইউনিটকে অবরুদ্ধ করে, এটি সম্পূর্ণরূপে কার্যকর করা বন্দরটি চালু করে দেয় না Inte প্রতি 20 ডলার মুলের জন্য এবং যোগ করুন, এবং সিপিইউ করার জন্য অন্যান্য কাজ রয়েছে (যেমন একটি স্বতন্ত্র লুপ পুনরাবৃত্তি), তবে এফপি ডিভির "ব্যয়" প্রায় এফপি মুলের সমান হতে পারে। এটি হ'ল কম থ্রুপুট এমন কোনও কিছুর সর্বোত্তম উদাহরণ এটি যখন আপনি করছেন সমস্ত কিছু, তবে কম মোট উওসের কারণে অন্য কোডের সাথে খুব ভাল মিশ্রিত হয় (যখন বিলম্বিতা কোনও উপাদান নয়)।
মনে রাখবেন যে পূর্ণসংখ্যা বিভাগ আশেপাশের কোডগুলির মতো প্রায় বন্ধুত্বপূর্ণ নয়: হাসওলে, এটি 9 টি উওপ, প্রতি 8-11c থ্রুপুট এবং 22-29c ল্যাটেন্সি সহ with (Bit৪ বিট বিভাজনটি অনেক ধীর গতির, এমনকি স্কাইলেকেও)
থ্রুপুট, বিলম্বিতা এবং মোট উফসের জন্য ইনসগুলির সংক্ষিপ্ত ক্রম বিশ্লেষণের উদাহরণগুলির জন্য, আমার কিছু এসও উত্তর দেখুন:
আইডি কে যদি অন্য ধরণের বিশ্লেষণ সহ এসও উত্তর লিখেন ID আমার নিজের অনুসন্ধান করার জন্য আমার অনেক সহজ সময় রয়েছে, কারণ আমি জানি আমি প্রায়শই এই বিশদটি নিয়ে যাই এবং আমি কী লিখেছি তা মনে করতে পারি।