"আইএফ" ব্যয়বহুল?


101

আমি পারি না, আমার জীবনের জন্য, আমাদের শিক্ষক সেইদিন ঠিক কী বলেছেন এবং আমি আশা করি আপনি সম্ভবত তা জানেন।

মডিউলটি হ'ল "ডেটা স্ট্রাকচারস এবং অ্যালগরিদম" এবং তিনি আমাদের এই লাইনের সাথে কিছু বলেছেন:

ifবিবৃতি সবচেয়ে ব্যয়বহুল [কিছু] হল। [কিছু] নিবন্ধিত [কিছু]।

হ্যাঁ, আমার একটি ভয়াবহ স্মৃতি রয়েছে এবং আমি সত্যিই দুঃখিত, তবে আমি কয়েক ঘন্টা ধরে গুগল করছি এবং কিছুই সামনে আসে নি। কোন ধারনা?


29
আপনার শিক্ষক জিজ্ঞাসা একটি বিকল্প?
মাইকেল ময়র্স

7
আপনি আপনার শিক্ষককে ইমেল করেন না কেন? এসও-তে থাকা কোনও ব্যক্তিই জানেন না যে আপনার শিক্ষক কী বলেছিলেন, যদি না তারা তখন সেখানে উপস্থিত থাকে (বা আপনার শিক্ষক নিজে এসও পড়েন)।
বিল কারভিন

11
এবং অবশ্যই বাধ্যতামূলক রেলপথের উত্তরের
bobobobo

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

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

উত্তর:


189

খুব নিম্ন স্তরে (হার্ডওয়্যারে), হ্যাঁ, যদি ব্যয় হয়। কেন বুঝতে হবে, আপনাকে বুঝতে হবে কীভাবে পাইপলাইনগুলি কাজ করে।

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

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

শর্তাধীন বনাম শর্তহীন বুঝতে সহজ - একটি শর্তাধীন শাখা কেবল তখনই নেওয়া হয় যখন কোনও নির্দিষ্ট শর্ত ধরে থাকে (যেমন একটি সংখ্যা অন্যটির সমান কিনা); যদি শাখাটি নেওয়া না হয় তবে নিয়ন্ত্রণটি নিয়মের মতো শাখার পরে পরবর্তী নির্দেশে এগিয়ে যায়। নিঃশর্ত শাখার জন্য, শাখাটি সর্বদা নেওয়া হয়। শর্তাধীন শাখা ifবিবৃতিতে forএবং whileলুপগুলির নিয়ন্ত্রণ পরীক্ষায় প্রদর্শিত হয় । শর্তহীন শাখাগুলি অসীম লুপ, ফাংশন কল, ফাংশন রিটার্ন breakএবং continueবিবৃতি, কুখ্যাত gotoবিবৃতি এবং আরও অনেক কিছুতে প্রদর্শিত হয় (এই তালিকাগুলি সম্পূর্ণ বিস্তৃত নয়)।

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

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

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


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

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

19

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

আমি এটা সম্পর্কে চিন্তা wouldnt. যদি আপনি এমবেডেড প্রোগ্রামিং না করেন তবে সম্ভবত আপনার " if" ব্যয়ের বিষয়ে মোটেই উদ্বিগ্ন হওয়া উচিত নয় । সবচেয়ে প্রোগ্রামারদের জন্য এটা ঠিক যাচ্ছে না কি আপনার অ্যাপ্লিকেশনের কর্মক্ষমতা ড্রাইভিং ফ্যাক্টর হতে।


4
অবশ্যই আপেক্ষিক ... সিএমপি / কনড জেএমপি এখনও অনেক প্রসেসরের উপর একটি মুলের চেয়ে দ্রুত।
ব্রায়ান নোব্লাচ

4
হ্যাঁ, আমি সম্মত হই যে আমার এটি সম্পর্কে উদ্বিগ্ন হওয়া উচিত নয়। আমি এখানে কিছু অপ্টিমাইজ করার চেষ্টা করছি না। আমি শুধু খুঁজে বের করার এবং শেখার চেষ্টা করছি। ;)
pek

15

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


13

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

এই প্রশ্নের জবাবে ইতিমধ্যে পোস্ট করা দুর্দান্ত উত্তরের পাশাপাশি, আমি একটি স্মরণ করিয়ে দিতে চাই যে "যদি" বিবৃতিগুলি ব্যয়বহুল নিম্ন-স্তরের অপারেশন হিসাবে বিবেচনা করা হয় তবে উচ্চতর স্তরের পরিবেশে শাখা-মুক্ত প্রোগ্রামিং কৌশলগুলি ব্যবহার করার চেষ্টা করা হচ্ছে যেমন একটি স্ক্রিপ্টিং ভাষা বা ব্যবসায়ের লজিক স্তর (ভাষা নির্বিশেষে) হাস্যকরভাবে অনুপযুক্ত হতে পারে।

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


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

10

ifনিজেই ধীর হয় না । স্বচ্ছলতা সর্বদা আপেক্ষিক আমি আমার জীবনের জন্য বাজি ধরে থাকি যে আপনি যদি কোনও আইএফ-স্টেটমেন্টের "ওভারহেড" অনুভব করেন নি। আপনি যদি একটি উচ্চ-পারফরম্যান্স কোড তৈরি করতে যাচ্ছেন তবে আপনি যেভাবেই শাখাগুলি এড়াতে চান। ifধীরে ধীরে কী প্রসেসরটি ifকিছু হিউরিস্টিক এবং হোয়াট নোটের উপর ভিত্তি করে কোডটি প্রিলোডিং হচ্ছে । এটি ifমেশিন কোডে শাখা নির্দেশের পরে সরাসরি কোড সম্পাদন করা থেকে পাইপলাইনগুলিও থামিয়ে দেবে , যেহেতু প্রসেসর এখনও জানেন না কোন পাথটি নেওয়া হবে (পাইপলাইনযুক্ত প্রসেসরে একাধিক নির্দেশাবলী আন্তঃবাহিত এবং কার্যকর করা হয়)। কার্যকর করা কোডটি বিপরীতে কার্যকর করা যেতে পারে (যদি অন্য শাখা নেওয়া হয় it's এটি বলা হয় branch misprediction), বা noopসেই জায়গাগুলিতে পূরণ করা যাতে এটি না ঘটে।

যদি ifমন্দ হয় তবে switchমন্দ খুব, এবং &&, ||খুব। এটি সম্পর্কে চিন্তা করবেন না।


7

সর্বনিম্ন সম্ভাব্য স্তরে if(বিশেষত সমস্ত অ্যাপ-নির্দিষ্ট পূর্বশর্ত গণনা করার পরে if) থাকে:

  • কিছু পরীক্ষা নির্দেশ
  • পরীক্ষা সফল হলে কোডের কিছু জায়গায় লাফিয়ে যান, অন্যথায় এগিয়ে যান।

এর সাথে যুক্ত ব্যয়:

  • একটি নিম্ন স্তরের তুলনা - সাধারণত 1 সিপিইউ অপারেশন, অতি সস্তা
  • সম্ভাব্য লাফ - যা ব্যয়বহুল হতে পারে

জাম্প কেন ব্যয়বহুল:

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

সুতরাং সংক্ষেপে:

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

এটি পরবর্তী স্তরে নিয়ে যান: নেস্টেড এবং / অথবা যৌগিক বিবরণী সম্পর্কে কী হবে? কেউ যদি এরকম বিবৃতি দেয় তবে প্রচুর পরিমাণে লিখলে ব্যয়টি দ্রুত লক্ষণীয় হয়ে উঠতে পারে। এবং যেহেতু বেশিরভাগ বিকাশকারীদের কাছে যদি বিবৃতিগুলি এই জাতীয় মৌলিক ক্রিয়াকলাপ বলে মনে হয়, তবে সংঘবদ্ধ শর্তসাপেক্ষ শাখা এড়ানো প্রায়শই একটি স্টাইলিস্ট উদ্বেগের জন্য প্রেরণা প্রকাশ করে। স্টাইলিস্টিক উদ্বেগগুলি এখনও গুরুত্বপূর্ণ, তবে বেশিরভাগ মুহুর্তের উত্তাপে তারা এড়িয়ে যাওয়া প্রথম উদ্বেগ হতে পারে।
jaydel

7

আধুনিক প্রসেসরের দীর্ঘ সঞ্চালনের পাইপলাইন রয়েছে যার অর্থ একই সময়ে বিভিন্ন পর্যায়ে বেশ কয়েকটি নির্দেশাবলী কার্যকর করা হয়। পরেরটি যখন চালানো শুরু করবে তখন তারা কোনও নির্দেশের ফলাফল সর্বদা জানে না। যখন তারা শর্তসাপেক্ষে লাফাতে (যদি) চালায় তবে তাদের মাঝে মাঝে নির্দেশ পয়েন্টারটি কীভাবে যেতে হবে তা জানতে পারার আগে পাইপলাইনটি খালি না হওয়া পর্যন্ত অপেক্ষা করতে হবে।

আমি এটিকে একটি দীর্ঘ মালবাহী ট্রেন হিসাবে ভাবি। এটি একটি সোজা লাইনে প্রচুর পরিমাণে পণ্যসম্ভার বহন করতে পারে তবে এটি খারাপভাবে কোণে।

পেন্টিয়াম 4 (প্রেসকোট) এর 31 টি পর্যায়ের একটি দীর্ঘ দীর্ঘ পাইপলাইন ছিল।

উইকিপিডিয়ায় আরও


6

হতে পারে শাখাগুলি সিপিইউ নির্দেশিকা প্রিফেচিংকে হত্যা করে?


আমার ... "গবেষণার" পরে আমি জাম্প টেবিল এবং স্যুইচ স্টেটমেন্টগুলির জন্য শাখা সম্পর্কে শিখেছি তবে if বিবৃতি সম্পর্কে কিছুই নেই। আপনি কি তার উপর একটু ব্যাখ্যা করতে পারেন?
pek

আইআইআরসি, সিপিইউ সাধারণত একক সম্ভাব্য এক্সিকিউশন পাথের সাথে প্রিফেচিংয়ের নির্দেশনা থাকে তবে একটি 'যদি' বিবৃতি যা পূর্বাভাস কার্যকর মৃত্যুর পথ থেকে একটি শাখা সৃষ্টি করে এটি প্রিফেচড প্রশিক্ষণগুলিকে অকার্যকর করে দেবে এবং প্রিচচিং পুনরায় আরম্ভ করতে হবে।
activout.se

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

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

6

এছাড়াও মনে রাখবেন একটি লুপ ভিতরে না অগত্যা খুব ব্যয়বহুল।

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

(*) বিধিটি আসলে " ফরোয়ার্ড শাখা নেওয়া হয় নি, পশ্চাদপদ শাখা নেওয়া হয়েছে "। একটি যদি-বিবৃতিতে আছে শুধুমাত্র একটি [এগিয়ে] (বিন্দু থেকে লাফ যদি শরীরের পর ) যদি মিথ্যা (মনে রাখবেন: CPU- র কোন পথে একটি শাখা / লাফ না নেওয়া অনুমান) এর শর্ত মূল্যায়ণ, কিন্তু একটি লুপ , লুপের পরে অবস্থানে (একটি নেওয়া উচিত নয়) এবং পুনরাবৃত্তি করার পরে একটি পশ্চাৎ শাখা থাকতে পারে (নেওয়া হবে)।

ভার্চুয়াল ফাংশন বা একটি ফাংশন-পয়েন্টার-কলটিতে কল করা অনেকগুলি অনুমানের চেয়ে খারাপ না হওয়ার কারণগুলির মধ্যে এটিও একটি কারণ ( http://phresnel.org/blog/ )


5

অনেকের দ্বারা চিহ্নিত হিসাবে, শর্তসাপেক্ষ শাখা একটি আধুনিক কম্পিউটারে খুব ধীর হতে পারে।

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


4

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

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

যা যা বলেছিল - এই জিনিস সম্পর্কে উদ্বিগ্ন হওয়ার আগে আপনার যুক্তি সঠিক করুন। ভুল কোডটি আপনি যতটা পেতে পারেন ততটুকু আপমুক্ত is


আমি শুনেছি যে এআরএমের শর্তসাপেক্ষ নির্দেশাবলী আইএলপিকে বাধা দেয় যাতে তারা সম্ভবত সমস্যাটি প্রায় চাপ দিচ্ছেন।
জেডি

3

সিপিইউগুলি গভীরভাবে পাইপলাইনযুক্ত। যে কোনও শাখার নির্দেশনা (যদি / যখন / যখন / স্যুইচ / ইত্যাদি) মানে সিপিইউ বুঝতে পারে না যে পরবর্তী নির্দেশটি লোড এবং চালানোর জন্য কোন নির্দেশনা রয়েছে।

সিপিইউ হয় কী করতে হবে তা অপেক্ষা করার সময় স্টল করে, বা সিপিইউ অনুমান করে। পুরানো সিপিইউয়ের ক্ষেত্রে, বা যদি ধারণাটি ভুল হয় তবে আপনাকে পাইপলাইন স্টলটি পড়তে হবে এবং সঠিক নির্দেশনাটি লোড করার সময় আপনাকে ভুগতে হবে। সিপিইউর উপর নির্ভর করে এটি স্টলের 10-20 নির্দেশিকাগুলির চেয়ে বেশি হতে পারে।

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

ভাগ্য ভালো ক্লাসে।

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


2

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


1

কিছু সিপিইউ (এক্স এক্স এর মতো) এরকম শাখার পূর্বাভাসের প্রবণতা এড়াতে প্রোগ্রামিং স্তরে শাখার পূর্বাভাস সরবরাহ করে।

কিছু সংকলক উচ্চ স্তরের প্রোগ্রামিং ভাষার (সি / সি ++ এর মতো) এক্সটেনশন হিসাবে এগুলি প্রকাশ করে (জিসিসির মতো)।

পড়ুন সম্ভবত () / অসম্ভাব্য () Linux kernel- র মধ্যে ম্যাক্রো - কিভাবে তারা কাজ করে? তাদের লাভ কী?


0

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


-1

ALU ব্যবহারের ক্ষেত্রে সবচেয়ে ব্যয়বহুল? এটি তুলনা করার জন্য মানগুলি সংরক্ষণ করতে সিপিইউ রেজিস্টারগুলি ব্যবহার করে এবং প্রতিবেদনটি চালিত হলে প্রতিবার মানগুলি আনতে এবং তুলনা করতে সময় নেয়।

সুতরাং এর একটি অপ্টিমাইজেশন হ'ল একটি তুলনা করা এবং লুপটি চালানোর আগে ফলাফলটি পরিবর্তনশীল হিসাবে সংরক্ষণ করা।

আপনার অনুপস্থিত শব্দের ব্যাখ্যা করার চেষ্টা করছি।

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