ভাষা কীভাবে সিপিইউ নকশাকে প্রভাবিত করেছে? [বন্ধ]


44

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

এখানে আর কী উদাহরণ রয়েছে? উদাহরণস্বরূপ, নির্দেশাবলী, রেজিস্ট্রারগুলির সংখ্যা এবং প্রকারগুলি, ঠিকানাগুলির মোডগুলি, যা কোনও নির্দিষ্ট প্রসেসরকে কোনও বিশেষ ভাষার সম্মেলনের পক্ষে রাখে? আমি একই পরিবারের পুনর্বিবেচনায় বিশেষভাবে আগ্রহী।


3
ভুলে যাবেন না যে জেড -৮০ এরও এলডিআইআর নির্দেশ ছিল, আপনি যখন দৈর্ঘ্যটি জানেন তখন স্ট্রিংগুলি অনুলিপি করার জন্য খুব দরকারী (যেমন পাস্কেলে, যেখানে হেডারে দৈর্ঘ্যটি সংরক্ষণ করা হয়েছিল)।
টিএমএন

27
1. জেড -80 ১৯ 197৫ সালে ডিজাইন করা হয়েছিল, যখন ইউনিক্স এবং সি কয়েকটি কম্পিউটারে অস্পষ্ট অপারেটিং সিস্টেম এবং ভাষা ছিল, কে ওআরআর এর প্রথম সংস্করণের 3 বছর আগে। ২. পাস্কাল সম্পর্কে এমন কিছু নেই যা স্ট্রিংয়ের দৈর্ঘ্য "শিরোনামে" হুকুম দেয়। ৩. সিপি / এম এর স্ট্রিংগুলি তৎকালীন প্রধান মাইক্রোকম্পিউটার ওএস, '\' অক্ষর দিয়ে শেষ হয়েছিল, '\ 0' নয়। সিপিআইআর যে কোনও চরিত্রের সন্ধান করতে পারে। ৪. সিপিআইআর সিপিডিআর (পিছনের দিকে অনুসন্ধান করুন) পাশাপাশি অন্যান্য-আইআইআর এবং -ডিআর নির্দেশাবলীর সাথে মিলিত হয়। উপসংহার: সিপিআইআর এর সি প্রোগ্রামিং ভাষার সাথে কিছু করার নেই। এটি কেবল একটি বাইট অনুসন্ধানের নির্দেশ।
লাইব্রিক

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

1
@ এসকে-যুক্তি: যদিও পসিক্স স্ট্যান্ডার্ডের বাইট অ্যাড্রেসিং প্রয়োজন, সি স্ট্যান্ডার্ডটি তা করে না। যে কোনও বাস্তবায়ন যেখানে sizeof(int)1 সমান charহতে হবে সেই ধরণের স্বাক্ষরিত intহওয়া আবশ্যক (যেহেতু একটি প্রকারের সমস্ত মানের মান রাখতে সক্ষম হবে char)। আমি এমন কোনও মেশিনের জন্য কোড লিখেছি যেখানে charএবং intউভয়ই 16-বিট স্বাক্ষরিত পূর্ণসংখ্যা হয়; সবচেয়ে বড় অসুবিধা হ'ল কোনও রূপান্তর রূপের জন্য ইউনিয়নগুলি ব্যবহার করতে পারে না এবং বিপুল সংখ্যক বাইটের দক্ষ সঞ্চয়ের জন্য ম্যানুয়াল প্যাকিং এবং আনপ্যাকিং প্রয়োজন। সেই সমস্যাগুলি সি এর সম্ভাব্যতার সাথে তুলনামূলকভাবে তুলনায় খুব কম (আকার) == আকারের (দীর্ঘ), যেহেতু ...
সুপারক্যাট

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

উত্তর:


20

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


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

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

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

14

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

মজার বিষয় হচ্ছে, মূল ম্যাকিনটোস-এর বেশিরভাগ কোড (ওএস রুটিন সহ) 000৮০০০-তে সহজ নির্দেশনা না থাকা সত্ত্বেও প্যাস্কাল কলিং কনভেনশন ব্যবহার করেছিল this পরামিতিগুলি গ্রহণ করে এমন প্রতিটি ফাংশনের রিটার্ন সাইটে কোডের 4-6 বাইট।


রয়েছে ENTERসহযোগীর এই RET n...
herby

1
@ হার্বি: আমি মনে করি ENTERনা যে আসল ৮০86 in এর অস্তিত্ব ছিল; এটি পরে প্রসেসরের সাথে এসেছিল। এটি একটি আকর্ষণীয় বিষয় নিয়ে আসে, যদিও: বিপি-ভিত্তিক অ্যাড্রেসিং মোডগুলি পরিষ্কারভাবে স্ট্যাকড পরামিতি এবং ফ্রেম পয়েন্টারটির মাধ্যমে অ্যাক্সেস করা স্থানীয়দের ব্যবহারের আশেপাশে তৈরি করা হয়েছে। আমি এই কনভেনশনটি বেশ কয়েকটি উপায়ে আকর্ষণীয় বলে মনে করি, বিশেষত বিবেচনা করে যে (1) খাঁটি সমাবেশ ভাষা কোডটি স্ট্যাকের চেয়ে রেজিস্টারে মানগুলি ব্যবহার করার পক্ষে আরও উপযুক্ত, তবে (2) [বিপি + এনএন] [এসপি + এর উপর সম্বোধন করার সুবিধাগুলি এনএন] সম্বোধন এমন সমাবেশ-ভাষার প্রোগ্রামগুলির জন্য যেগুলি স্ট্যাকের জিনিসগুলিতে অ্যাক্সেস করে ... এর চেয়ে বেশি তাৎপর্যপূর্ণ ...
সুপারক্যাট

... হাতে লিখিত সমাবেশ কোডের জন্য। একটি সংকলক সাধারণত জানবে, প্রতিটি উত্পন্ন নির্দেশের জন্য, কীভাবে এসপি এবং বিপি তুলনা করে; উদাহরণস্বরূপ, এসপি যদি বিপি -8 হয়, তবে এটি [এসপি + 20] এর তুলনায় [বিপি + 12] সংকলনকারীকে সম্বোধন করা খুব সহজ নয়। যদি কোনও পুনরায় সংকলন করে কম্পাইলারকে একটি কোডের ব্লকের চারপাশে আরেকটি পুশ / পিওপি যুক্ত করতে হয় তবে এটি এসপি-ভিত্তিক অফসেটগুলি যথাযথভাবে সামঞ্জস্য করতে পারে। অন্যদিকে, হাতে লিখিত সমাবেশে, পুশ / পিওপি যুক্ত করার ক্ষেত্রে তাদের মধ্যে কোডটি টুইঙ্ক করার সম্ভাবনা বেশি থাকে। সুতরাং ফ্রেম পয়েন্টারগুলি মূলত সম্মিলিত উচ্চ-স্তরের / এসএম কোডের একটি উপকার।
সুপারক্যাট

কোডটির পুনঃসংশোধন ছাড়াই পুনরায় ব্যবহারের সম্ভাবনা হ'ল বিপি অ্যাড্রেসিংয়ের জন্য কিছু প্রান্তিক ব্যবহারযোগ্যতা পয়েন্ট। আর knows
শ্বর

3
@ হার্বি: আসলে, আমি সন্দেহ করি যে কারণে কম্পাইলাররা সাধারণত ফ্রেম পয়েন্টার ব্যবহার করেছেন তার ডিবাগিংয়ের সাথে অনেক কিছু করার আছে। এমন একটি কনভেনশন ব্যবহার না করে এমন কোনও প্রোগ্রামটি ডিবাগ করার জন্য কম্পাইলারটি তৈরি করতে হবে - এবং ডিবাগার ব্যবহার - প্রতিটি নির্দেশের জন্য এসপি-বিপি অফসেটের তালিকাভুক্ত একটি ফাইল তৈরি করা দরকার। এই জাতীয় বিশদ মেটাডেটা আজ সাধারণ (এবং এটি আবর্জনা-সংগৃহীত ভাষাগুলিকে ব্যবহারিক করে তোলে তার একটি অত্যাবশ্যক অংশ) তবে র‌্যামের প্রয়োজনীয় পরিমাণটি 30 বছর আগে অগ্রহণযোগ্য ছিল।
সুপারক্যাট

10

একটা উদাহরণ MIPS, যা উভয় হয়েছে addএবং adduফাঁদে আটকান এবং যথাক্রমে ওভারফ্লো উপেক্ষা জন্য। (এছাড়াও subএবং subu।) এটি আদার মতো ভাষার জন্য প্রথম ধরণের নির্দেশনা প্রয়োজন (আমি মনে করি - যদিও আমি আসলে আদাকে যদিও কখনও ব্যবহার করি নি) যা ওভারফ্লোগুলি স্পষ্টভাবে এবং দ্বিতীয় ধরণের সি এর মতো ভাষার ক্ষেত্রে আচরণ করে যা ওভারফ্লোগুলি উপেক্ষা করে।

যদি আমি সঠিকভাবে মনে রাখি, প্রকৃত সিপিইউর অতিরিক্ত প্রবাহের উপর নজর রাখার জন্য ALU তে কিছু অতিরিক্ত সার্কিটরি রয়েছে। যদি লোকেদের যত্ন নেওয়া একমাত্র ভাষা সি হয়, তবে এটির প্রয়োজন হবে না।


যদি নিশ্চিত না এর সাথে সম্পর্কিত, কিন্তু সেসব নির্দেশাবলী সম্ভবত অন্যান্য পরিস্থিতিতে, নিরাপদ মেমরি অ্যালোকেশন অর্থাৎ মত উপযোগী আপনি বণ্টন করা হয় nmemb*size+offsetবাইট এবং নিশ্চিত করুন যে আপনি একটি ওভারফ্লো পাবেন না করতে হবে।
নিকিসি

@ নিকসি: আমি ভাবছিলাম যে সি ওকে খুশি করার জন্য যে নির্দেশাবলী adduএবং subuনির্দেশাবলী ( অতিরিক্ত প্রবাহগুলি পরীক্ষা করে না ) সেগুলিই যুক্ত হয়েছিল। অবশ্যই, আমি সত্যিই জানি না - আমরা কেবলমাত্র বক্তৃতায় এটি অস্পষ্টভাবে আবৃত করেছিলাম এবং আমি অবশ্যই স্থাপত্যের কোনও বিশেষজ্ঞ: পি।
টিখন জেলভিস

ওহ হ্যাঁ, আমি অন্যভাবে ভাবছিলাম, দুঃখিত: /
নিকেরি

8

বুড়ো 5000 সিরিজটি দক্ষতার সাথে ALGOL সমর্থন করার জন্য ডিজাইন করা হয়েছিল, এবং ইন্টেলের আইএপিএক্স -৩৩২ দক্ষতার সাথে অ্যাডাকে কার্যকর করার জন্য ডিজাইন করা হয়েছিল। ইনমোস ট্রান্সপোর্টারটির নিজস্ব ভাষা ছিল, ওসাম। আমি মনে করি প্যারালাক্স "প্রোপেলার" প্রসেসরটি বেসিকের নিজস্ব বৈকল্পিক ব্যবহার করে প্রোগ্রাম করার জন্য ডিজাইন করা হয়েছিল।

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


এই ডিজাইনগুলি কী তাদের বিশেষত উপযুক্ত করে তোলে? উদাহরণস্বরূপ আডা বিশেষত আইএপিএক্স এর কোন বৈশিষ্ট্য থেকে উপকৃত হয়?
গাইস

আইআরটিএস যে আইএপিএক্স -৩৩২ এর অ্যাডা টার্গেট অন্য কোনও কিছুর চেয়ে দুর্দান্ত প্রত্যাশার সাথে কিছু যুক্ত করে একটি ব্যর্থ নকশাকে সংরক্ষণ করার চেষ্টা করছিল।
এপ্রোগ্রামার

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

1
@ টিএমএন, ইন্টেলের 432 প্রকল্প 1975 সালে শুরু হয়েছিল এবং 1981 সালে চালু হয়েছিল (উইকিপিডিয়া)। আয়রণম্যান (অ্যাডা-এর চূড়ান্ত প্রয়োজনীয়তা), ১৯ January7 জানুয়ারীতে প্রকাশিত হয়েছিল এবং সবুজকে মে ১৯ 1979৯ সালে নির্বাচিত করা হয়েছিল, সংশোধিত হয়েছিল এবং চূড়ান্ত ফলাফলটি ১৯ July০ সালের জুলাইয়ে সামরিক মান হিসাবে প্রকাশিত হয়েছিল There এখানে উল্লেখ করা হয়েছে যে আইএপিএক্স -৩৩২ থেকে ডিজাইন করা হয়েছিল অ্যাডা ব্যবহার শুরু। (এটি একটি দেরী এবং সাধারণ "সিমান্টিক গ্যাপটি বন্ধ করুন" প্রসেসরটি এমন একটি সময়ে স্বাভাবিক ত্রুটিগুলির সাথে যখন বিকল্পগুলি অনুসন্ধান করা শুরু হয়েছিল; অ্যাডা প্রসেসর হিসাবে এটি বিপণন একটি ব্যর্থ নকশা সংরক্ষণের জন্য একটি অস্থায়ী ছিল - আইএসআরটি যে ইন্টেল ব্যতীত কেউই এটি ব্যবহার করেনি )
এপ্রোগ্রামার

1
@ এপ্রোগ্রামার: হুম, মনে হচ্ছে আপনি ঠিক বলেছেন। আমি এই কাগজটি 432 এর প্রধান স্থপতি থেকে দৌড়েছিলাম এবং সংক্ষেপে তিনি বলেছিলেন "আর্কিটেকচার এবং ভাষার এই ঘনিষ্ঠ মিলটি ঘটেনি কারণ 432 অ্যাডাকে মৃত্যুদন্ড কার্যকর করার জন্য ডিজাইন করা হয়েছিল - এটি ছিল না।" আমাকে আমার পুরানো 432 বইটি খনন করতে হবে এবং এটি কী বলে তা দেখতে হবে।
টিএমএন

8

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


5

মোটোরোলা 68000 পরিবার কিছু স্বতঃসংশোধন অ্যাড্রেসমোড প্রবর্তন করেছিল যা সিপিইউর মাধ্যমে অনুলিপি করার তথ্যটিকে খুব দক্ষ এবং কমপ্যাক্ট করে তুলেছিল

[আপডেট হওয়া উদাহরণ]

এটি এমন কিছু সি ++ কোড যা 68000 এসেম্ব্লারকে প্রভাবিত করেছিল

while(someCondition)
    destination[destinationOffset++] = source[sourceOffset++]

প্রচলিত এসেম্বেবলারে প্রয়োগ করা হয়েছে (সিউডোকোড, আমি 68000 এসেম্বলারের কমান্ড ভুলে গেছি)

adressRegister1 = source
adressRegister2 = destination
while(someCondition) {
    move akku,(adressRegister1)
    move (adressRegister2), akku
    increment(adressRegister1, 1)
    increment(adressRegister2, 1)
}

নতুন অ্যাড্রেসমোড দিয়ে এটি কিছুটা সিমিলার হয়ে উঠল

adressRegister1 = source
adressRegister2 = destination
while(someCondition) {
    move akku,(adressRegister1++)
    move (adressRegister2++), akku
}

4 এর পরিবর্তে লুপ প্রতি দুটি নির্দেশাবলী।


1
এটি কোনও নির্দিষ্ট ভাষার সম্মেলনের দ্বারা কীভাবে প্রভাবিত হয়েছিল?
গাইস

আপডেট হওয়া উদাহরণটি দেখুন
k3b

আহ, আমাকে 68010-এ ডিবিএক্সএক্স লুপ অপ্টিমাইজেশনের কথা মনে করিয়ে দেয়
গাইস

7
আসলে, আমি মনে করি আপনার এটি পিছনের দিকে আছে। অটো [ইন | ডি] ক্রেমেন্ট সম্বোধন পিডিপি -11 নির্দেশ সংস্থার অংশ ছিল যা সম্ভবত সি এর নকশাকে প্রভাবিত করেছিল
টিএমএন

5

আইবিএম এর জেড সিরিজের মেইনফ্রেম, 1960 এর দশক থেকে আইবিএম 360 এর বংশধর।

সেখানে বেশ কয়েকটি নির্দেশনা রয়েছে যা বিশেষত সিওবিএল এবং ফোর্টরান প্রোগ্রামগুলিকে গতিযুক্ত করার জন্য সেখানে রাখা হয়েছিল। ক্লাসিক উদাহরণটি হ'ল BXLE- "ইনডেক্স লো অ্যান্ড ইক্যুয়াল অন ব্রাঞ্চ" যা বেশিরভাগ ফোর্টরান forলুপ বা একটি সিওবিএল PERFORM VARYING x from 1 by 1 until x > nএকক নির্দেশে আবদ্ধ থাকে।

সিওবিএল প্রোগ্রামগুলিতে সাধারণ পয়েন্ট দশমিক গণিতকে সমর্থন করার জন্য প্যাকড দশমিক নির্দেশাবলীর পুরো পরিবার রয়েছে।


আমি মনে করি আপনি বংশধর মানে ।
ক্লকওয়ার্ক-মিউজিক

@ এক্স-জিরো - ওফ! খুব ভোরে, সিস্টেমে পর্যাপ্ত ক্যাফিন নেই ইত্যাদি .......
জেমস অ্যান্ডারসন

1
আরও আকর্ষণীয় টিআই 32050 ডিএসপির ব্লক-রিপিট নির্দেশনা। এর অপারেন্ড হ'ল লুপের শেষের অনুসরণের নির্দেশের ঠিকানা; একটি লুপ-কাউন্ট রেজিস্টার লোড করা এবং তারপরে ব্লক-রিপিট নির্দেশনা সম্পাদনের ফলে লক্ষ্যমাত্রা নির্দিষ্ট পরিমাণে পুনরাবৃত্তি করার লক্ষ্যমাত্রা (তবে অন্তর্ভুক্ত নয়) পর্যন্ত হবে। খুব দৃ strongly়ভাবে একটি ফরটারান DOলুপের স্মরণ করিয়ে দেয় ।
সুপারক্যাট

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

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

3

প্রারম্ভিক ইন্টেল সিপিইউতে নিম্নলিখিত বৈশিষ্ট্যগুলি ছিল, যার মধ্যে অনেকগুলি এখন 64৪-বিট মোডে অপ্রচলিত:

  • ENTER, ছেড়ে দিন এবং আরইটি এনএন নির্দেশাবলী [প্রাথমিক ম্যানুয়ালগুলি স্পষ্টভাবে বলেছিল যেগুলি ব্লক কাঠামোগত ভাষার জন্য প্রবর্তিত হয়েছিল, যেমন, পাস্কাল, যা নেস্টেড পদ্ধতিগুলিকে সমর্থন করে]
  • বিসিডি গাণিতিক (এএএ, এএএম, ইত্যাদি) গতি বাড়ানোর জন্য নির্দেশাবলী; x87-তে বিসিডি সমর্থনও
  • জিসিএক্সজেড এবং এলওওপি নির্দেশনা গণনা করা লুপগুলি প্রয়োগ করার জন্য
  • পাটিগণিত ওভারফ্লোতে ফাঁদ তৈরি করার জন্য INTO (উদাহরণস্বরূপ, অ্যাডায়)
  • টেবিল দেখার জন্য এক্সএলএটি
  • অ্যারে সীমা পরীক্ষা করার জন্য বাউন্ড

অনেক সিপিইউ-র স্থিতি রেজিস্টারে সাইন ফ্ল্যাগ পাওয়া যায় যা স্বাক্ষরিত এবং স্বাক্ষরবিহীন গাণিতিক সম্পাদন করতে সহজেই উপস্থিত রয়েছে।

এসএসই ৪.১ নির্দেশিকা সেট স্ট্রিং প্রসেসিংয়ের জন্য নির্দেশনাগুলি গণনা করা এবং শূন্য-সমাপ্ত (পিসিএমপিএসআরটি, ইত্যাদি) প্রবর্তন করে introdu

এছাড়াও, আমি কল্পনা করতে পারি যে অনেকগুলি সিস্টেম-স্তরের বৈশিষ্ট্যগুলি সংকলিত কোডের সুরক্ষার জন্য ডিজাইন করা হয়েছিল (সেগমেন্ট সীমা পরীক্ষা করা, প্যারামিটার অনুলিপি সহ কল ​​গেটস ইত্যাদি) support


3

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

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

জাজেল প্রযুক্তির উত্তরসূরী হলেন থাম্বইই


2

যতদূর আমি জানি এটি অতীতে বেশি সাধারণ ছিল।

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

তিনি উল্লেখ করেছিলেন যে জেনেরিক জনপ্রিয় চিপ (যেমন ইন্টেলের) ব্যবহার করার সুবিধা রয়েছে কারণ এতে একটি বিশাল কর্পোরেশন রয়েছে যা পণ্যটিতে প্রচুর পরিমাণে অর্থ নিক্ষেপ করে।

ভিডিওটি পরীক্ষা করে দেখার মতো। তিনি 19 বা 20 মিনিটে এই সম্পর্কে কথা বলেন।


2

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


2

ইন্টেল iAPX CPU- র বিশেষভাবে OO যেমন পণ্য ভাষার জন্য পরিকল্পনা করা হয়েছিল। যদিও বেশ কার্যকর হয়নি।

IAPX 432 ( ইন্টেল অ্যাডভান্সড প্রসেসর আর্কিটেকচার ) ইন্টেলের প্রথম 32-বিট মাইক্রোপ্রসেসর নকশা, তিনটি ইন্টিগ্রেটেড সার্কিট একটি সেট হিসাবে 1981 সালে চালু ছিল। এটি বহু উন্নত মাল্টিটাস্কিং এবং মেমরি পরিচালনার বৈশিষ্ট্যগুলি বাস্তবায়ন করে 1980 এর দশকের জন্য ইন্টেলের প্রধান নকশা হওয়ার উদ্দেশ্য ছিল। নকশাটি তাই মাইক্রোমেনফ্রেম হিসাবে উল্লেখ করা হয়েছিল ...

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

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

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

আইএপিএক্স 432 প্রকল্পটি ইন্টেলের জন্য বাণিজ্যিক ব্যর্থতা ছিল ...


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

1

68000 এর মোভেম ছিল যা একক নির্দেশনায় স্ট্যাকের উপরে একাধিক রেজিস্ট্রি ঠেকানোর পক্ষে সবচেয়ে উপযুক্ত ছিল যা বহু ভাষা প্রত্যাশা করে।

আপনি যদি কোড জুড়ে মোভেম (একাধিক মুভি) জেএসআর (জাম্প সাবআরটাইন) পূর্ববর্তী দেখেন তবে আপনি সাধারণত জানতেন যে আপনি সি মেনে চলা কোডটি নিয়ে কাজ করছেন।

মোভেম গন্তব্য নিবন্ধের স্বতঃবৃদ্ধির জন্য মঞ্জুরিপ্রাপ্ত প্রতিটি ব্যবহারকে গন্তব্যে স্ট্যাকিং চালিয়ে যেতে বা অটো হ্রাসের ক্ষেত্রে স্ট্যাক থেকে অপসারণের অনুমতি দেয়।

http://68k.hax.com/MOVEM


1

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

আইএমও এটি রকেটস 4 কিডসের দুর্দান্ত উত্তরের সাথে নিবিড়ভাবে সম্পর্কিত , প্রাথমিক পিসি 16-গুলি সরাসরি এসেম্বলারের প্রোগ্রামিংয়ের জন্য তৈরি করা হয়েছে (মোট 40 টি নির্দেশাবলী), পরে পরিবারগুলি সি লক্ষ্য করে রয়েছে with


1

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

float a = 16777216, b = 0.125, c = -16777216;
float d = a+b+c;

প্রচার হবে aএবং bকরতে double, তাদের যোগ প্রচার cকরতে double, এটি যোগ করুন, এবং তারপর দোকান ফলাফলের বৃত্তাকার float। যদিও সংকলকটির কোডটি উত্পন্ন করার জন্য এটি বেশিরভাগ ক্ষেত্রেই দ্রুততর হতে পারে যা টাইপ করে সরাসরি অপারেশন করত float, তবে ভাসমান-পয়েন্ট রুটিনগুলির একটি সেট রাখা সহজ ছিল যা কেবল টাইপে চালিত হবে double, এবং রুপান্তরিত রুটিনগুলির পাশাপাশি type থেকে এবং floatঅপারেশন পরিচালনা করতে আলাদা রুটিনের চেয়ে বেশি । ৮০৮87 এর গাণিতিকের জন্য এই পদ্ধতির আশেপাশে নকশা করা হয়েছিল, ,০-বিট ভাসমান-বিন্দুর ধরণের ব্যবহার করে সমস্ত গাণিতিক ক্রিয়াকলাপ সম্পাদন করা হয়েছিল [৮০ বিট সম্ভবত বেছে নেওয়া হয়েছিল কারণ:floatdouble

  1. অনেকগুলি 16- এবং 32-বিট প্রসেসরের উপর, মানের সাথে কাজ করার চেয়ে একটি 64-বিট ম্যান্টিসা এবং একটি পৃথক এক্সপোনেন্টের সাথে কাজ করা আরও দ্রুত যা মান্টিসা এবং এক্সপোঞ্জারের মধ্যে একটি বাইটকে বিভক্ত করে।

  2. গণনা সম্পাদন করা খুব কঠিন, যা যে সংখ্যাটি ব্যবহার করছেন তার সম্পূর্ণ নির্ভুলতার সাথে নির্ভুল; যদি কেউ লগ 10 (এক্স) এর মতো কোনও কিছুর গণনা করার চেষ্টা করে থাকে তবে কোনও ফলাফল গণনা করার চেয়ে একটি 80-বিট টাইপের 100ulp এর মধ্যে নির্ভুল এমন একটি ফলাফল গণনা করা সহজ এবং দ্রুত হয় যা কোনও 64-বিটের 1ulp এর মধ্যে সঠিক টাইপ করুন এবং result৪-বিট যথার্থতার জন্য পূর্ববর্তী ফলাফলকে বৃত্তাকারে একটি -৪-বিট মান আসবে যা পরবর্তীকালের চেয়ে আরও সঠিক।

দুর্ভাগ্যক্রমে, ভাষার ভবিষ্যতের সংস্করণগুলি ভাসমান-পয়েন্টের ধরণের কীভাবে কাজ করা উচিত তার অর্থার্থক পরিবর্তন করেছে; ৮০8787 শব্দার্থকগুলি যদি খুব সহজেই ভাষাগুলি তাদের ধারাবাহিকভাবে সমর্থন করত, যদি ফাংশন এফ 1 (), এফ 2 () ইত্যাদি রিটার্ন টাইপ floatহত, অনেক সংকলক লেখক it৪- long doubleবিট ডাবল টাইপের জন্য একটি এলিফ তৈরি করার জন্য এটি নিজেরাই গ্রহণ করবেন সংকলকটির ৮০-বিট প্রকারের চেয়ে বেশি (এবং ৮০-বিট ভেরিয়েবল তৈরির কোনও উপায় সরবরাহ করে না) এবং এ জাতীয় কিছুকে নির্বিচারে মূল্যায়ন করার জন্য:

double f = f1()*f2() - f3()*f4();

নিম্নলিখিত যে কোনও উপায়ে:

double f = (float)(f1()*f2()) - (extended_double)f3()*f4();
double f = (extended_double)f1()*f2() - (float)(f3()*f4());
double f = (float)(f1()*f2()) - (float)(f3()*f4());
double f = (extended_double)f1()*f2() - (extended_double)f3()*f4();

মনে রাখবেন যে f3 এবং f4 যথাক্রমে f1 এবং f2 একই মানগুলি প্রদান করে, মূল এক্সপ্রেশনটি স্পষ্টভাবে শূন্য ফিরে আসতে পারে, তবে অনেকের পরবর্তী প্রকাশগুলি নাও পারে may এর ফলে লোকেদের ৮০৮ision এর "অতিরিক্ত নির্ভুলতা" নিন্দা জানায় যদিও শেষ সূত্রটি সাধারণত তৃতীয়ের চেয়ে উচ্চতর হত - এবং কোডযুক্ত যা বর্ধিত দ্বিগুণ প্রকারকে যথাযথভাবে ব্যবহার করে - খুব কমই নিকৃষ্ট হবে।

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


মনে রাখবেন যে ইতিমধ্যে এই পোস্টে আপনার একটি উত্তর ( উপরে ) পাওয়া গেছে। তারা কি এমন উত্তর দেয় যা এক সাথে মার্জ করা যায় / করা উচিত?

@ মিশেলটি: আমার মনে হয় না - একটিতে স্ট্যাকের নকশা রয়েছে এবং অন্যটি ভাসমান পয়েন্ট শব্দার্থক শব্দটিকে coversেকে রাখে।
সুপারকেট

শুধু নিশ্চিত করছি. ব্যক্তিগতভাবে, আমি বিশ্বাস করি যে এর একটি, আরও শক্তিশালী উত্তর দেওয়া সম্ভব হবে (বিভাগগুলি পৃথক করার জন্য শিরোনাম ব্যবহার করে) তবে তাতে আমার গ্রহণযোগ্যতা নেই। আপনি প্রতিটি শিরোনামের অংশটি কীভাবে সম্বোধন করে ( ## How the stack changed the processorএবং ## How floating point changed the processor) শীর্ষে স্পষ্টভাবে শনাক্ত করতে শিরোনামগুলি ব্যবহার করতে ইচ্ছুক হতে পারেন যাতে এটি পড়ার সময় লোকেরা তার সঠিক মন স্থির করতে পারে এবং উত্তর দেওয়ার বা পুনরায় পোস্ট করার ক্ষেত্রে আপনি অনুপস্থিত মনের মত মনে করছেন না একই (আর অনুরূপ) উত্তর।

@ মিশেলটি: দুটি উত্তর যথেষ্টই অসন্তুষ্ট যে আমার ধারণা তাদের পৃথকভাবে ভোট দেওয়া উচিত। যদিও 80876 8087/80287/80387 এর পূর্বে সম্পাদিত ফাংশনগুলি শোষণ করে, 8086 এবং 8087 প্রায়-স্বতন্ত্র স্থাপত্যগুলির সাথে পৃথক চিপ হিসাবে নকশা করা হয়েছিল were যদিও উভয়ই একটি সাধারণ নির্দেশের স্ট্রিমের কোড চালিয়েছে, যেটি ৮০86৮ নির্দিষ্ট বাইট সিকোয়েন্সকে ট্রিট করে ঠিকঠাকটি পড়ার / লেখার অনুরোধ উত্পন্ন করার অনুরোধ হিসাবে ডেটা বাসটিকে উপেক্ষা করার সময় পরিচালিত হয়েছিল, এবং ৮০৮87 এ যা যা চলছিল তা উপেক্ষা করে।
সুপারক্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.