ডিভাইস ড্রাইভারের নির্দেশাবলী কীভাবে জিপিইউ প্রোগ্রাম করে?


9

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

আসুন আমরা এটিকে এমন স্তরে নামি যেখানে হার্ডওয়্যারটি কার্নেল রয়েছে কিনা সেদিকে খেয়াল রাখে না এবং কেবল নির্দেশনা নেয়।

মূলত, জিপিইউগুলি কীভাবে সবকিছু করতে হয় তা "জানে"? কোনও ড্রাইভার মূলত প্রতিটি বিয়োগকার, অভ্যন্তরীণ বা হার্ডওয়্যার সার্কিট-স্তরের ফাংশন নিয়ন্ত্রণ করতে পারে বা কোনও ড্রাইভার যে বিশেষ নির্দেশাবলী সরবরাহ করে তার জন্য প্রদর্শনের জন্য বাইনারি ডেটা গণনা করার জন্য প্রয়োজনীয়?

যদি তা হয় তবে সিপিইউর মতো প্রেরিত নির্দেশাবলী বুঝতে জিপিইউ কোনও "বিশেষ" ভাষা বা "সমাবেশ" ব্যবহার করে?

আমার জ্ঞান সম্পর্কে আমার অনেকগুলি ফাঁক রয়েছে এবং জিপিইউগুলির পিছনে এই অপ্রীতিকর "রহস্য" রয়েছে এবং এটি হার্ডওয়ারের মাধ্যমে সরাসরি অ্যাক্সেস করে।

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

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

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

তাহলে জিপিইউগুলি বেয়ার-মেটাল, হার্ডওয়্যার-নির্দিষ্ট স্তরের প্রত্যক্ষ হার্ডওয়্যার দৃষ্টিভঙ্গি থেকে কীভাবে "প্রোগ্রামড" হয়?


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

আমি সহায়তা কেন্দ্র পড়ছি না।

মনে মনে যদি জিজ্ঞাসা করি না কেন?
ডক্টোরো রিচার্ড

কারণ আরও ভাল সময় চিন্তা করতে ব্যয় করা যায়, আমার "ঠিক আছে" প্রশ্নটি যেমন দাঁড়িয়ে আছে তেমন সমাধান করার এবং উত্তর দেওয়ার চেষ্টা করা যায়।

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

উত্তর:


8

মূলত, জিপিইউগুলি কীভাবে সবকিছু করতে হয় তা "জানে"? কোনও ড্রাইভার মূলত প্রতিটি বিয়োগকার, অভ্যন্তরীণ বা হার্ডওয়্যার সার্কিট-স্তরের ফাংশন নিয়ন্ত্রণ করতে পারে বা কোনও ড্রাইভার যে বিশেষ নির্দেশাবলী সরবরাহ করে তার জন্য প্রদর্শনের জন্য বাইনারি ডেটা গণনা করার জন্য প্রয়োজনীয়?

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

যদি তা হয় তবে সিপিইউর মতো প্রেরিত নির্দেশাবলী বুঝতে জিপিইউ কোনও "বিশেষ" ভাষা বা "সমাবেশ" ব্যবহার করে?

হ্যা এবং না. বেশিরভাগ ডিভাইসের মতো, ভিডিও-কার্ডগুলি বিষয়গুলি সহজ করার জন্য মানক ব্যবহার করে। তারা মত মান ব্যবহার VESA বুট টাইম ভিডিওটি পছন্দ করুন নিয়মিত ফাংশন অ্যাক্সেস করতে, বা CUDA এক্সেস জিপিইউ প্রোগ্রামিং ফাংশন। এছাড়াও, ডিভাইসের প্রোগ্রামিং ডকুমেন্টেশনের (যা অ্যাডাপ্টারের ওয়েব সাইট থেকে পাওয়া যায়) এর সাথে মিল রেখে প্রোগ্রামগুলি মেশিন কোড (প্রায়শই এসেম্বলারের কাছে সংকলিত) ব্যবহার করে অ-মানক, বা ডিভাইস-নির্ভর ফাংশনগুলি অ্যাক্সেস করতে পারে।

আমার জ্ঞান সম্পর্কে আমার অনেকগুলি ফাঁক রয়েছে এবং জিপিইউগুলির পিছনে এই অপ্রীতিকর "রহস্য" রয়েছে এবং এটি হার্ডওয়ারের মাধ্যমে সরাসরি অ্যাক্সেস করে।

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

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

একটি ড্রাইভার মেমরি-ম্যাপযুক্ত পোর্টগুলি এবং এগুলি ব্যবহার করে নিয়মিত সিপিইউ নির্দেশাবলী সহ ডিভাইসটি পড়তে এবং লিখতে পারে। সহজেই বোঝার উদাহরণ হিসাবে, আপনি B8000 ঠিকানার ঠিকানায় “মেমরি” লিখে টেক্সট মোডে একটি অক্ষর স্ক্রিনে রাখতে পারেন। এই ঠিকানাটি র্যাম ছিল না, বরং এটি ভিডিও-কার্ডের মেমরির সাথে সামঞ্জস্য করার জন্য ম্যাপ করা হয়েছিল, সুতরাং এটিতে লেখাটি স্ক্রিনে লিখতে পারে। অনুরূপভাবে, আপনি অক্ষর যদি আপনি চান লিখতে রেখে আসুন পর্দা লিখতে পারে AL, রেজিস্ট্রি 0x09মধ্যে AHরেজিস্টার, এবং তারপর বায়োস বিঘ্ন কলিং 0x10। আরও উন্নত ফাংশনগুলি আলাদা নয়; আপনি অ্যাডাপ্টারের মেমরিটি পড়তে এবং লিখতে, এর চিপটিতে ফাংশনগুলি কল করতে পারেন এবং এমন কোনও ইনট্রফেস (গুলি) ব্যবহার করতে পারেন যা ডিভাইসটি প্রকাশ করে এবং দস্তাবেজগুলি।

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

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

তাহলে জিপিইউগুলি বেয়ার-মেটাল, হার্ডওয়্যার-নির্দিষ্ট স্তরের প্রত্যক্ষ হার্ডওয়্যার দৃষ্টিভঙ্গি থেকে কীভাবে "প্রোগ্রামড" হয়?

একাধিক স্তর মাধ্যমে:

  1. সলিড-স্টেটের উপাদানগুলি যেমন ট্রানজিস্টর এবং এর মতো
  2. নিম্ন-স্তরের ASICs
  3. অন-বোর্ড প্রসেসর (গুলি) এবং চিপসেটগুলি
  4. নিম্ন-স্তরের প্রোগ্রামিং ইন্টারফেস (সমাবেশ)
  5. উচ্চ-স্তরের প্রোগ্রামিং ইন্টারফেস (ডাইরেক্টএক্স, ওপেনজিএল)
  6. উচ্চ-স্তরের প্রোগ্রামিং ভাষা (সি ++, সি #, পাইথন ইত্যাদি)

1
'খালি ধাতু' নোট; আপনি যদি সর্বাধিক গেম দেবের কথা শুনে থাকেন তবে তারা অভিযোগ করছেন যে তাদের কার্ডের নিজস্ব মেশিন লঙ্গলে সংকলিত কোড লেখার চেয়ে ডাইরেক্টএক্স / ওপেনজিএল এর মতো উচ্চ স্তরের বিমূর্ততা ব্যবহার করতে হবে। এনভিডিয়া'র FERMI GPUs কোড. google.com/p/asfermi দ্বারা ব্যবহৃত এসেম্বারার ল্যাঙ্গুয়েজের তথ্যের জন্য এখানে দেখুন নোট করুন যে এমনকি সিইডিডিএ একটি উচ্চ স্তরের ল্যাঙ্গুওল (পিটিএক্স) এর উপরে বসে আছে যা মেশিন কোডে সংকলিত হয়ে যায়, তাই আপনি সিইউডিএ-তে প্রোগ্রাম করেন এমন অপকডগুলি পারে সংকলিত আউটপুট হিসাবে একই হবে না।
ফ্র্যাঙ্ক থমাস

আরে, আপনি কি এই কলেজের ছাত্রদের জন্য একটি ভাল বইয়ের পরামর্শ মাপসই করতে পারেন যা আপনি এই পোস্টে যে কথা বলেছিলেন তা কভার করে? আমি কখনও জিপিইউ প্রোগ্রামিংয়ে কাজ করতে আগ্রহী নই, তবে কীভাবে এটি সমস্ত কাজ করে তা বোঝার ফাঁকগুলি হতাশাব্যঞ্জক।
ল্যাঞ্জা

2

আমি কম্পিউটার আর্কিটেকচারে ঠিক বুদ্ধিমান নই, তবে আমি আপনার জ্ঞানের সর্বোত্তম অংশে আপনার প্রশ্নটি পয়েন্টগুলি দ্বারা আচরণ করার চেষ্টা করব।


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

এটি সত্য, মূলত জিপিইউর সাথে সরাসরি মিথস্ক্রিয়া কার্যকর করা সহজ নয়। সুতরাং ডাইরেক্টএক্স এবং ওপেনজিএলের মতো গ্রাফিক ফ্রেমওয়ার্কগুলির বিকাশ।

উইকিপিডিয়া থেকে এই সহজ সংজ্ঞা এটি আরও বিশদে ব্যাখ্যা করে:

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


মূলত, জিপিইউগুলি কীভাবে সবকিছু করতে হয় তা "জানে"? কোনও ড্রাইভার মূলত প্রতিটি বিয়োগকার, অভ্যন্তরীণ বা হার্ডওয়্যার সার্কিট-স্তরের ফাংশন নিয়ন্ত্রণ করতে পারে বা কোনও ড্রাইভার যে বিশেষ নির্দেশাবলী সরবরাহ করে তার জন্য প্রদর্শনের জন্য বাইনারি ডেটা গণনা করার জন্য প্রয়োজনীয়?

জিপিইউ হ'ল মাইক্রোপ্রসেসর। যেমন, তারা প্রক্রিয়া। তারা সিপিইউ থেকে উত্সাহিত ডেটা প্রক্রিয়া করে (যেমন উপাদানগুলির অবস্থান) যথাযথ প্রদর্শনীতে। তারা কীভাবে কীভাবে করতে হয় তা "জানেন" কারণ তারা সেভাবে প্রস্তুত হয় এবং বৃহত একটি গ্রুপ জিপিইউতে এবং তার থেকে ডেটা প্রেরণের সঠিক উপায়গুলিতে সম্মত হয়।

ডিসপ্লে ড্রাইভারটিকে বাফার বা প্রক্সি হিসাবে ভাবেন। কল্পনা করুন আপনি একটি প্রোগ্রাম উইন্ডো এবং ব্যবহারকারী আপনাকে আপ আপ। আপনি জিপিইউকে ডিসপ্লেটি রিফ্রেশ করতে বলুন। কিন্তু জিপিইউ বলে ক্লিঙ্গন এবং আপনি কথা বলতে Vulcan , ড্রাইভার আপনার আদেশ পায়, GPU- তা অনুবাদ করে ঘুরে যে আছে আপনাকে যা আদেশ করা।

যদি তা হয় তবে সিপিইউর মতো প্রেরিত নির্দেশাবলী বুঝতে জিপিইউ কোনও "বিশেষ" ভাষা বা "সমাবেশ" ব্যবহার করে?


উইকিপিডিয়া থেকে :

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

এর উদাহরণ রয়েছে এবং মনে রাখবেন যে পৃথক নির্মাতারা (এনভিআইডিআইএ, এটিআই) এর নিজস্ব নির্দেশাবলী রয়েছে।

এছাড়াও, ওপিসিএল এবং আরও অনেক উপায়ে রয়েছে, একরকমভাবে জিপিইউতে সরাসরি প্রোগ্রামের নির্দেশাবলী।

এই সমস্ত কিছু প্রশ্নের আপনার উত্তর দেওয়া উচিত।

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