ওপেনসিএল এ পুনরাবৃত্তি নিষিদ্ধ কেন?


19

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


2
জিপিইউগুলি অন্যভাবে কাজ করে। (কিছু আর্কিটেকচার) একটি বিশ্বব্যাপী "প্রোগ্রাম স্ট্যাক" ধারণা নেই, সুতরাং এগুলির মধ্যে পুনরাবৃত্ত ফাংশন কলগুলি সম্ভব নয়। ওপেনসিএল সম্ভবত সর্বনিম্ন সাধারণ ডিনোমিনেটর গ্রহণ করে, এটি একে একে জিপিইউতে বহনযোগ্য রাখার জন্য সম্পূর্ণ অস্বীকার করে। : একটি মন্তব্য CUDA হার্ডওয়্যার কিছু সময়ে পুনরাবৃত্তির জন্য সমর্থন চালু হয়েছে বলে মনে হয় stackoverflow.com/q/3644809/1198654
glampert

উত্তর:


27

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

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

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

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

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


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

লেজ পুনরাবৃত্তি মত?
তন্ময় পাতিল

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