একটি নির্দিষ্ট কম্পিউটার সিস্টেম দেওয়া, এসেম্বলি কোডের একটি অংশের আসল যথাযথ রান সময় অনুমান করা সম্ভব?


23

এটি সংসদীয় কোডের একটি অংশ

section .text
    global _start       ;must be declared for using gcc
_start:                     ;tell linker entry point
    mov edx, len    ;message length
    mov ecx, msg    ;message to write
    mov ebx, 1      ;file descriptor (stdout)
    mov eax, 4      ;system call number (sys_write)
    int 0x80        ;call kernel
    mov eax, 1      ;system call number (sys_exit)
    int 0x80        ;call kernel

section .data

msg db  'Hello, world!',0xa ;our dear string
len equ $ - msg         ;length of our dear string

একটি নির্দিষ্ট কম্পিউটার সিস্টেম দেওয়া, সংসদীয় কোডের এক টুকরোটির আসল রান সময় সম্পর্কে ঠিক কী অনুমান করা সম্ভব?


30
"কম্পিউটারটিতে কোড চালাও এবং স্টপওয়াচ ব্যবহার করুন" কি একটি বৈধ উত্তর?
ড্রাকনিস

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

4
অনুমান করা সবসময় সম্ভব ...
sudo rm -rf স্ল্যাশ

3
থামার সমস্যার কারণে এটিও কি অসম্ভব? এটি কিছুটা কোডের জন্য থামবে কিনা তা আমরা প্রমাণ করতে পারি, তবে আমাদের কোনও অ্যালগরিদম থাকতে পারে না যা এটি সমস্ত সম্ভাব্য কোডের জন্য নির্ধারণ করে।
কুত্স্কেম

2
@ ফ্যালকো এটি প্রদত্ত সিস্টেমের সম্পত্তি হবে। কিছু ফ্রিস্ট্যান্ডিং সি বাস্তবায়নের কোনও অপারেটিং সিস্টেম নেই; যা চলছে তা হ'ল একটি প্রধান লুপ (বা এমনকি একটি লুপ নয় ;-)) যা ইনপুটটির জন্য হার্ডওয়্যার ঠিকানাগুলি থেকে পড়তে পারে বা নাও পারে।
পিটার - মনিকা পুনরায় ইনস্টল করুন

উত্তর:


47

আমি কেবল 1986 সালের প্রায় 63020 প্রসেসরের পরিবর্তে আদিম সিপিইউয়ের ম্যানুয়াল থেকে উদ্ধৃতি দিতে পারি: "প্রসেসরের বাস্তবায়ন সম্পর্কে আপনার যথাযথ জ্ঞান থাকলেও" নির্দেশাবলীর অনুক্রমের যথাযথ রানটাইম গণনা করা কঠিন "। যা আমাদের নেই। এবং একটি আধুনিক প্রসেসরের তুলনায়, সিপিইউ আদিম ছিল ।

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

অবশ্যই অপারেটিং সিস্টেমে দুটি কল করা এটি পুরোপুরি অনাকাঙ্ক্ষিত করে তোলে। আপনি জানেন না যে "স্টাডাউট টু রাইটিং" আসলে কী করে তাই আপনি সময়টির পূর্বাভাস দিতে পারবেন না।

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

সব মিলিয়ে: সম্পূর্ণ অপ্রত্যাশিত।


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

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

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

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

2
একটি 68020 একটি জটিল জন্তু ... একটি এমসিএস 51 চেষ্টা করুন ....
রেক্যান্ডবোনম্যান

30

আপনি সাধারণভাবে এটি করতে পারবেন না, তবে কিছু সংশ্লেষে আপনি খুব বেশি কিছু করতে পারেন, এবং কয়েকটি historicalতিহাসিক ঘটনা ঘটেছে যা আপনার সত্যই ছিল

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

যাইহোক, 6502 ভিত্তিক অন্যান্য সিস্টেমের মতো আটারি 2600 এরও খুব গুরুত্বপূর্ণ বৈশিষ্ট্য ছিল যা এই দৃশ্যের জন্য প্রয়োজনীয় সতর্কতার সাথে সময় পরিচালনা করতে সক্ষম করে: সিপিইউ, র‌্যাম, এবং টিভি সিগন্যাল সমস্ত একই মাস্টারের উপর ভিত্তি করে ঘড়ি বন্ধ করেছিল ran ঘড়ি। টিভি সিগন্যালটি একটি 3.98 মেগাহার্টজ ঘড়ি ছড়িয়েছিল, উপরের সময়গুলিকে টিভি সংকেত পরিচালিত "রঙের ঘড়ি" এর সংখ্যার সাথে ভাগ করে দিয়েছে, এবং সিপিইউ এবং র‌্যাম ঘড়িগুলির একটি চক্র ছিল ঠিক তিনটি রঙের ঘড়ি, যা সিপিইউটির ঘড়ি হতে দেয় বর্তমান অগ্রগতি টিভি সিগন্যালের সাথে সম্পর্কিত সময়ের সঠিক পরিমাপ। (এটি সম্পর্কে আরও তথ্যের জন্য, স্টেলা আটারি 2600 এমুলেটরের জন্য লেখা স্টেলা প্রোগ্রামার গাইডটি দেখুন )।

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

CMP  Compare Memory with Accumulator

     A - M                            N Z C I D V
                                    + + + - - -

     addressing    assembler    opc  bytes  cycles
     --------------------------------------------
     immediate     CMP #oper     C9    2     2
     zeropage      CMP oper      C5    2     3
     zeropage,X    CMP oper,X    D5    2     4
     absolute      CMP oper      CD    3     4
     absolute,X    CMP oper,X    DD    3     4*
     absolute,Y    CMP oper,Y    D9    3     4*
     (indirect,X)  CMP (oper,X)  C1    2     6
     (indirect),Y  CMP (oper),Y  D1    2     5*

*  add 1 to cycles if page boundary is crossed

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


অবশ্যই, আটারির 6502 একটি খুব নির্দিষ্ট কেস এবং এটি সমস্তই কেবল সম্ভব কারণ সিস্টেমটিতে নিম্নলিখিতগুলির সমস্ত ছিল:

  • একটি মাস্টার ক্লক যা র‌্যাম সহ সমস্ত কিছু চালিয়েছিল। আধুনিক সিস্টেমে সিপিইউ এবং র‌্যামের জন্য স্বতন্ত্র ঘড়ি রয়েছে, র‌্যাম ঘড়িটি প্রায়শই ধীর হয়ে যায় এবং দুটোই সমগত হয় না।
  • কোনও ধরণের কোনও ক্যাচিং নেই - 6502 সর্বদা সরাসরি ডিআরএএম থেকে অ্যাক্সেস করা হয়। আধুনিক সিস্টেমে এসআরএএম ক্যাশ রয়েছে যা রাষ্ট্রের পূর্বাভাস দেওয়া আরও কঠিন করে তোলে - যদিও ক্যাশে সহ কোনও সিস্টেমের আচরণ সম্পর্কে ভবিষ্যদ্বাণী করা এখনও সম্ভব হলেও এটি অবশ্যই আরও কঠিন is
  • অন্য কোনও প্রোগ্রাম একযোগে চলমান নয় - কার্ট্রিজে থাকা প্রোগ্রামটির সিস্টেমে সম্পূর্ণ নিয়ন্ত্রণ ছিল। আধুনিক সিস্টেমগুলি নন-ডিস্ট্রিমেন্টিক শিডিয়ুলিং অ্যালগরিদমগুলি ব্যবহার করে একবারে একাধিক প্রোগ্রাম চালায়।
  • একটি ঘড়ির গতি যথেষ্ট ধীর যে সংকেতগুলি সময়মতো সিস্টেম জুড়ে ভ্রমণ করতে পারে। ৪ গিগাহার্জ ঘড়ির গতিযুক্ত আধুনিক সিস্টেমে (উদাহরণস্বরূপ), আধ আধ মিটার মাদারবোর্ডের দৈর্ঘ্য ভ্রমণ করতে হালকা light..67 ঘড়ির চক্রের ফোটন লাগে - আপনি কোনও আধুনিক প্রসেসরের বোর্ডে অন্য কোনও কিছুর সাথে ইন্টারেক্ট করার আশা করতে পারেন না could কেবল একটি চক্রের মধ্যে, বোর্ডে সিগন্যালের জন্য এমনকি ডিভাইসে পৌঁছাতে এটি একাধিক চক্র লাগে।
  • একটি ভাল সংজ্ঞায়িত ঘড়ির গতি যা খুব কমই পরিবর্তিত হয় (আটারির ক্ষেত্রে 1.19 মেগাহার্টজ) - আধুনিক সিস্টেমগুলির সিপিইউ গতি সর্বদা পরিবর্তিত হয়, যখন কোনও আটারি টিভি সংকেতকে প্রভাবিত না করেও এটি করতে পারে না।
  • প্রকাশিত চক্রের সময় - x86 এর কোনও নির্দেশিকা কতটা সময় নেয় তা নির্ধারণ করে না।

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


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


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


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

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

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

2
@ ইউজার ১৯3719১৯৮৮ ১২৮ বাইট অফ স্টেট (প্লাস্টারে যা কিছু আছে) হ'ল টুরিং মেশিনের তাত্ত্বিক অসীম টেপের মধ্যে পার্থক্য তৈরি করার পক্ষে পর্যাপ্ত রাষ্ট্রের স্থানটি কেবল তত্ত্বের ক্ষেত্রেই গুরুত্বপূর্ণ matters হেল, আমরা কার্যকরভাবে কোনও এইএস কী এর মতো কিছু 128 বিট অনুসন্ধান করতে পারি না .... আপনি বিট যুক্ত করার সাথে সাথে রাজ্যের স্থানটি স্কেচির সাথে দ্রুত বাড়তে পারে। ভুলে যাবেন না যে 'বাধা অক্ষম করুন' এর সমতুল্য; থামানো 'প্রায় অবশ্যই সম্ভব হত।
ড্যান মিলস

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

15

এখানে খেলার দুটি দিক রয়েছে

@ Gnasher729 যেমন উল্লেখ করেছে যে, যদি আমরা কার্যকর করার সঠিক নির্দেশাবলী জানি তবে ক্যাশিং, শাখার পূর্বাভাস, স্কেলিং ইত্যাদির কারণে সঠিক রানটাইম অনুমান করা এখনও কঠিন

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

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


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

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

2
পরবর্তী কোন নির্দেশিকাটি চলবে তা আমরা নিশ্চিতভাবে জানতে পারি , আমরা কখনই আঘাত করি sys_exitএবং এভাবে স্টপওয়াচটি বন্ধ করে দিই তা আমরা বলতে পারি না । যদি আমরা প্রোগ্রামগুলি সমাপ্ত করতে সীমাবদ্ধ করে থাকি, যা এই জাতীয় ব্যবহারিক প্রশ্নের জন্য যুক্তিসঙ্গত, তবে উত্তরটি হ্যাঁ হ্যাঁ (আপনি প্রোগ্রামটি শুরু করার ঠিক আগে সিস্টেমের রাজ্য, এইচডাব্লু এবং ডাব্লু, এর একটি নিখুঁত স্ন্যাপশট মঞ্জুর করেছেন)।
মার্গারেট ব্লুম

1
@ ব্লুরাজা-ড্যানিপ্লুঘুফুট মুভ টিউরিং-সম্পূর্ণ, তবে ওপি-র কোডের টুকরাটিতে নেই। তবে এটি বিন্দু ছাড়াওint
এসগুলি

2

"কম্পিউটার সিস্টেম" এর পছন্দটি কি মাইক্রোকন্ট্রোলারদের অন্তর্ভুক্ত করে? কিছু মাইক্রোকন্ট্রোলার খুব কার্যকর আন্দাজের সময় থাকে, উদাহরণস্বরূপ 8 বিট পিআইসি সিরিজে নির্দেশিকা অনুসারে চারটি ঘড়ি চক্র থাকে যদি না নির্দেশ শাখাটি ভিন্ন ঠিকানায় যায়, ফ্ল্যাশ থেকে না পড়ে থাকে বা একটি বিশেষ দ্বি-শব্দ নির্দেশ না থাকে।

বাধাগুলি এই ধরণের টিমিমগকে অবিলম্বে বাধাগ্রস্থ করবে তবে "বেয়ার মেটাল" কনফিগারেশনে বাধা হ্যান্ডলার ছাড়াই অনেক কিছু করা সম্ভব।

সমাবেশ এবং একটি বিশেষ কোডিং শৈলী ব্যবহার করে কোড লেখা সম্ভব যা কার্যকরভাবে একই সময় গ্রহণ করতে পারে। এটি এখন এতটা সাধারণ নয় যে বেশিরভাগ পিআইসি ভেরিয়েন্টে একাধিক টাইমার থাকে তবে এটি সম্ভব।


2

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

এটি একেবারে কোনও আধুনিক কম্পিউটারে বা আপনার উদাহরণের মতো কোডের জন্য কাজ করবে না।

কেন না? এখানে এমন কিছু জিনিস রয়েছে যা সহজ, ভবিষ্যদ্বাণীমূলক সময়কে বিশৃঙ্খলা করবে:

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

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

যদি আপনার ওএস প্রিপ্রিমটিভ মাল্টিটাস্কিং ব্যবহার করে তবে এই কোডটি চালিত থ্রেডটি যে কোনও মুহুর্তে এর টাইমলাইসটি হারাতে পারে।

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

আপনি যদি কোনও আধুনিক সিস্টেমে সঠিক সময় নির্ধারণ করতে চান তবে আপনাকে বিলম্বের লুপটি প্রবর্তন করতে হবে। আপনাকে দ্রুত পুনরাবৃত্তিগুলি সবচেয়ে ধীর গতিতে চলতে হবে, বিপরীতটি সম্ভব হচ্ছে না। লোকেরা আসল বিশ্বে এটি করার একটি কারণ হ'ল কোনও আক্রমণকারীকে ক্রিপ্টোগ্রাফিক তথ্য ফাঁস করা রোধ করা যিনি অনুরোধগুলি অন্যদের চেয়ে বেশি সময় নিতে পারে।


1

এটি কিছুটা স্পর্শকাতর তবে স্পেস শাটলে ৪ টি রিডানড্যান্ট কম্পিউটার ছিল যা নির্ভুলভাবে সিঙ্ক হওয়ার উপর নির্ভর করে অর্থাৎ তাদের রান-টাইম মিলটি হুবহু।

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


0

আমি মনে করি আমরা এখানে দুটি ভিন্ন ইস্যু মিশ্রিত করছি। (এবং হ্যাঁ, আমি জানি এটি অন্যরা বলেছে, তবে আমি আশা করি এটি আরও স্পষ্টভাবে প্রকাশ করতে পারব))

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

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

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