কম্পিউটার গ্রাফিক্স প্রদর্শনে সিপিইউ এবং জিপিইউ কীভাবে ইন্টারঅ্যাক্ট করে?


58

ওপেনজিএল এপিআইয়ের উপর ভিত্তি করে ঘূর্ণনকারী ত্রিভুজ সহ ট্রায়াঙ্গল.এক্সে নামে একটি ছোট সি ++ প্রোগ্রামের স্ক্রিনশটটি এখানে দেখতে পাবেন।

এখানে চিত্র বর্ণনা লিখুন

স্বীকারোক্তিযুক্ত একটি খুব মৌলিক উদাহরণ তবে আমি মনে করি এটি অন্যান্য গ্রাফিক কার্ড অপারেশনের ক্ষেত্রে প্রযোজ্য।

আমি কেবল কৌতূহলী ছিলাম এবং মনিটরে ত্রিভুজটি ঘুরতে না পারা অবধি উইন্ডোজ এক্সপি এর অধীনে ট্রায়াঙ্গল.এক্সেতে ডাবল ক্লিক করা থেকে পুরো প্রক্রিয়াটি জানতে চেয়েছিলাম। কী ঘটে, সিপিইউ (যা প্রথমে .exe পরিচালনা করে) এবং জিপিইউ (যা শেষ পর্যন্ত স্ক্রিনে ত্রিভুজটি আউটপুট দেয়) কীভাবে ইন্টারঅ্যাক্ট করে?

আমার ধারণা এই ঘোরানো ত্রিভুজটি প্রদর্শনের সাথে জড়িত মূলত অন্যদের মধ্যে নিম্নলিখিত হার্ডওয়্যার / সফ্টওয়্যার:

হার্ডওয়্যারের

  • HDD এর
  • সিস্টেম মেমোরি (র‌্যাম)
  • সিপিইউ
  • ভিডিও স্মৃতি
  • জিপিইউ
  • LCD প্রদর্শন

সফটওয়্যার

  • অপারেটিং সিস্টেম
  • ডাইরেক্টএক্স / ওপেনজিএল এপিআই
  • এনভিডিয়া ড্রাইভার

উদাহরণস্বরূপ কোনও প্রবাহের চার্ট সহ, কেউ কি প্রক্রিয়াটি ব্যাখ্যা করতে পারেন?

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

আমি নিশ্চিত যে প্রচুর লোকজন যারা নিজেকে আইটি পেশাদার বলবেন তারা এই প্রক্রিয়াটি সঠিকভাবে বর্ণনা করতে পারেনি।


আপনি কেবল জিপিইউকে সিপিইউয়ের একটি এক্সটেনশন বিবেচনা করতে পারলে আপনার দ্বিধা শেষ হয়ে যাবে!
কাওয়াইএক্সএক্স

উত্তর:


55

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

উপস্থাপনা

এমনকি আপনি যে প্রশ্নটি স্ক্রিনে আঁকেন, এমন একক চিত্র পেতে কী কী লাগে?

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

তবে , কিছু অঙ্কন করার আগে আমাদের প্রথমে কিছু ভারা চালাতে হবে। আমরা পরে দেখব কেন :

// Clear The Screen And The Depth Buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

// Reset The Current Modelview Matrix
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity();

// Drawing Using Triangles
glBegin(GL_TRIANGLES);

  // Red
  glColor3f(1.0f,0.0f,0.0f);
  // Top Of Triangle (Front)
  glVertex3f( 0.0f, 1.0f, 0.0f);

  // Green
  glColor3f(0.0f,1.0f,0.0f);
  // Left Of Triangle (Front)
  glVertex3f(-1.0f,-1.0f, 1.0f);

  // Blue
  glColor3f(0.0f,0.0f,1.0f);
  // Right Of Triangle (Front)
  glVertex3f( 1.0f,-1.0f, 1.0f);

// Done Drawing
glEnd();

তাহলে কী করল?

আপনি যখন এমন কোনও প্রোগ্রাম লেখেন যা গ্রাফিক্স কার্ডটি ব্যবহার করতে চায় আপনি সাধারণত ড্রাইভারের কাছে কোনও ধরণের ইন্টারফেস বেছে নেবেন। ড্রাইভারের কয়েকটি পরিচিত ইন্টারফেস হ'ল:

  • যেমন OpenGL
  • এমন Direct3D
  • CUDA

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

এই ইন্টারফেস আপনাকে নির্দিষ্ট সরঞ্জাম দিতে বাধ্য । এই সরঞ্জামগুলি এমন একটি API এর আকার নেয় যা আপনি আপনার প্রোগ্রাম থেকে কল করতে পারেন।

সেই এপিআই হ'ল আমরা উপরের উদাহরণে ব্যবহৃত হচ্ছে। আসুন আরও ঘুরে দেখুন।

ভারা

আপনি প্রকৃত কোনও অঙ্কন করতে পারার আগে আপনাকে একটি সেটআপ করতে হবে । আপনাকে আপনার ভিউপোর্ট (আসলে যে অঞ্চলটি উপস্থাপন করা হবে), আপনার দৃষ্টিভঙ্গি ( আপনার বিশ্বের ক্যামেরা ), কোন অ্যান্টি-এলিয়াসিং আপনি ব্যবহার করবেন (আপনার ত্রিভুজটির প্রান্তটি মসৃণ করার জন্য) ...

তবে আমরা এর কোনটির দিকে নজর দেব না। আমরা প্রতিটি ফ্রেম আপনাকে করতে হবে স্টাফ তাকান । ভালো লেগেছে:

পর্দা সাফ করা হচ্ছে

গ্রাফিক্স পাইপলাইন আপনার জন্য প্রতিটি ফ্রেম স্ক্রিন সাফ করবে না। আপনাকে এটা বলতে হবে। কেন? এই জন্যই:

এখানে চিত্র বর্ণনা লিখুন

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

রুপান্তর

এখানে চিত্র বর্ণনা লিখুন
চিত্র উত্স

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

এরপরে, আমরা আমাদের প্রজেকশন ম্যাট্রিক্স প্রয়োগ করি। এটি সমস্ত স্থানাঙ্ককে সরিয়ে দেয় যাতে তারা আমাদের ক্যামেরার সঠিকভাবে মুখোমুখি হয়।

এখন আমরা আমাদের ভিউপোর্ট ম্যাট্রিক্সের সাথে আরও একবার রূপান্তর করি। আমরা আমাদের মনিটরের আকারে আমাদের মডেলটিকে স্কেল করতে এটি করি। এখন আমাদের উল্লম্বের একটি সেট রয়েছে যা রেন্ডার করার জন্য প্রস্তুত!

আমরা একটু পরে রূপান্তর ফিরে আসব।

অঙ্কন

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

এর পরে, আমরা 3 টি শীর্ষ কোণের একটি তালিকা সরবরাহ করতে পারি যা প্রতিটি ত্রিভুজটি তৈরি করা উচিত। প্রতিটি ত্রিভুজ 3 টি স্থানাঙ্ক ব্যবহার করে (যেমন আমরা 3D-স্পেসে আছি)। অতিরিক্তভাবে, আমি কল করার আগে কল করে প্রতিটি প্রান্তের জন্য একটি রঙ সরবরাহ করি ।glColor3f glVertex3f

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

মিথষ্ক্রিয়া

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

এই পায় অনেক বেশি কঠিন একবার আপনি আপনার 3D দৃশ্য সাথে আলাপচারিতা শুরু করতে চাই।

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

তো, আপনি কীভাবে এটি ঘোরান?

রুপান্তর

আমি সাধারণত প্রয়োগ করা হয় এমন দুটি ধরণের রূপান্তর সম্পর্কে সচেতন:

  • ম্যাট্রিক্স-ভিত্তিক রূপান্তর
  • হাড়-ভিত্তিক রূপান্তর

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

উদাহরণ

এর আগে, আমরা আমাদের ত্রিভুজ আঁকার আগে আমাদের পরিচয় ম্যাট্রিক্স লোড করেছি । পরিচয় ম্যাট্রিক্স এমন একটি যা কেবল কোনও রূপান্তর সরবরাহ করে না। সুতরাং, আমি যাই আঁকি না কেন কেবল আমার দৃষ্টিকোণ দ্বারা প্রভাবিত হয়। সুতরাং, ত্রিভুজটি মোটেও ঘোরানো হবে না।

আমি যদি এখনই এটি ঘোরানো চাই, আমি নিজেই গণিতটি করতে পারি (সিপিইউতে) এবং কেবলমাত্র অন্য স্থানাঙ্কগুলির glVertex3fসাথে কল করতে পারি (যা ঘোরানো হয়)। অথবা আমি জিপিইউকে অঙ্কনের আগে ফোন করে সমস্ত কাজ করতে দিতে পারি :glRotatef

// Rotate The Triangle On The Y axis
glRotatef(amount,0.0f,1.0f,0.0f);               

amountঅবশ্যই, একটি নির্দিষ্ট মান। আপনি যদি অ্যানিমেট করতে চান তবে আপনাকে ট্র্যাক রাখতে হবে amountএবং প্রতিটি ফ্রেম এড়াতে হবে।

তো, অপেক্ষা করুন, এর আগে ম্যাট্রিক্সের সমস্ত টকের কী হয়েছিল?

এই সহজ উদাহরণে, আমাদের ম্যাট্রিক্স সম্পর্কে যত্ন নিতে হবে না। আমরা কেবল কল করি glRotatefএবং এটি আমাদের জন্য সমস্ত কিছু যত্ন নেয় care

glRotateangleভেক্টর xyz এর চারপাশে ডিগ্রির একটি ঘূর্ণন উত্পাদন করে । বর্তমান ম্যাট্রিক্স (দেখুন গ্লোম্যাট্রিক্সমোড ) একটি ঘূর্ণন ম্যাট্রিক্স দ্বারা গুণিত হয়েছে পণ্যটি বর্তমান ম্যাট্রিক্সকে প্রতিস্থাপন করে, যেন গ্লোমલ્ટ ম্যাট্রিক্সকে তার যুক্তি হিসাবে নিম্নলিখিত ম্যাট্রিক্সের সাথে ডাকা হয়:

x 2 ⁡ 1 - c + cx ⁢ y ⁡ 1 - c - z ⁢ sx ⁢ z ⁡ 1 - c + y ⁢ s 0 y ⁢ x ⁡ 1 - সি + জেড ⁢ সি 2 ⁡ 1 - সি + সি ⁢ z 1 - সি - x ⁢ s 0 x ⁢ z ⁡ 1 - সি - ওয়াই ⁢ সি ⁢ জেড ⁡ 1 - সি + এক্স ⁢ এসজেড 2 ⁡ 1 - সি + সি 0 0 0 0 1 1

ঠিক আছে, তার জন্য ধন্যবাদ!

উপসংহার

যা প্রকট হয়ে ওঠে তা হ'ল ওপেনজিএলে অনেক কথা হয় । তবে এটি আমাদের কিছু বলছে না । যোগাযোগ কোথায়?

ওপেনজিএল এই উদাহরণে কেবলমাত্র আমাদের যা বলছে তা হ'ল এটি হয়ে গেলে । প্রতিটি অপারেশন একটি নির্দিষ্ট পরিমাণ সময় নেবে। কিছু অপারেশন অবিশ্বাস্যভাবে দীর্ঘ সময় নেয়, অন্যদের অবিশ্বাস্যভাবে দ্রুত।

জিপিইউতে একটি ভার্টেক্স পাঠানো এত দ্রুত হবে, কীভাবে এটি প্রকাশ করতে হবে তা আমি জানতাম না। সিপিইউ থেকে জিপিইউতে প্রতিটি একক ফ্রেমে হাজার হাজার প্রান্ত পাঠানো সম্ভবত সম্ভবত কোনও সমস্যা নয়।

আপনার ভিউপোর্টটি কতটা বড় তার উপর নির্ভর করে স্ক্রিনটি সাফ করা এক মিলিসেকেন্ড বা তার থেকেও খারাপ সময় নিতে পারে (মনে রাখবেন, আপনার প্রতিটি ফ্রেম আঁকার জন্য সাধারণত আপনার প্রায় 16 মিলিসেকেন্ড সময় থাকে)। এটি সাফ করার জন্য, ওপেনএলকে আপনি যে রঙটি পরিষ্কার করতে চান তাতে প্রতিটি একক পিক্সেল আঁকতে হবে, এটি কয়েক মিলিয়ন পিক্সেল হতে পারে।

এর বাইরে, আমরা কেবলমাত্র গ্রাফিক্স অ্যাডাপ্টারের ক্ষমতার বিষয়ে ওপেনগেলকে জিজ্ঞাসা করতে পারি (সর্বাধিক রেজোলিউশন, সর্বাধিক অ্যান্টি-এলিয়াসিং, সর্বাধিক রঙ গভীরতা, ...)।

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

তারপরে আমরা আমাদের গণনার ফলাফলকে "নতুন রেন্ডার" করতে পারি (নতুন রঙের আকারে) একটি নতুন টেক্সচারে।

এইভাবে আপনি অন্যান্য উপায়ে আপনার জন্য জিপিইউকে কাজ করতে পারেন। আমি ধরে নিই CUDA সেই দিকটির সাথে একই রকম অভিনয় করে, তবে এর সাথে কাজ করার সুযোগ আমার কখনই হয়নি।

আমরা সত্যিই কেবলমাত্র সামান্য বিষয় স্পর্শ। থ্রিডি গ্রাফিক্স প্রোগ্রামিং একটি জন্তুটির নরক hell

এখানে চিত্র বর্ণনা লিখুন
চিত্র উত্স


38

আপনি যা বুঝতে পারছেন না ঠিক তা বোঝা শক্ত।

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

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

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


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

2
জড়িত কোনও সিপিইউ নির্দেশিকা নেই। ড্রাইভার এবং রানটাইম আপনার সিডিডিএ, ওপেনজিএল, ডাইরেক্ট 3 ডি ইত্যাদি স্থানীয় জিপিইউ প্রোগ্রাম / কার্নেলগুলিতে সংকলন করে, যা ডিভাইস মেমোরিতে আপলোড করা হয়। কমান্ড বাফারটি অন্য সংস্থানগুলির মতো তাদের বোঝায়।
এক্সেল Gneiting

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

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

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

13

আমি কেবল কৌতূহলী ছিলাম এবং মনিটরে ত্রিভুজটি ঘুরতে না পারা অবধি উইন্ডোজ এক্সপি এর অধীনে ট্রায়াঙ্গল.এক্সেতে ডাবল ক্লিক করা থেকে পুরো প্রক্রিয়াটি জানতে চেয়েছিলাম। কী ঘটে, সিপিইউ (যা প্রথমে .exe পরিচালনা করে) এবং জিপিইউ (যা শেষ পর্যন্ত স্ক্রিনে ত্রিভুজটি আউটপুট দেয়) কীভাবে ইন্টারঅ্যাক্ট করে?

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

সিপিইউ এবং জিপিইউয়ের মধ্যে ইন্টারফেস কী?

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

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

জিপিইউতে কোড চালাবেন এবং সিপিইউতে নয়?

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

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

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

এই জিপিইউ নির্দেশাবলী / মেমরি / কোড গ্রাফিকগুলি কীভাবে দেখায়?

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

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

এটি পুরো গ্রাফিক্স ধারণার মূল সূত্র, আরও গবেষণা পাঠকের জন্য হোমওয়ার্ক home


7

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


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

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

5

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

সুতরাং প্রতিটি ড্র কল ইত্যাদিতে যা ঘটেছিল তা হ'ল ব্যবহারকারী স্পেস ড্রাইভার কমান্ডটি সংকলন করবে, যার পরে কার্নেল স্পেস ড্রাইভারকে একটি বিঘ্নিত হয়ে কল করে এবং শেষ পর্যন্ত ডিভাইস মেমরির জন্য কমান্ড বাফারটি জমা দেয় এবং জিপিইউকে রেন্ডারিং শুরু করার নির্দেশ দেয়।

কনসোলগুলিতে আপনি নিজে নিজে বিশেষত PS3 এ সমস্ত করতে মজা করতে পারেন।


0

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

এটি এমন এক র্যামের মতো যেখানে সিপিইউ স্টাফ রাখে যাতে এটি লোড এবং দ্রুত প্রক্রিয়া করতে পারে। উভয়ই গেমগুলি দ্রুত তৈরি করে।

অথবা সাউন্ড কার্ড বা নেট কার্ড একই নীতির ভিত্তিতে কাজ করে, এটি হ'ল ডেটা পেতে এবং সিপিইউর কিছু কাজ অফলোড করে।


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

0

আমি মনে করি ওপি নিশ্চিতভাবে নিশ্চিত নয় যে সিপিইউ গ্রাফিক্স কার্ডটি ঠিক কী করতে বলছে এবং গ্রাফিক্স সম্পর্কিত কমান্ড (যেমন ওপেনগেল বা ডাইরেক্ট 3 ডি কমান্ডগুলি) সরাসরি জিপিইউতে কেন পাঠানো হচ্ছে না।

সিপিইউ জিপিইউকে কেবল কী রেন্ডার করতে হবে তা বলে। সমস্ত নির্দেশাবলী প্রথমে সিপিইউয়ের মধ্য দিয়ে যায় যেখানে তারা জিপিইউর প্রকৃতপক্ষে রেন্ডারিংয়ের জন্য সেটআপ / আরম্ভ করে।

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