জিপিইউতে লুকিং টেবিল ব্যবহার করার সময় অনুকূল মেমরি অ্যাক্সেস?


9

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

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

পল বোর্কের ক্লাসিক কোপিসপাস্ট টেবিলটি 256 * 16 অ্যারে তাই কোনও স্কেলার বাইট টাইপ ব্যবহার করা হলে এটি সম্ভবত 4 কেবি টেক্সচার বা এসএসবিওতে প্যাক করা যেতে পারে।

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


যদি এটি কেবল পঠনযোগ্য সারণী হয় তবে আপনি কেবল একটি বাফার / টেক্সচার ব্যবহার করতে পারেন। আপনি এটি কোনও একটি সাধারণ টেক্সচার ফর্ম্যাটে প্যাক করতে পারেন, বা কাস্টম ফর্ম্যাট পেতে আপনি ডিএক্স 11 / ওপেনজিএল এর কয়েকটি নতুন বৈশিষ্ট্য ব্যবহার করতে পারেন। ডিএক্স 11 জমিতে ইউএভি, বা ওপেনজিএল জমিতে একটি টেক্সচার / শ্যাডার_আইমেজ_লোড_স্টোর।
রিচিস্যামস ২

এছাড়াও, এই উপস্থাপনাটি একবার দেখুন: cvg.ethz.ch/teaching/2011spring/gpgpu/cuda_memory.pdf এটি সিআইডিএর জন্য, তবে এটি আপনাকে অন্তর্নিহিত হার্ডওয়্যারটিতে কী ঘটছে সে সম্পর্কে আরও ভাল ধারণা দেওয়া উচিত
রিচিস্যামস

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

উত্তর:


6

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

  • চুদা: থ্রেডগ্রুপ শেয়ার করা মেমরি
  • ডাইরেক্টকম্পিউট: গোষ্ঠীভুক্ত মেমরি
  • ওপেনসিএল: স্থানীয় স্মৃতি
  • ধাতু: থ্রেডগ্রুপ মেমরি
  • ওপেনজিএল: ভাগ করা মেমরি

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

নোট করুন যে আমি অনুমান করছি যে এটি কেবল পঠনযোগ্য সারণী। একটি পঠন-লেখার সারণী হ'ল সম্পূর্ণ ভিন্ন প্রাণী এবং আপনার কোনও ভাল বিকল্প নেই।


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

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