সিপিইউ স্তরের কোন অপকডগুলি দ্রুত? [বন্ধ]


19

প্রতিটি প্রোগ্রামিং ল্যাঙ্গুয়েজে অপকোডের সেট রয়েছে যা অন্যের থেকে সুপারিশ করা হয়। আমি এখানে তাদের তালিকা করার চেষ্টা করেছি, গতি অনুসারে।

  1. bitwise
  2. পূর্ণসংখ্যা যোগ / বিয়োগ
  3. পূর্ণসংখ্যা গুণ / বিভাগ
  4. তুলনা
  5. নিয়ন্ত্রণ প্রবাহ
  6. ভাসা সংযোজন / বিয়োগ
  7. ভাসা গুণ / বিভাগ

যেখানে আপনার উচ্চ-পারফরম্যান্স কোডের প্রয়োজন, সিমডি নির্দেশাবলী বা আরও দক্ষ নিয়ন্ত্রণ প্রবাহ, ডেটা ধরণের ইত্যাদি ব্যবহার করতে, সমাবেশে সি ++ হ্যান্ড অনুকূল করা যেতে পারে So সুতরাং আমি ডেটা টাইপ (ইন্ট 32 / ফ্ল্যাট 32 / ফ্লোট 64) বা বুঝতে চেষ্টা করছি ব্যবহৃত অপারেশন ( *, +, &) CPU- র পর্যায়ে কর্মক্ষমতা প্রভাবিত করে।

  1. সিপিইউতে কোনও সংযোজনের চেয়ে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে বেড়ে যায়?
  2. এমসিইউ তত্ত্বে আপনি শিখলেন যে ওপকোডের গতি নির্ধারণ করতে যে পরিমাণ CPU চক্র লাগে তার দ্বারা নির্ধারিত হয়। সুতরাং এর অর্থ কি এই গুণটি 4 টি চক্র গ্রহণ করে এবং 2 যোগ করে?
  3. মৌলিক গণিত এবং নিয়ন্ত্রণ প্রবাহ অপকডগুলির গতি বৈশিষ্ট্যগুলি কী?
  4. দুটি অপকড যদি একই সংখ্যার চক্র কার্যকর করতে নেয়, তবে উভয়ই কোনও পারফরম্যান্স লাভ / ক্ষতি ছাড়াই বিনিময়যোগ্য হিসাবে ব্যবহার করা যেতে পারে?
  5. X86 সিপিইউ কার্যকারিতা সম্পর্কিত আপনি যে কোনও প্রযুক্তিগত বিবরণ ভাগ করতে পারেন তা প্রশংসাযোগ্য

17
এটি অকাল অপটিমাইজেশনের মতো প্রচুর শোনাচ্ছে এবং মনে রাখবেন যে সংকলকটি আপনি যা টাইপ করেন তা আউটপুট দেয় না এবং আপনি সত্যিই খুব বেশি না থাকলে আপনি সমাবেশ লিখতে চান না।
রায় টি।

3
ফ্লোটের গুণ এবং বিভাগ সম্পূর্ণ আলাদা জিনিস, আপনার এগুলি একই বিভাগে রাখা উচিত নয়। এন-বিট সংখ্যার জন্য, গুণ হ'ল একটি ও (এন) প্রক্রিয়া, এবং বিভাগ হ'ল ও (নলগন) প্রক্রিয়া। এটি আধুনিক সিপিইউগুলিতে গুণনের চেয়ে প্রায় 5 গুণ বিভাজনকে ধীর করে তোলে।
সাম হোচেভার

1
আসল উত্তরটি হ'ল "এটি প্রোফাইল করুন"।
টেট্রাড

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

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

উত্তর:


26

অ্যাগনার ফগের অপ্টিমাইজেশান গাইডগুলি দুর্দান্ত। তাঁর সাম্প্রতিক 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 আমার নিজের অনুসন্ধান করার জন্য আমার অনেক সহজ সময় রয়েছে, কারণ আমি জানি আমি প্রায়শই এই বিশদটি নিয়ে যাই এবং আমি কী লিখেছি তা মনে করতে পারি।


4-এ "পূর্বাভাসিত শাখা" অর্থবোধ করে - 20-25-তে "ভবিষ্যদ্বাণী করা শাখা" আসলে কী হওয়া উচিত? (আমি ভেবেছিলাম যে ভুল পূর্বাভাসিত শাখাগুলি (প্রায় ১৩ টি তালিকাভুক্ত) এর চেয়ে অনেক বেশি ব্যয়বহুল, তবে ঠিক এই কারণেই আমি এই পৃষ্ঠায় আছি, সত্যের কাছাকাছি কিছু শিখতে - দুর্দান্ত টেবিলের জন্য ধন্যবাদ!)
ম্যাট

@ ম্যাট: আমি মনে করি এটি একটি সম্পাদনা ত্রুটি ছিল এবং এটি "ভুল অনুমান করা শাখা" বলে মনে করা হয়েছিল। যে ইশারা জন্য ধন্যবাদ। নোট করুন যে ১৩ টি অসম্পূর্ণ-পূর্বাভাসিত শাখার জন্য, সর্বদা-ভুল অনুমান করা শাখা নয়, তাই আমি এটি স্পষ্ট করে দিয়েছি। আমি হ্যান্ডওয়াভিংটি আবার করেছি এবং কিছু সম্পাদনা করেছি। : পি
পিটার কর্ডেস

16

এটি প্রশ্নে থাকা সিপিইউর উপর নির্ভর করে, তবে একটি আধুনিক সিপিইউর জন্য তালিকাটি এরকম কিছু:

  1. বিটওয়াইজ, যোগ, বিয়োগ, তুলনা, গুণ
  2. বিভাগ
  3. প্রবাহ নিয়ন্ত্রণ করুন (উত্তর 3 দেখুন)

সিপিইউর উপর নির্ভর করে bit৪ বিট ডেটা ধরণের সাথে কাজ করার জন্য যথেষ্ট পরিমাণে টোল থাকতে পারে।

তোমার প্রশ্নগুলো:

  1. আধুনিক সিপিইউতে আদৌ নয় বা প্রশংসনীয় নয়। সিপিইউর উপর নির্ভরশীল।
  2. সেই তথ্যটি 20 থেকে 30 বছর পুরানো (স্কুল সাফল্য, আপনি এখন প্রমাণ পেয়েছেন) এর মতো কিছু, আধুনিক সিপিইউগুলি প্রতি ঘড়ি প্রতি নির্দেশের একটি পরিবর্তনশীল সংখ্যক পরিচালনা করে, কতজন শিডিয়ুলার নিয়ে আসে তার উপর নির্ভর করে depend
  3. বিভাগ বিশ্রামের তুলনায় কিছুটা ধীরে ধীরে, শাখার পূর্বাভাসটি সঠিক হলে নিয়ন্ত্রণ প্রবাহ খুব দ্রুত এবং এটি ভুল হলে খুব ধীর হয় (20 চক্রের মতো কিছু, সিপিইউতে নির্ভর করে)। ফলাফলটি হ'ল মূলত নিয়ন্ত্রণ প্রবাহ দ্বারা প্রচুর কোড সীমাবদ্ধ। ifপাটিগণিতের সাথে আপনি যুক্তিসঙ্গতভাবে যা করতে পারেন তার সাথে করবেন না ।
  4. কোনও নির্দেশনা কতটা চক্র গ্রহণ করে তার জন্য কোনও নির্দিষ্ট নম্বর নেই, তবে কখনও কখনও দুটি পৃথক নির্দেশ সমানভাবে সম্পাদন করতে পারে, তাদের অন্য প্রসঙ্গে রাখে এবং সম্ভবত তারা তা না করে, একটি আলাদা সিপিইউতে চালায় এবং আপনি সম্ভবত তৃতীয় ফলাফল দেখতে পাচ্ছেন।
  5. নিয়ন্ত্রণ প্রবাহের উপরে অন্য বড় সময় অপচয়কারী হ'ল ক্যাশে মিস হয়, যখনই আপনি ক্যাশে নেই এমন ডেটা পড়ার চেষ্টা করেন সিপিইউ এটির স্মৃতি থেকে আনার জন্য অপেক্ষা করতে হবে। সাধারণভাবে আপনার সমস্ত স্থান থেকে ডেটা তুলে নেওয়ার চেয়ে এক সাথে অন্যের কাছে ডেটা টুকরা হ্যান্ডেল করার চেষ্টা করা উচিত।

এবং পরিশেষে, আপনি যদি কোনও গেম তৈরি করে থাকেন তবে এই সমস্ত নিয়ে খুব বেশি চিন্তা করবেন না, সিপিইউ চক্র কাটার চেয়ে ভাল গেম তৈরিতে আরও ভাল মনোনিবেশ করুন।


আমি এও উল্লেখ করতে চাই যে এফপিইউ চমত্কার জঘন্য দ্রুত: বিশেষ করে ইন্টেলের উপর - তাই আপনি যদি নির্বিচারী ফলাফল চান তবে ফিক্সড পয়েন্টটি কেবল সত্যই প্রয়োজন।
জোনাথন ডিকিনসন

2
আমি কেবল শেষ অংশটির উপর আরও জোর দিয়েছি - একটি ভাল খেলা করুন। এটি কোডটি পরিষ্কার করতে সহায়তা করে - এ কারণেই 3. কেবলমাত্র তখনই প্রযোজ্য যখন আপনি প্রকৃতপক্ষে কোনও কার্য সম্পাদনের সমস্যা পরিমাপ করেন। যদি প্রয়োজন দেখা দেয় তবে এই আইএফএসকে আরও ভাল কিছুতে পরিবর্তন করা সর্বদা সহজ। অন্যদিকে, 5 হ'ল কৌশলযুক্ত - আমি অবশ্যই একমত যে এটি এমন একটি ক্ষেত্রে যেখানে আপনি সত্যিই প্রথমে ভাবতে চান, কারণ এর অর্থ সাধারণত আর্কিটেকচার পরিবর্তন করা।
লুয়ান

3

আমি পূর্ণসংখ্যার অপারেশন জাদুকরী সম্পর্কে একটি পরীক্ষা করেছিলাম x64_64 এ মিলিয়ন বার লুপ করেছি, নীচের মত সংক্ষিপ্ত সিদ্ধান্তে পৌঁছেছি,

যোগ করুন --- 116 মাইক্রোসেকেন্ড

উপ ---- 116 মাইক্রোসেকেন্ড

মুল ---- 1036 মাইক্রোসেকেন্ড

Div ---- 13037 মাইক্রোসেকেন্ড

উপরের ডেটাগুলি ইতিমধ্যে লুপ দ্বারা উত্সাহিত ওভারহেড হ্রাস করেছে,


2

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

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


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