X86 কুরুচিপূর্ণ কেন? অন্যের তুলনায় কেন এটিকে নিকৃষ্ট বলে বিবেচনা করা হয়? [বন্ধ]


105

সম্প্রতি আমি কিছু SO সংরক্ষণাগার পড়েছি এবং x86 আর্কিটেকচারের বিরুদ্ধে বিবৃতিগুলির মুখোমুখি হয়েছি।

এবং আরও অনেক মতামত

আমি অনুসন্ধানের চেষ্টা করেছি কিন্তু কোনও কারণ খুঁজে পাইনি। আমি x86 খারাপ দেখতে পাচ্ছি না কারণ এটিই আমি কেবল পরিচিত architect

অন্যের তুলনায় কেউ আমাকে x86 কুৎসিত / খারাপ / নিকৃষ্ট বিবেচনা করার জন্য দয়া করে কারণ জানাতে পারেন?


1
আমি এখন পর্যন্ত উত্তরগুলির ভিত্তিতে এস অ্যান্ড এ এর ​​সাথে যাচ্ছি, তবে আমি উল্লেখ করব যে সিআইএসসি m68k নির্দেশিকা সেট করার জন্য কোনও সমস্যা নয়। x86 এটি যা, এবং আপনি এটি রাখতে পারেন।
dmckee --- প্রাক্তন মডারেটর বিড়ালছানা

"এসএন্ডএ" কী? "M68k নির্দেশিকা সেটের জন্য সিআইএসসি কোনও সমস্যা নয়" " -- কেন না?
নখগুলি

5
মোটোরালা 68000 সিরিজের চিপগুলির একটি উচ্চ সিআইএসসি আর্কিটেকচার রয়েছে তবে তাদের ইউনিফর্ম, মোটামুটি অর্থেগোনাল এবং খুব সহজ নির্দেশের সেট রয়েছে। X86 থেকে পার্থক্য কেন? আমি জানি না। তবে খেয়াল করুন যে চিপের জটিলতা এবং নির্দেশের সেটটিতে জটিলতার মধ্যে একটি বড় পার্থক্য রয়েছে (অর্থাত্ একটি অ্যাসেম্বলি প্রোগ্রামার যে ইন্টারফেসটি দেখে)।
ডিএমকেকে --- প্রাক্তন মডারেটর বিড়ালছানা

4
একটি খুব আকর্ষণীয় প্রশ্নের জন্য +1।
টিউরিং

1
বিভিন্ন প্রসেসরের শক্তি দক্ষতার উপর সাম্প্রতিক গবেষণা এখানে পাওয়া গেছে, যা সিআইএসসি এবং আরআইএসসি ডিজাইনগুলিকে চালিত করেছিল এ সম্পর্কে একটি ভাল আলোচনা সহ। extremetech.com/extreme/...

উত্তর:


93

এর সম্ভাব্য কয়েকটি কারণ:

  1. x86 হ'ল তুলনামূলকভাবে পুরানো আইএসএ (এর পূর্বসূরীরা 8086 এর পরে ছিল)
  2. x86 বেশ কয়েকবার উল্লেখযোগ্যভাবে বিকশিত হয়েছে, তবে পুরানো বাইনারিগুলির সাথে পিছনের দিকে সামঞ্জস্য বজায় রাখতে হার্ডওয়্যার প্রয়োজন। উদাহরণস্বরূপ, আধুনিক x86 হার্ডওয়্যার এখনও স্থানীয়ভাবে 16 বিট কোড চালানোর জন্য সমর্থন করে contains অতিরিক্ত হিসাবে, একই প্রসেসরে যেমন রিয়েল মোড, সুরক্ষিত মোড, ভার্চুয়াল 8086 মোড এবং (amd64) লং মোডে পুরানো কোডটিকে আন্তঃচালিত করার অনুমতি দেওয়ার জন্য বেশ কয়েকটি মেমরি-ঠিকানা ঠিকানা রয়েছে exist এটি কারও কাছে বিভ্রান্তিকর হতে পারে।
  3. x86 একটি সিআইএসসি মেশিন। দীর্ঘদিন ধরে এটির অর্থ এটি এমআইপিএস বা এআরএমের মতো আরআইএসসি মেশিনের চেয়ে ধীর ছিল কারণ নির্দেশাবলীর মধ্যে ডেটা আন্তঃনির্ভরতা এবং পতাকা রয়েছে যা বেশিরভাগ রূপ নির্দেশনা স্তরের সমান্তরালতা বাস্তবায়ন করা শক্ত করে তোলে। আধুনিক বাস্তবায়নগুলি x86 নির্দেশকে আরআইএসসি-র মত নির্দেশগুলিতে " মাইক্রো-অপস " নামক কভারের আওতায় অনুবাদ করে যাতে এই ধরণের অপটিমাইজেশনকে হার্ডওয়্যারে প্রয়োগের জন্য ব্যবহারিক করে তোলা যায়।
  4. কিছু ক্ষেত্রে, x86 নিম্নমানের নয়, এটি অন্যরকম। উদাহরণস্বরূপ, ইনপুট / আউটপুটটি বেশিরভাগ আর্কিটেকচারে মেমরি ম্যাপিং হিসাবে পরিচালিত হয়, তবে x86 এ নয়। (এনবি: আধুনিক x86 মেশিন সাধারণত ডিএমএ সমর্থনের কিছু ফর্ম থাকে এবং মেমরি ম্যাপিংয়ের মাধ্যমে অন্যান্য হার্ডওয়্যারের সাথে যোগাযোগ করে; তবে আইএসএর কাছে এখনও আই / ও এর মতো নির্দেশনা রয়েছে INএবং OUT)
  5. X86 আইএসএর খুব কম আর্কিটেকচারাল রেজিস্টার রয়েছে, যা প্রোগ্রামগুলি অন্যথায় প্রয়োজনের চেয়ে বার বার মেমরির মাধ্যমে রাউন্ড ট্রিপ করতে বাধ্য করতে পারে। এটি করার জন্য অতিরিক্ত অতিরিক্ত নির্দেশাবলীর জন্য কার্যকর স্টোর-ফরওয়ার্ডিং হলেও কার্যকর কাজের জন্য ব্যয় করা যেতে পারে এমন কার্যকরকরণের রিসোর্সগুলি লাগে takeলেটেন্সি কম রাখে। একটি বৃহত দৈহিক নিবন্ধের ফাইলটিতে নামকরণের সাথে আধুনিক বাস্তবায়নগুলি অনেকগুলি নির্দেশকে ফ্লাইটে রাখতে পারে, তবে স্থাপত্য নিবন্ধগুলির অভাব এখনও 32-বিট x86 এর জন্য একটি উল্লেখযোগ্য দুর্বলতা ছিল। ৮৮ থেকে ১ inte টি পূর্ণসংখ্যার এবং ভেক্টর রেজিস্টারগুলিতে x86-64 এর বৃদ্ধি 32-বিট (আরও দক্ষ রেজিস্ট্রার-কল এবিআই সহ) এর চেয়ে দ্রুত হওয়া in৪ বিট কোডের অন্যতম বড় কারণ, প্রতিটি নিবন্ধের বর্ধিত প্রস্থ নয়। ১ 16 থেকে ৩২ পর্যন্ত পূর্ণসংখ্যার নিবন্ধগুলি আরও কিছুটিকে সহায়তা করবে তবে তেমনটি নয়। (AVX512 32 টি ভেক্টর রেজিস্টারে বৃদ্ধি পেয়েছে, যদিও, ভাসমান-পয়েন্ট কোডটির উচ্চতর বিলম্ব রয়েছে এবং প্রায়শই আরও ধ্রুবকের প্রয়োজন হয়)) ( মন্তব্য দেখুন )
  6. x86 অ্যাসেমব্লিং কোড জটিল কারণ x86 অনেকগুলি বৈশিষ্ট্যযুক্ত একটি জটিল স্থাপত্য। টিপিক্যাল এমআইপিএস মেশিনের জন্য একটি নির্দেশিকার তালিকাটি একটি একক বর্ণের আকারের কাগজের খাপে ফিট করে। X86 এর সমতুল্য তালিকা বেশ কয়েকটি পৃষ্ঠাগুলি পূরণ করে এবং নির্দেশাবলী কেবল আরও বেশি করে, তাই আপনাকে প্রায়শই তালিকা সরবরাহ করতে পারে তার চেয়ে তারা কী করে তার আরও বড় ব্যাখ্যা প্রয়োজন। উদাহরণস্বরূপ, MOVSBনির্দেশটি এটি কী করে তা বর্ণনা করতে সি কোডের তুলনামূলকভাবে বড় ব্লক প্রয়োজন:

    if (DF==0) 
      *(byte*)DI++ = *(byte*)SI++; 
    else 
      *(byte*)DI-- = *(byte*)SI--;
    

    এটি একটি লোড, স্টোর এবং দুটি সংযোজন বা বিয়োগ (একটি পতাকা ইনপুট দ্বারা নিয়ন্ত্রিত) করার একক নির্দেশ, যার প্রত্যেকটিই একটি আরআইএসসি মেশিনে পৃথক নির্দেশনা be

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

  7. X86 পরিবর্তনশীল-দৈর্ঘ্যের ওপকোড ব্যবহার করে, যা নির্দেশাবলী বিশ্লেষণের ক্ষেত্রে হার্ডওয়্যার জটিলতা যুক্ত করে। আধুনিক যুগে সিপিইউগুলি কাঁচা গণনার চেয়ে মেমরির ব্যান্ডউইদথ দ্বারা আরও সীমাবদ্ধ হয়ে উঠায় আধুনিক ব্যয়টি এই ব্যয়টি ছোট হয়ে চলেছে, তবে অনেকগুলি "x86 বেশিং" নিবন্ধ এবং দৃষ্টিভঙ্গি এমন এক যুগ থেকে আসে যখন এই ব্যয় তুলনামূলকভাবে অনেক বেশি ছিল।
    আপডেট 2016: আনন্দটেক এক্স 64 এবং এআরচ 64 এর অধীনে অপকোড আকারগুলি সম্পর্কিত একটি আলোচনা পোস্ট করেছেন ।

সম্পাদনা: এটি x86 বাশ হওয়ার কথা নয় ! পার্টি। আমার প্রশ্নের কিছুটা বাছাই ছিল না, প্রশ্নটি যেভাবে বলছে সেভাবে দেওয়া হয়েছে। তবে (1) বাদে এই সমস্ত জিনিস ভাল কারণে করা হয়েছিল (মন্তব্য দেখুন)। ইন্টেল ডিজাইনাররা বোকা নয় - তারা তাদের আর্কিটেকচারের সাহায্যে কিছু জিনিস অর্জন করতে চেয়েছিল, এবং এইগুলি বাস্তবায়িত করার জন্য তাদেরকে যে কর দিতে হয়েছিল তা এগুলি।


17
এটি একটি বাণিজ্য। এটি একটি শক্তি যাতে বাইনারি আকার ছোট হতে পারে তবে এটি একটি দুর্বলতা যে এই নির্দেশাবলীর জন্য পার্সার বাস্তবায়নের জন্য আপনার খুব জটিল হার্ডওয়্যার থাকা দরকার। নির্দেশের সিংহভাগই যাই হোক না কেন একই আকারের - x86 এ পরিবর্তনশীল দৈর্ঘ্যের অপকডের বেশিরভাগ কারণ হ'ল তারা যখন বৈশিষ্ট্যগুলি যুক্ত করার সিদ্ধান্ত নিয়েছিলেন এবং তারা খুঁজে পেয়েছিলেন যে তারা যে বিটগুলির সাথে কাজ করতে হয়েছিল তার সংখ্যায় কী চান তা উপস্থাপন করতে পারেননি । বেশিরভাগ লোক বাইনারি আকার নিয়ে প্রায় হার্ডওয়্যার জটিলতা বা বিদ্যুৎ ব্যবহারের ক্ষেত্রে উদ্বিগ্ন নন।
বিলি ওনিল

8
@ জ্যো অ্যাডামস: এআরএমের থাম্ব মোডের সাথে x86 এর পরিবর্তনশীল দৈর্ঘ্যের নির্দেশাবলীর সাথে বিভক্ত করুন ( en.wikedia.org/wiki/ARM_architecture#Thumb )। থাম্ব মোডের ফলাফলটি এআরএমের জন্য উল্লেখযোগ্যভাবে ছোট অবজেক্ট কোডে দেয় কারণ ছোট নির্দেশাবলী সরাসরি সাধারণ নির্দেশিকায় ম্যাপ করে। তবে যেহেতু বৃহত্তর নির্দেশাবলী এবং ছোটগুলির মধ্যে 1: 1 ম্যাপিং রয়েছে তাই পার্সিং হার্ডওয়্যারটি কার্যকর করা সহজ। X86 এর পরিবর্তনশীল দৈর্ঘ্যের নির্দেশাবলীগুলিতে এই সুবিধা নেই কারণ সেগুলি প্রথম স্থানে সেভাবে ডিজাইন করা হয়নি।
বিলি ওনিল

7
()) প্রতিটি অপ-কোড প্রতিটি প্রোগ্রামের দ্বারা ব্যবহার করার প্রয়োজন হয় না, তবে ড্যামমেট, যখন আমার এসএসই 3 প্রয়োজন হয়, আমি খুশী আমি তা পেয়েছি।
ক্রিস কে

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

5
এক্স 86 নির্দেশকে এমন কুৎসিত সেট তৈরি করার মধ্যে কোনটি, যেহেতু এটি কোনও সঞ্চালক বা কোনও রেজিস্টার-ফাইল ভিত্তিক আর্কিটেকচার কিনা তা সিদ্ধান্ত নিতে পারে না (যদিও এটি বেশিরভাগ 386 দিয়ে স্থির করা হয়েছিল, যা নির্দেশকে আরও অরথোগোনাল সেট করে দিয়েছে , 68k ভক্ত আপনাকে যা বলে তা নির্বিশেষে)।
নিনজালজ

25

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

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

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

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

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

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

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


6
আমি CISC কোন bashing কথা শুনতে পাবেন কোনটাই যদি না এবং যতক্ষণ না আপনি m68k ব্যাখ্যা করতে পারেন।
dmckee --- প্রাক্তন মডারেটর বিড়ালছানা

2
আমি m68k এর সাথে পরিচিত নই, তাই আমি এটি সমালোচনা করতে পারি না।
dthorpe

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

4
@ বিলি: আকারটি কেবল কোড আকার বা নির্দেশের আকারের চেয়ে বেশি। এই সমস্ত বিশেষ নির্দেশাবলীর জন্য হার্ডওয়্যার যুক্তি বাস্তবায়নের জন্য চিপ পৃষ্ঠতল অঞ্চলে इंटেল যথেষ্ট পরিমাণ জরিমানা প্রদান করে, হুডের নীচে আরআইএসসি মাইক্রোকোড কোর। ডাইয়ের আকারটি উত্পাদন করতে সরাসরি প্রভাবিত করে, তাই এটি আধুনিক সিস্টেম ডিজাইনের সাথে এখনও বৈধ উদ্বেগ।
dthorpe

1
@ ডিথর্প: আপনি যা লিখেছেন তার সব না হলেও আমি সবচেয়ে বেশি একমত নই। 8086 সাল থেকে, আপনি যদি কোনওরকম কোনওর addপরে মৃত্যুদন্ড কার্যকর করা নিরাপদ হন তবে আপনাকে ভাবতে হবে না add। বিধি পরিষ্কার। আপনার নির্দেশ পুনর্নির্দেশের সাথে মোকাবিলা করারও দরকার নেই। 90-এর দশকের মাঝামাঝি পেন্টিয়াম প্রো থেকে, সিপিইউ আপনার জন্য এটি করে। আপনি যা উল্লেখ করছেন তা 20 বছর আগে একটি সমস্যা হতে পারে তবে আজকাল x86 আর্কিটেকচারের বিরুদ্ধে রাখার কোনও কারণ আমি দেখছি না।
নাথান ফেলম্যান

21

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

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


4
এখানে কারও কাছ থেকে একমাত্র উত্তরের জন্য +1 যিনি প্রকৃতপক্ষে ইস্যুটির historicalতিহাসিক পটভূমি রয়েছেন বলে মনে হচ্ছে।
বিলি ওনিল

3
স্মৃতি সবসময় ধীর হয়ে আছে। 1982 সালে জেড 80 এবং সিপি / এম দিয়ে যখন শুরু হয়েছিল তখনকার তুলনায় এটি সম্ভবত তুলনামূলকভাবে তুলনামূলকভাবে কম (আজকের তুলনামূলকভাবে) ধীরে ধীরে। আমি বলব x86 এর 28 বছরের (এখনও পর্যন্ত অস্তিত্ব) ভালভাবে মানিয়ে নিয়েছে।
অলিফ ফোর্শেল

4
মেমোরির গতি সংক্ষেপে সিপিইউগুলির সাথে সামঞ্জস্যের কাছাকাছি গিয়েছিল ৮০ around৮ সালের দিকে Texas তবে সিপিইউ আবার এগিয়ে এসেছিল এবং সেখানেই থেকে গেছে। কেবল এখন, এটি পরিচালনা করতে সহায়তা করার জন্য ক্যাশে রয়েছে।
স্ট্যাটিক্সান

3
@ আলফ ফোর্শেল: এটি 8080 কোডে অনুবাদ করতে পারে যে 8080 অ্যাসেমব্লিং কোডটিতে এটি এসেম্বলারের সাথে সামঞ্জস্যপূর্ণ। দৃষ্টিকোণ থেকে, এটি 8080 প্লাস এক্সটেনশন ছিল, যেমন আপনি 8080 টি 8008 প্লাস এক্সটেনশন হিসাবে দেখতে পারেন।
ডেভিড থর্নলি

3
@ ওলোফ ফোর্শেল: 8086 কে তা হওয়ার জন্য তৈরি করা হয়েছিল। এটি 8080 এর একটি এক্সটেনশান ছিল এবং সর্বাধিক (সম্ভবত সমস্ত) 8080 নির্দেশাবলী একে অপরের সাথে ম্যাপ করা হয়েছিল, স্পষ্টতই অনুরূপ শব্দার্থবিজ্ঞানের সাথে। এটি আইবিএম 360 আর্কিটেকচারের ক্ষেত্রে সত্য নয়, আপনি এটি যেভাবেই চাপতে চান তা বিবেচ্য নয়।
ডেভিড থর্নলে

13

আমার এখানে কয়েকটি অতিরিক্ত দিক রয়েছে:

"A = b / c" x86 অপারেশনটি বিবেচনা করুন এটি প্রয়োগ করে implement

  mov eax,b
  xor edx,edx
  div dword ptr c
  mov a,eax

ডিভি ইন্সট্রাকশন এডেক্সের অতিরিক্ত বোনাস হিসাবে বাকী অংশটি থাকবে।

একটি আরআইএসসি প্রসেসরের প্রথমে খ এবং সি এর ঠিকানাগুলি লোড করা, মেমরি থেকে রেজিস্টারগুলিতে বি এবং সি লোড করা, বিভাগ করা এবং একটি এর ঠিকানা লোড করা এবং তারপরে ফলাফল সংরক্ষণ করা দরকার। ডিএসটি, এসআরসি সিনট্যাক্স:

  mov r5,addr b
  mov r5,[r5]
  mov r6,addr c
  mov r6,[r6]
  div r7,r5,r6
  mov r5,addr a
  mov [r5],r7

এখানে সাধারণত কোনও অবশিষ্ট নেই।

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

সুবিধা - অসুবিধা:

নির্দেশের সময়সূচীটি উন্নত করার জন্য আরআইএসসি নির্দেশকে আশেপাশের কোডের সাথে মিশ্রিত করা যেতে পারে, এটি x86 এর সাথে কম সম্ভাবনা যা এটি পরিবর্তে সিপিইউর ভিতরে এই কাজটি (ক্রম উপর নির্ভর করে আরও বা কম ভাল) করে। উপরের আরআইএসসি সিক্যুয়েন্সটি সাধারণত 32-বিট আর্কিটেকচারে 28 বাইট দীর্ঘ (প্রতিটি 32-বিট / 4 বাইট প্রস্থের 7 নির্দেশ) হবে be এটি নির্দেশাবলী (সাতটি ফেচ) আনার সময় অফ-চিপ মেমরির আরও কাজ করবে। ঘন x x ক্রমটি কম নির্দেশাবলী রয়েছে এবং যদিও এর প্রস্থ পরিবর্তিত হয় আপনি সম্ভবত সেখানেও গড়ে গড়ে 4 বাইট / নির্দেশ খুঁজছেন। আপনার কাছে সাতটি ফেচ বাড়িয়ে দেওয়ার নির্দেশিকা ক্যাশে থাকলেও x86 এর তুলনায় আপনার অন্য তিনটি ঘাটতি থাকতে হবে।

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

আরও ব্যক্তিগত নোটে আমি x86 এর চেয়ে আরআইএসসি অ্যাসেম্বলি লেখা আরও কঠিন মনে করি। আমি সিটিতে আরআইএসসি রুটিন লিখে, উত্পন্ন কোডটি সংকলন ও সংশোধন করে সমাধান করি। এটি একটি কোড উত্পাদনের দিক থেকে আরও দক্ষ এবং কার্যকরভাবে কার্যকর করার দিক থেকে কম দক্ষ। এই 32 টিতে নিবন্ধ রাখতে হবে। X86 এর সাহায্যে এটি অন্যান্য উপায়ে রয়েছে: "প্রকৃত" নামগুলির সাথে 6-8 নিবন্ধগুলি সমস্যাটিকে আরও পরিচালিত করে তোলে এবং আরও আত্মবিশ্বাস জাগায় যে উত্পাদিত কোড প্রত্যাশা অনুযায়ী কাজ করবে।

কুশ্রী? এটাই দর্শকের চোখে। আমি "আলাদা" পছন্দ করি।


আমার উদাহরণগুলিতে ক, খ এবং সি মেমোরি-ভিত্তিক ভেরিয়েবল হিসাবে দেখা উচিত এবং তাত্ক্ষণিক মানগুলিতে নয়।
অলিফ ফোর্শেল

... "ডওয়ার্ড পিটিআর" কোনও ভেরিয়েবলের আকার নির্দিষ্ট করতে ব্যবহৃত হয় যার আকারটি জানা যায় না, উদাহরণস্বরূপ, এটি কেবল বাহ্যিক হিসাবে ঘোষণা করা হয় বা আপনি যদি অলস হয়ে থাকেন।
ওলোফ ফোর্শেল

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

প্রথম দিনগুলিতে সমস্ত প্রসেসর ছিলেন আরআইএসসি। সিআইএসসি ফেরিক কোর মেমোরি সিস্টেমগুলির প্রশমন কৌশল হিসাবে আসে যা খুব ধীর ছিল, সুতরাং সিআইএসসি কম, আরও শক্তিশালী নির্দেশাবলীর সাহায্যে মেমরি সাবসিস্টেমের উপর কম চাপ দেয় এবং ব্যান্ডউইথের আরও ভাল ব্যবহার করে। তেমনি, নিবন্ধগুলি প্রাথমিকভাবে অন-চিপ হিসাবে বিবেচিত হত, জমা করার জন্য সিপিইউ-র মেমরি লোকেশন। সর্বশেষে যখন আমি আরআইএসসি মেশিনটিকে গুরুত্ব সহকারে বেঞ্চমার্ক করেছি 1993 - স্পার্ক এবং এইচপি প্রিজিম। বোর্ড জুড়ে স্পার্ক ভয়ঙ্কর ছিল। প্রিসিম অ্যাড / সাব / মুলে 486 হিসাবে দ্রুতগতিতে 20x অবধি ছিল তবে ট্রান্সসেন্ডেন্টালগুলিতে চুষেছিল। সিআইএসসি আরও ভাল।

আপনি বলতে @OlofForshell there typically won't be a reminderকিন্তু উইকি বলেছেন mips এটা আছে যে: en.wikipedia.org/wiki/MIPS_instruction_set#Integer
অ্যালেক্স Zhukovskiy

10

আমি মনে করি এই প্রশ্নটির একটি ভুল ধারণা রয়েছে। এটি মূলত কেবল আরআইএসসি-আবেশিত শিক্ষাবিদ যারা x86 কে কুৎসিত বলে। বাস্তবে, x86 আইএসএ একক নির্দেশনা ক্রিয়াকলাপে করতে পারে যা RISC আইএসএগুলিতে 5-6 নির্দেশিকা নিতে পারে। আরআইএসসি অনুরাগীরা সেই আধুনিক x86 সিপিইউগুলিকে এই "জটিল" নির্দেশাবলী মাইক্রোপসে বিভক্ত করতে পারে; যাহোক:

  1. অনেক ক্ষেত্রে এটি আংশিকভাবে সত্য বা মোটেও সত্য নয়। X86-এর সবচেয়ে দরকারী "জটিল" নির্দেশাবলী হ'ল mov %eax, 0x1c(%esp,%edi,4)অর্থ সম্বোধন করার মতো জিনিস এবং এগুলি ভেঙে যায় না।
  2. আধুনিক মেশিনে প্রায়শই যা গুরুত্বপূর্ণ তা হ'ল ব্যয় করা চক্রের সংখ্যা নয় (কারণ বেশিরভাগ কাজগুলি সিপিইউ-আবদ্ধ নয়) তবে কোডের নির্দেশের ক্যাশে প্রভাব। 5-6 ফিক্সড-সাইজ (সাধারণত 32 বিট) নির্দেশাবলী ক্যাশেটিকে একটি জটিল নির্দেশের চেয়ে অনেক বেশি প্রভাব ফেলবে যা খুব কমই 5 বাইটের বেশি হয়।

x86 প্রায় 10-15 বছর আগে আরআইএসসির সমস্ত ভাল দিকগুলি সত্যই সংশ্লেষ করেছিল এবং আরআইএসসির বাকী গুণাবলী (আসলে সংজ্ঞায়িত এক - ন্যূনতম নির্দেশিকা সেট) ক্ষতিকারক এবং অবাঞ্ছিত।

সিপিইউ উত্পাদন ও তার শক্তির প্রয়োজনীয়তার ব্যয় এবং জটিলতা বাদে x86 সেরা আইএসএ । যে কেউ আপনাকে অন্যথায় বলে সে আদর্শ বা এজেন্ডাটিকে তাদের যুক্তির পথে যেতে দেয়।

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


3
যেখানে শক্তি খরচ শীর্ষস্থানীয় উদ্বেগ, এআরএম বা এমআইপিএস সম্ভবত আরও বোধগম্য হয় ... সুতরাং, যদি কমপক্ষে একটি দিক থাকে যেখানে আর্ম বা এমআইপিএস আরও বোঝায়, তবে এটি x86 কে সেরা আইএসএ বানায় না ?
শাহবাজ

এ কারণেই আমি "ব্যয় ... এবং তাদের শক্তির প্রয়োজনীয়তাগুলি" বাদ দিয়ে "সেরা" যোগ্যতা অর্জন করেছি।
আর .. গীটহাব থামিয়ে দিন IEL

1
আমি মনে করি সিপিইউর গতি কমানোর জন্য ইন্টেলের থ্রোল্টিং, এবং আরও ছোট ডাই আকারগুলি শক্তি পার্থক্যকে অনেকাংশে হ্রাস করেছে eliminated Cele৪ কে এল 1 এবং 1 এমবি এল 2 ক্যাশে নতুন স্যালারন ডুয়াল -৪-বিট সিপিইউ একটি 7.5 ওয়াট চিপ। এটি আমার "স্টারবাকস" হ্যাঙ্গআউট মেশিন এবং ব্যাটারির আয়তন হাস্যকরভাবে দীর্ঘ এবং এটি পি 6 মেশিনের চারপাশে রিংগুলি চালিত করবে। একজন ছেলে হিসাবে বেশিরভাগ ভাসমান পয়েন্ট গণনা করা আমি অনেক দিন আগে আরআইএসসিতে ছেড়ে দিয়েছিলাম। এটা শুধু ক্রল। বিশেষত স্পার্ক ছিল নৃশংসভাবে হিমবাহ। আরআইএসসি কেন সফল হয় তার সঠিক উদাহরণটি হ'ল ইন্টেল আই 860 সিপিইউ। ইন্টেল আর কখনও যায় নি।

@ রকেটরয়: ২৪/7 চালিত ডিভাইসটির জন্য (এবং পুরো সময় কার্যকর গণনা সম্পাদন করে না) বা ৩.7 ভি / ২০০০ এমএএইচ ব্যাটারি চালিত হওয়ার জন্য 7.৫ ওয়াট সত্যিই গ্রহণযোগ্য নয়।
আর .. গীটহাব বন্ধ করুন ICE

2
@ রকেটরয় "ইন্টেল আই 860 সিপিইউ। ইনটেল আর কখনও সেখানে যায় নি।" কিছুটা গবেষণার পরে, আই 860 অনেকটা ইটানিয়ামের মতো শোনাচ্ছে : ভিআইএলডাব্লু, সংকলক-নির্দেশিত নির্দেশনা সমান্তরালতা ....
জোনাথন রেইনহার্ট

9

x86 এসেম্বলারের ভাষা এতটা খারাপ নয়। আপনি যখন মেশিনের কোডটিতে পৌঁছান তখন এটি সত্যিই কুৎসিত হতে শুরু করে। বেশিরভাগ আরআইএসসি সিপিইউগুলির চেয়ে নির্দেশাবলী এনকোডিংগুলি, অ্যাড্রেসিং মোডগুলি ইত্যাদি অনেক জটিল। এবং পিছনে সামঞ্জস্যের উদ্দেশ্যে অতিরিক্ত মজাদার অন্তর্নির্মিত রয়েছে - প্রসেসর একটি নির্দিষ্ট অবস্থায় থাকা অবস্থায় কেবল কিক্স এমন স্টাফ।

16-বিট মোডে, উদাহরণস্বরূপ, সম্বোধন নিখরচায় উদ্ভট বলে মনে হতে পারে; জন্য একটি ঠিকানা মোড আছে [BX+SI], কিন্তু একটি জন্য না [AX+BX]। এই জাতীয় বিষয়গুলি নিবন্ধের ব্যবহারকে জটিল করে তোলে, যেহেতু আপনার কোনও রেজিস্টারে আপনার মানটি প্রয়োজন যা আপনার প্রয়োজনমতো ব্যবহার করা যেতে পারে need

(ভাগ্যক্রমে, 32-বিট মোডটি অনেক বেশি স্যানার (যদিও এখনও কিছুটা নিজেকে অদ্ভুত বলে মনে হয় - উদাহরণস্বরূপ বিভাগ)) এবং 16-বিট x86 কোড বুট লোডার এবং কিছু এম্বেডযুক্ত পরিবেশের বাইরে অপেক্ষাকৃত অপ্রাসঙ্গিক)

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


2
আমি বিশ্বাস করি "প্রবেশ" বনাম "পুশ / মুভ" ইস্যুটি উত্থাপিত হয়েছিল কারণ কিছু প্রসেসরের উপর, "পুশ / মুভ" দ্রুত হয়। কিছু প্রসেসরের উপর, "প্রবেশ" দ্রুত হয়। সি'স্ট লা ভি।
ডায়েটারিচ এপ্পি

4
যখন আমাকে x86 ভিত্তিক মেশিনে বাধ্য করা হয়েছিল এবং এটি একবার দেখে নেওয়া শুরু হয়েছিল (m68k পটভূমি থাকা), তখন আমি asm প্রোগ্রামিংটিকে হতাশ হতে শুরু করি, ... যেমন আমি সি এর মতো কোনও ভাষা নিয়ে প্রোগ্রামিং শিখেছি, এবং তারপর asm এর সংস্পর্শে আসতে বাধ্য ... আপনি "অনুভব" করেছেন আপনি মত প্রকাশের ক্ষমতা, স্বাচ্ছন্দ্য, স্বচ্ছতা, "সংহতি", "স্বজ্ঞাততা"। আমি নিশ্চিত যে আমি x86 দিয়ে asm প্রোগ্রামিং শুরু করে দিলে আমি ভাবতাম এটি এতটা খারাপ নয় ... হতে পারে ... আমি এমএমআইএক্স এবং এমআইপিএসও করেছি, এবং তাদের "এসএম ল্যাং" x86 এর চেয়ে অনেক ভাল (যদি এই
কিউয়ের জন্য সঠিক পিওভি

অ্যাড্রেসিং মোড সমস্যাটি 80386 সালে সংশোধন করা হয়েছিল। কেবল 16 বিট কোডের মধ্যে ঠিকানা মোড সীমাবদ্ধ রয়েছে, 32 বিট কোডটি আরও ভাল। আপনি একটি বিশেষ উপসর্গ এবং তদ্বিপরীত ব্যবহার করে 16 বিট কোডে 32 বিট ঠিকানার মোডগুলি পেতে পারেন।
ফুজ

@ ফুজজেক্সএল: হ্যাঁ ... আমার সম্ভবত উল্লেখ করা উচিত ছিল যে কদর্যতা বেশিরভাগই 16 বিট কোডের মধ্যে সীমাবদ্ধ। স্থির (আমি মনে করি)। :)
সিএইচও

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

3

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

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

এনভিডিয়া থেকে শুনেছি যে ইন্টেলের একটি ভুল ছিল যে তারা বাইনারি ফর্ম্যাটগুলিকে হার্ডওয়্যারের কাছাকাছি রেখেছিল। সিইডুএর পিটিএক্স কিছু দ্রুত রেজিস্ট্রার ব্যবহারের গণনা (গ্রাফ কালারিং) করে, সুতরাং এনভিডিয়া স্ট্যাক মেশিনের পরিবর্তে একটি রেজিস্টার মেশিন ব্যবহার করতে পারে তবে এখনও একটি আপগ্রেডের পথ রয়েছে যা সমস্ত পুরানো সফ্টওয়্যার ভেঙে দেয় না।


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

3
@ ডায়েটারিচ এপ্প: এটি সম্পূর্ণ সত্য নয়। X86-64 এর আইএসএতে আরও নিবন্ধগুলি দৃশ্যমান রয়েছে তবে আধুনিক x86 বাস্তবায়নের ক্ষেত্রে সাধারণত একটি আরআইএসসি স্টাইলের রেজিস্ট্রার ফাইল থাকে যা কার্যকর করার গতি বাড়ানোর দাবিতে আইএসএর রেজিস্টারে ম্যাপ করা হয়।
বিলি ওনিল

"আমি এনভিডিয়া থেকে শুনেছি যে ইন্টেলের একটি ভুল ছিল যে তারা বাইনারি ফর্ম্যাটগুলিকে হার্ডওয়্যারের কাছাকাছি রেখেছিল।" - আমি এটি এবং সিইউডিএর পিটিএক্স অংশ পাইনি।
নখ 3

1
@ ডিয়েট্রিচ এপ্প: "এবং বেশিরভাগ x86 চিপগুলির নির্দেশাবলী ক্যাশেড হওয়ার আগে ডিকোড করা হয়, পরে" এটি সত্য নয়। সেগুলি ডিকোড করার আগে তারা ক্যাশে হয়। আমি বিশ্বাস করি পেন্টিয়াম 4 এর একটি অতিরিক্ত ট্রেস ক্যাশে ছিল যা ডিকোডের পরে ক্যাশে হয়েছিল, তবে তা বন্ধ হয়ে গেছে।
নাথান ফেলম্যান

এটি সত্য নয়, সর্বাধিক "স্যান্ডি ব্রিজ" প্রসেসরগুলি এক ধরণের ট্রেস ক্যাশে ব্যবহার করে (যেমন পেন্টিয়াম 4 এর জন্য, ওহ সেই বৃদ্ধ ছেলে: ডি), তাই প্রযুক্তিগুলি চলে যায় এবং ফিরে আসবে ...
কুনাক্স

3

কারণগুলি ছাড়াও লোকেরা ইতিমধ্যে উল্লেখ করেছে:

  • x86-16 এর পরিবর্তে একটি অদ্ভুত মেমরি অ্যাড্রেসিং স্কিম ছিল যা একটি একক মেমরি অবস্থান 4096 টি বিভিন্ন উপায়ে সম্বোধন করতে সক্ষম করে, 1 এমবি থেকে সীমাবদ্ধ র‌্যাম এবং প্রোগ্রামারগুলিকে দুটি ভিন্ন আকারের পয়েন্টারগুলি মোকাবেলা করতে বাধ্য করেছিল। ভাগ্যক্রমে, 32-বিটে সরানো এই বৈশিষ্ট্যটিকে অপ্রয়োজনীয় করে তুলেছে, তবে x86 চিপগুলি এখনও বিভাগের রেজিস্টারগুলির ক্রাফ্ট বহন করে।
  • যদিও না একটি ফল্ট এক্স 86 কোনটাই , x86- র আহ্বান নিয়মাবলী MIPS মত মান করা হয় নি ছিল (বেশিরভাগই কারণ MS-DOS এর কোন কম্পাইলার দিয়ে আসে না), এর জগাখিচুড়ি সঙ্গে আমাদের যাব __cdecl, __stdcall, __fastcall, ইত্যাদি

হুম .. আমি যখন x86 প্রতিযোগীদের কথা ভাবি, আমি এমআইপিএসের কথা ভাবি না। এআরএম বা পাওয়ারপিসি হতে পারে ....
বিলি ওনেল

@ বিলি: x86 প্রায় কাছাকাছি ছিল চিরকাল। এক সময় এমআইপিএস একজন x86 প্রতিযোগী ছিল। যেমনটি আমি মনে করি যে এমপিএসের সাথে এটি প্রতিযোগিতামূলক ছিল এমন কোনও স্তরে পৌঁছানোর জন্য x86 এর কাজ শেষ হয়েছিল। (এমআইপিএস এবং স্পার্ক ওয়ার্কস্টেশন অঙ্গনে এটির লড়াইয়ে ফিরে এসেছিল Back)
শ্যানন সিভেরেন্স

@ শ্যানন সিরিয়েনেন্স: কেবল যে কোনও একসময় যা কিছু ছিল তার অর্থ কিছু নয়।
বিলি ওনিল

2
@ সুপের্যাট: ফ্ল্যাট x86-32 মেমরি মডেলের যুগে লোকেরা যা ভুলে যেতে চায় তা হ'ল 16 বিট মানে 64k মেমোরি (যে কেউ গণিত করে বিরক্ত করে তা বুঝতে পারে যে যাদু সম্ভব নয়, যে 8086 ছিল না অসম্পর্কিত প্রোগ্রামারদের জন্য বাজে শাস্তি)। K৪ কে ঘুরে দেখার কয়েকটি উপায় আছে তবে ৮০৮86 সমাধানটি ছিল একটি ভাল আপস।
অলিফ ফোর্শেল

2
@ অলফফোরশেল: আমি মনে করি যে অনেক মানুষ এই সত্যের জন্য শোক করেছিলেন যে 8086 86৮০০০ এর মত সুন্দর ছিল না (যার মধ্যে একটি ১M এমবি লিনিয়ার সম্বোধন স্থান এবং ৪ টি জিগের স্পষ্ট পথ ছিল)। অবশ্যই 32-বিট প্রসেসরে যাওয়ার ফলে 64K এর বেশি অ্যাক্সেস করা সহজ হবে, তবে 8086 একটি 16-বিট আর্কিটেকচার যা 8-বিট 8080 থেকে এক ধাপ উপরে নকশাকৃত হয়েছিল I 8-বিট থেকে সরাসরি 32-বিট একের কাছে।
সুপারক্যাট

3

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

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

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


x68k অনেক মজাদার, এবং x86 এর চেয়ে অনেক বেশি মানুষের কাছে সুন্দর (যা অনেক m68k প্রোগ্রামারদের কাছে "এতটা" মানব "বলে মনে হয় না), যদি সেই সমাবেশে সঠিকভাবে পিওভি মানুষকে কোড লিখতে পারে।
শিনটেকজৌ

বিভাগটি: অফসেট ঠিকানা ঠিকানাটি কিছুটা সিপি / এম - বিশ্বের সাথে সামঞ্জস্যপূর্ণ থাকার চেষ্টা ছিল। সর্বকালের অন্যতম খারাপ সিদ্ধান্ত।
টিউরিং

@ টিউরিং সম্পূর্ণ: বিভাগ: অফসেট মূলত সিপি / এম বিশ্বের সাথে সুসংগত থাকার চেষ্টা ছিল না। কোডটি, ডেটা, স্ট্যাক এবং অন্যান্য মেমরি অঞ্চলগুলিকে বিভিন্ন বিভাগে রেখে 16 বিট প্রসেসরকে 64 কেবিট এরও বেশি সম্বোধন করার অনুমতি দেওয়ার এটি একটি খুব সফল প্রচেষ্টা ছিল।
অলিফ ফোরশেল

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

2
@ বারেন্ড: থ্রেড-লোকাল স্টোরেজের জন্য এফএস / জিএস বেছে নেওয়ার কারণটি এই নয় যে সেগমেন্টের রেজিস্টারগুলি এর জন্য ভাল। এটি ঠিক যে x86 নিবন্ধের জন্য মারাত্মকভাবে অনাহারী, এবং বিভাগের রেজিস্টারগুলি অব্যবহৃত ছিল। থ্রেড স্ট্রাকচারের দিকে ইঙ্গিত করে একটি সাধারণ-উদ্দেশ্য রেজিস্টার ঠিক একইভাবে কাজ করতে পারে এবং বাস্তবে আরও রেজিস্টার থাকা অনেকগুলি আরআইএসসি সিস্টেম একটি থ্রেড পয়েন্টার হিসাবে ব্যবহার করে।
আর .. গীটহাব বন্ধ করুন ICE

1
  1. x86 এর সাধারণ উদ্দেশ্য নিবন্ধগুলির একটি খুব, খুব সীমিত সেট রয়েছে

  2. এটি দক্ষ লোড / স্টোর পদ্ধতির পরিবর্তে সর্বনিম্ন স্তরে (সিআইএসসি হেল্ক) উন্নয়নের খুব অদক্ষ শৈলীর প্রচার করে

  3. পুরানো প্রযুক্তির সাথে সামঞ্জস্যপূর্ণ থাকার জন্য মেমরি অ্যাড্রেসিং মডেল - স্পষ্টভাবে বোকা বিভাগ / অফসেট - মেমরি অ্যাড্রেসিং মডেল প্রবর্তনের জন্য ইন্টেল ভয়াবহ সিদ্ধান্ত নিয়েছে

  4. এমন সময়ে যখন প্রত্যেকে 32 বিট যাচ্ছিল, x86 মূল প্রবাহের পিসি জগতকে ছোট আকারের 16 বিট করে ধরে রেখেছিল (তাদের বেশিরভাগ - 8088 - এমনকি কেবল 8 বিটের বহিরাগত ডেটা পাথ দিয়েও, যা এমনকি ভয়ঙ্কর!)


আমার জন্য (এবং আমি একজন ডস অভিজ্ঞ, যিনি পিসিগুলির প্রতিটি প্রজন্মকে বিকাশকারী দৃষ্টিকোণ থেকে দেখেছেন!) পয়েন্ট 3 সবচেয়ে খারাপ ছিল।

90 এর দশকের গোড়ার দিকে আমাদের মূল পরিস্থিতিটি কল্পনা করুন (মূলধারার!):

ক) একটি অপারেটিং সিস্টেম যার উত্তরাধিকারসূত্রে কারণে উন্মাদ সীমাবদ্ধতা ছিল (সহজেই অ্যাক্সেসযোগ্য র‌্যামের 640 কেবি) - ডস

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

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

d) আমরা এমসিসিএ 320x200x8 বিটের মধ্যে সীমাবদ্ধ ছিলাম (ঠিক আছে, বিশেষ কৌশলগুলি নিয়ে আরও কিছুটা ছিল, 360x480x8 সম্ভব ছিল, তবে কেবল রানটাইম লাইব্রেরি সমর্থন ব্যতীত), বাকি সমস্ত কিছুই অগোছালো এবং ভয়ঙ্কর ছিল ("ভিসা" - লোল)

e) তবে হার্ডওয়ারের ক্ষেত্রে আমাদের কাছে বেশ কয়েকটি মেগাবাইট র‍্যাম এবং ভিজিএ কার্ড সহ 1024x768 অবধি 32 টি বিট মেশিন রয়েছে

এই খারাপ পরিস্থিতির কারণ?

ইন্টেলের একটি সাধারণ নকশার সিদ্ধান্ত। ইতোমধ্যে মারা যাচ্ছিল এমন কোনও কিছুর সাথে মেশিন নির্দেশের স্তর (বাইনারি স্তর নয়!) সামঞ্জস্যতা, আমার মনে হয় এটি ৮০৮৫ The অন্যান্য, আপাতদৃষ্টিতে সম্পর্কযুক্ত সমস্যা (গ্রাফিক মোডেস, ইত্যাদি ...) প্রযুক্তিগত কারণে এবং খুব সংকীর্ণতার কারণে সম্পর্কিত ছিল মাইন্ডেড আর্কিটেকচার x86 প্ল্যাটফর্মটি নিজের সাথে এনেছে।

আজ, পরিস্থিতিটি ভিন্ন, তবে যে কোনও এসেম্বলার বিকাশকারী বা x86 এর জন্য সংকলক ব্যাকकेন্ড তৈরি করা লোকদের জিজ্ঞাসা করুন। সাধারণ উদ্দেশ্যে নিবন্ধের খুব কম সংখ্যক একটি ভয়ঙ্কর পারফরম্যান্স হত্যাকারী ছাড়া কিছুই নয়।


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

@ সুপের্যাট: প্রকৃতপক্ষে, এসই রেজিস্টারটি কোনও কিছুতে উত্সর্গীকৃত ছিল, যেমন স্ট্রিং নির্দেশাবলীর জন্য স্টোরিং (মুভস, স্টোস) বা স্ক্যানিং (সিএমপি এবং স্ক্যাস) প্রয়োজন। প্রতিটি বিভাগে রেজিস্টার এসএস থেকে 64KiB ঠিকানা দেওয়া কোড, ডেটা এবং স্ট্যাক মেমোরি (সিসি, ডিএস, এসএস) ব্যতীত অন্য মেমরিতে "অনুপস্থিত লিঙ্ক" সরবরাহ করে। বিভাগটি রেজিস্টারগুলিতে এক ধরণের মেমরি সুরক্ষা স্কিম সরবরাহ করা হয়েছে যাতে আপনি নিবন্ধগুলির K৪ কিব মেমরি ব্লকের বাইরে সম্বোধন করতে পারেন না। X86 একটি 16-বিট আর্কিটেকচার এবং দিনের লিথোগ্রাফির সীমাবদ্ধতা ছিল এর চেয়ে আরও ভাল সমাধান আপনি কীসের প্রস্তাব দিয়েছেন?
অলিফ ফোর্শেল

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

@ সুপের্যাট: যেমনটি আমি লিখেছি, "নিবন্ধগুলি এসএস ছাড়া অন্য স্মৃতিতে অনুপস্থিত লিঙ্কটি সরবরাহ করে ..." আমার স্মরণে এফএস এবং জিএস 386 অবধি পৌঁছায়নি।
অলিফ ফোর্শেল

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