ওপেনজিএল এর সরাসরি রাজ্য অ্যাক্সেস প্রক্রিয়াটির সুবিধা কী?


11

আমি ওপেনগ্ল.আর.৪.২০১ open ওপেনগ্ল.আর.ইগিতে সরাসরি স্টেট অ্যাক্সেস (ডিএসএ) সম্পর্কে পড়ছি এবং নিশ্চিত হয়ে উঠছি না যে আমি এটি ঠিক করছি কিনা।

এটি বোঝা যাচ্ছে যে, পুরানো উপায়টি কম দক্ষ:

glBind(something)
glSetA(..)
glSetB(..)
glSetC(..)

নতুন উপায়ের চেয়ে:

glSetA(something, ..)
glSetB(something, ..)
glSetC(something, ..)

এর চেহারা থেকে এখন প্রত্যেককে glSetএর glBind(something)অভ্যন্তরীণটি অন্তর্ভুক্ত করতে হবে এবং যদি ওপেনজিএল এখনও একটি রাষ্ট্র-মেশিন হয়ে থাকে তবে কোনও একক ক্ষেত্রে প্রয়োগকৃত পরিবর্তনগুলি গ্রহণ করতে পারে না something

নতুন ডিএসএর পিছনে যুক্তি এবং সুবিধার জন্য দয়া করে ব্যাখ্যা করুন।

উত্তর:


21

এর চেহারা থেকে এখন প্রতিটি glSet এর ভিতরে glBind (কিছু) অন্তর্ভুক্ত করতে হবে

বেপারটা এমন না. এটি অন্যান্য উপায়ে যেমন নীচে কয়েকটি অনুচ্ছেদ বর্ণনা করা হয়েছে।

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

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

জিপিইউ রাষ্ট্রীয় মেশিন নয়। জিএল স্টেট মেশিন ইন্টারফেসটি এমন একটি অনুকরণ যা ডিএসএ-এর মতো চালকের অভ্যন্তরীণ অংশকে আবৃত করে, অন্যভাবে নয়।

মোড়কের একটি স্তর মুছে ফেলা - একটি স্তর যার জন্য জিএল সার্ভারে অতিরিক্ত সংখ্যক কল প্রয়োজন - এটি একটি ছোট ছোট হলেও স্পষ্টতই জয়।

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

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

নতুন ডিএসএর পিছনে যুক্তি এবং সুবিধার জন্য দয়া করে ব্যাখ্যা করুন।

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

দ্বিতীয়টি ছিল পূর্বের হিসাবে বর্ণিত স্টেট-মেশিন এপিআই ওভারহেড।

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

-

এক্সট্রাডেট_স্টেট_অ্যাক্সেস এক্সটেনশন স্পেসিফিকেশনে অতিরিক্ত ন্যায়সঙ্গততা এবং ব্যাখ্যা দেওয়া আছে ।

-

হার্ডওয়্যার পরিবর্তনগুলি যা এপিআই ডিজাইনের সাথে প্রাসঙ্গিক তার চেয়ে অনেক বেশি।

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

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

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

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

আধুনিক হার্ডওয়্যার ক্লাসিক ওপেনজিএল মডেল থেকে আরও বেশি কাজ করে। ডিএসএ হ'ল একটি সামান্য পরিবর্তন যা প্রায় 10+ বছর আগে প্রয়োজন হয়েছিল (এটি মূলত ওপেনজিএল 3.0 এর অংশ হিসাবে প্রতিশ্রুতি দেওয়া হয়েছিল), ডি 3 ডি 10 এর মতোই। ওপেনজিএলকে প্রাসঙ্গিক রাখতে উপরের হার্ডওয়্যার পরিবর্তিত অনেকগুলি ডিএসএর চেয়ে অনেক বেশি প্রয়োজন, যার কারণেই ওপেনজিএল মডেলকে তীব্রভাবে পরিবর্তিত করা আরও আরও বড় এক্সটেনশন পাওয়া যায় । তারপরে সম্পূর্ণ নতুন GLnext এপিআই প্লাস ডি 3 ডি 12, ম্যান্টল, মেটাল ইত্যাদি রয়েছে যার মধ্যে একটিও আউটমোডড স্টেট মেশিনকে বিমূর্ত রাখে।


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

@ ক্রমস্টার্ন: আমার সেরাটা করেছে আপনার যদি আরও বিশদ প্রয়োজন হয় তবে আমার চেয়ে আরও বেশি জ্ঞানী কেউ এর সরবরাহ করতে চলেছেন।
শান মিডলডিচ

@ ক্রোমস্টার্ন আমি দেখেছি (ইতিহাসে আমার সীমাবদ্ধ গবেষণা থেকে) ওপেনজিএল কম ফ্রেমে কম ফ্রেমে সিপিইউ দিকে ফোন করে; প্রদর্শন তালিকা (যার মূল্য তাদের ছিল), glDrawArrays (এক কল এ আঁকুন), VBOs (একবার GPU এ আপলোড করুন), VAOs (একবারে বৈশিষ্ট্যগুলিতে বাফারকে আবদ্ধ করুন), ইউনিফর্ম বাফার অবজেক্ট (একসাথে ইউনিফর্ম সেট করুন) আমি মিস করছি এমন আরও অনেক কিছুই আছে, আমি নিশ্চিত।
র‌্যাচেট ফ্রিক

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

@ সানমিডলিচ আমার প্রতি ফ্রেমে কল সেট করা উচিত।
র‌্যাচেট ফ্রিক 18

1

ওভারভিউ এটিকে ন্যায্য করে:

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

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

মত

oldState = glGet()
glBind()
glDoThings...
glSet(oldState)  // restore, in case anyone needs it just as they left it

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


"জিজ্ঞাসা / স্ট্যাশ / পরিবর্তন / পুনরুদ্ধার করা দরকার" - ডিএসএর সাথে এটি আরও কীভাবে ভাল?
ক্রোমস্টার

.. দেখানোর জন্য সিডো কোড যুক্ত করুন। ডিএসএর সাথে এটির কোনওটিই প্রয়োজনীয় নয়। সম্ভবত সম্ভবত বর্তমান হার্ডওয়্যার "বাঁধাই" রাষ্ট্রের প্রয়োজন হয় না, কেবল প্রয়োজন হিসাবে এটি সমস্ত অ্যাক্সেস করতে পারে।
ডেভিড ভ্যান

চেইনটি get/bind/do/setখুব কমই ব্যবহৃত হয়, কারণ 'গেট' খুব ধীর। সাধারণত অ্যাপ্লিকেশনগুলিকে যেভাবেই চলকগুলির প্রতিরূপ বজায় রাখতে হয়, তাই এটি কেবল নেমে যায় bind/do। আমি যদিও পয়েন্ট দেখতে।
ক্রোমস্টার

2
@ ড্রাইভারের রাজ্য থেকে ক্রম পাওয়া দ্রুত হতে পারে, কিছু জেটেবল স্টেটের জিপিইউতে কোনও ব্যবসা নেই তাই এটি কেবলমাত্র দ্রুতগতির র‌্যাম থেকে পাওয়া যায়।
র‌্যাচেট ফ্রিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.