গণনা শেডার বনাম পাইপলাইন শেডারগুলির মাধ্যমে অ্যালগরিদমগুলি কার্যকর করছে


10

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

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

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

দুজনের মধ্যে বেছে নেওয়ার সময় কি অন্যান্য সুবিধা বা ত্রুটিগুলি বিবেচনা করতে হবে?


: যদি কর্মক্ষমতা ট্যাগ প্রকৃতপক্ষে প্রাসঙ্গিক হয়, তাহলে খেলা ইঞ্জিন রত্ন "কাপড় সিমুলেশন" মার্কো Fratarcangeli থেকে নিবন্ধ থেকে এই ভিডিও দেখার বিবেচনা youtube.com/watch?v=anNClcux4JQ । আপনি মন্তব্যগুলি পড়তে পারেন এবং একটি বিশ্রী বিষয়টি জানতে পারেন: জিএলএসএল / শ্যাডার ভিত্তিক প্রয়োগটি সিউডিএ বা ওপেনসিএল ব্যবহারের চেয়ে দ্রুত ছিল (2010 সালে তত্কালীন ড্রাইভার সমর্থনের কারণে কারণ)। কিছু নিম্ন-স্তরের পার্থক্য রয়েছে যা .. একটি পার্থক্য তৈরি করে।
teodron

@ টিওড্রন আমার কাছে জিপিইউ রত্ন উপলব্ধ নেই এবং আমি উত্স কোডটি খুঁজে পাচ্ছি না। লেখক কি আসলে জিএলএসএল ভার্টেক্স + পিক্সেল শেডার ব্যবহার করেছেন বা তিনি জিএলএসএল কম্পিউট শেডার ব্যবহার করেছেন?
ট্র্যাভিসজি

হ্যাঁ! CUDA এর আগে, সম্প্রদায়টি GPGPU বৈশিষ্ট্যগুলি এভাবে প্রয়োগ করেছিল। খাঁটি জিএলএসএল
teodron

উত্তর:


7

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

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

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

  1. হার্ডওয়্যার এবং পিছনে সামঞ্জস্য । কম্পিউট শেডারগুলি কেবলমাত্র নতুন হার্ডওয়্যারগুলিতে পাওয়া যায় এবং আপনি যদি বাণিজ্যিক পণ্য (যেমন গেম) এর জন্য যাচ্ছেন তবে আপনাকে আশা করা দরকার যে প্রচুর ব্যবহারকারী আপনার পণ্য চালাতে সক্ষম হবেন না।
  2. আপনার সাধারণত জিপিইউ / সিপিইউ আর্কিটেকচার , সমান্তরাল প্রোগ্রামিং এবং মাল্টিথ্রেডিংয়ের (যেমন মেমরি ভাগ করে নেওয়া, মেমরির একত্রিতকরণ, থ্রেড সিঙ্ক্রোনাইজেশন, অ্যাটমিক্স এবং এর কার্য সম্পাদনের উপর প্রভাব) অতিরিক্ত জ্ঞান প্রয়োজন যা আপনার সাধারণত সাধারণ শেডার রাউন্ট ব্যবহার করার প্রয়োজন হয় না ।
  3. শেখার রিসোর্স , অভিজ্ঞতা থেকে কমপ্যুট শেডার, ওপেনসিএল এবং সিইউডিএ (যা ওপেনজিএল আন্তঃব্যবহার্যতাও সরবরাহ করে) সাধারণ শেডার রুটের তুলনায় অনেক কম শিক্ষার সংস্থান রয়েছে।
  4. ডিবাগিং সরঞ্জামগুলি , সঠিক ডিবাগিংয়ের অভাবের সাথে, সরঞ্জামগুলির বিকাশ বেশিরভাগ শেডারের তুলনায় আরও শক্ত হয়ে উঠতে পারে, কমপক্ষে শেডারগুলিকে ভিজ্যুয়াল ডিবাগ করা যেতে পারে।
  5. আমি আশা করি গণনা শেডাররা অন্যান্য শেডারে একই অ্যালগরিদমের চেয়ে আরও ভাল পারফরম্যান্স দেবেন; যদি তারা সম্পন্ন করা হয় ডান , পয়েন্ট 2 থেকে বিবেচনা জিনিষ মধ্যে নেওয়ার পরে তারা গ্রাফিক্স রেন্ডারিং জন্য অতিরিক্ত পদক্ষেপ এড়াতে ডিজাইন করা হয়েছে। তবে আমার দাবিটি সমর্থন করার মতো কোনও ठोस প্রমাণ আমার কাছে নেই।
  6. আপনি যদি জিপজিপিইউর জন্য যান তবে আপনার জিপিপিইউর জন্য চুদা / ওপেনসিএল বিবেচনা করা উচিত।

আমি কখনই কম জানি না যে এটি ভবিষ্যতের জন্য দুর্দান্ত, এবং দুর্দান্ত শেখার অভিজ্ঞতা হবে। শুভকামনা!


আমি মনে করি ওপি এটি জিজ্ঞাসা করতে পারে: কেন খাঁটি জিএলএসএল শেডার বনাম বনাম CUDA তে কোডিং ব্যবহার করে কোনও সমস্যার সমাধান করবেন? কাপড়ের সিমুলেশন সম্পর্কিত একটি গেম প্রোগ্রামিং রত্ন সম্পর্কিত নিবন্ধ রয়েছে যেখানে লেখক ঠিক তা করেন। আর জিএলএসএল হ্যাকির পুরানো উপায়টি পারফরম্যান্সের দিক থেকে CUDA উপায়ের চেয়ে ভাল। আপনার সম্ভবত কেন তা যদি আপনার কোনও ধারণা থাকে তবে এটি নির্দেশ করা উচিত।
teodron

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

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

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

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