AGI ফ্রেম প্রোফাইলার আপনাকে আমাদের রেন্ডার পাসগুলির একটি থেকে একটি ড্র কল নির্বাচন করে এবং পাইপলাইন ফলকের ভার্টেক্স শেডার বিভাগ বা ফ্র্যাগমেন্ট শেডার বিভাগের মাধ্যমে আপনার শেডারগুলি তদন্ত করতে দেয়৷
এখানে আপনি শেডার কোডের স্ট্যাটিক বিশ্লেষণ, সেইসাথে স্ট্যান্ডার্ড পোর্টেবল ইন্টারমিডিয়েট রিপ্রেজেন্টেশন (SPIR-V) সমাবেশ থেকে আসা দরকারী পরিসংখ্যানগুলি পাবেন যা আমাদের GLSL-কে সংকলিত করা হয়েছে। SPIR-V-এর জন্য অতিরিক্ত প্রসঙ্গ প্রদানের জন্য SPIR-V Cross-এর সাথে ডিকম্পাইল করা আসল GLSL (ভেরিয়েবল, ফাংশন এবং আরও অনেক কিছুর জন্য কম্পাইলার জেনারেটেড নাম সহ) উপস্থাপনা দেখার জন্য একটি ট্যাবও রয়েছে।
স্ট্যাটিক বিশ্লেষণ
শেডারে নিম্ন-স্তরের অপারেশন দেখতে স্ট্যাটিক বিশ্লেষণ কাউন্টার ব্যবহার করুন।
ALU নির্দেশাবলী : এই গণনাটি শেডারের মধ্যে কতগুলি ALU অপারেশন (যোগ, গুণ, ভাগ এবং আরও অনেক কিছু) সম্পাদিত হচ্ছে তা দেখায় এবং শেডারটি কতটা জটিল তার জন্য এটি একটি ভাল প্রক্সি। এই মান কমানোর চেষ্টা করুন.
সাধারণ গণনার রিফ্যাক্টরিং বা শেডারে করা কম্পিউটেশনগুলিকে সরলীকরণ করা প্রয়োজনীয় নির্দেশাবলীর সংখ্যা কমাতে সাহায্য করতে পারে।
টেক্সচার নির্দেশাবলী : এই গণনাটি দেখায় যে কতবার শেডারে টেক্সচার স্যাম্পলিং ঘটে।
- টেক্সচারের নমুনা তৈরির ধরণের উপর নির্ভর করে টেক্সচারের নমুনা ব্যয়বহুল হতে পারে, তাই বর্ণনাকারী সেট বিভাগে পাওয়া আবদ্ধ টেক্সচারের সাথে শেডার কোডের ক্রস-রেফারেন্স ব্যবহার করা টেক্সচারের ধরন সম্পর্কে আরও তথ্য প্রদান করতে পারে।
- টেক্সচারের নমুনা নেওয়ার সময় এলোমেলো অ্যাক্সেস এড়িয়ে চলুন, কারণ এই আচরণ টেক্সচার-ক্যাশিংয়ের জন্য আদর্শ নয়।
শাখা নির্দেশাবলী : এই গণনা শেডারে শাখা অপারেশনের সংখ্যা দেখায়। জিপিইউ-এর মতো সমান্তরাল প্রসেসরের জন্য ব্রাঞ্চিং মিনিমাইজ করা আদর্শ, এবং এমনকি কম্পাইলারকে অতিরিক্ত অপ্টিমাইজেশন খুঁজে পেতে সাহায্য করতে পারে:
- সাংখ্যিক মানের উপর শাখা করার প্রয়োজন এড়াতে
min
,max
এবংclamp
এর মত ফাংশন ব্যবহার করুন। - শাখার উপর গণনার খরচ পরীক্ষা করুন। যেহেতু একটি শাখার উভয় পথই অনেক আর্কিটেকচারে সঞ্চালিত হয়, তাই এমন অনেক পরিস্থিতি রয়েছে যেখানে সর্বদা গণনা করা একটি শাখার সাথে গণনা এড়িয়ে যাওয়ার চেয়ে দ্রুততর।
- সাংখ্যিক মানের উপর শাখা করার প্রয়োজন এড়াতে
অস্থায়ী রেজিস্টার : এগুলি দ্রুত, অন-কোর রেজিস্টার যা GPU-তে গণনার জন্য প্রয়োজনীয় মধ্যবর্তী ক্রিয়াকলাপের ফলাফল ধরে রাখতে ব্যবহৃত হয়। GPU-কে মধ্যবর্তী মান সঞ্চয় করার জন্য অন্যান্য অফ-কোর মেমরি ব্যবহার করে সামগ্রিক কর্মক্ষমতা হ্রাস করার আগে গণনার জন্য উপলব্ধ রেজিস্টারের সংখ্যার একটি সীমা রয়েছে। (এই সীমা GPU মডেলের উপর নির্ভর করে পরিবর্তিত হয়।)
ব্যবহার করা অস্থায়ী রেজিস্টারের সংখ্যা প্রত্যাশার চেয়ে বেশি হতে পারে যদি শেডার কম্পাইলার আনরোলিং লুপগুলির মতো ক্রিয়াকলাপ সম্পাদন করে, তাই কোডটি কী করছে তা দেখতে SPIR-V বা ডিকম্পাইলড GLSL-এর সাথে এই মানটিকে ক্রস-রেফারেন্স করা ভাল।
শেডার কোড বিশ্লেষণ
কোন সম্ভাব্য উন্নতি সম্ভব কিনা তা নির্ধারণ করতে decompiled shader কোড নিজেই তদন্ত করুন।
- যথার্থতা : শেডার ভেরিয়েবলের নির্ভুলতা আপনার অ্যাপ্লিকেশনের GPU কর্মক্ষমতা প্রভাবিত করতে পারে।
- যেখানেই সম্ভব ভেরিয়েবলগুলিতে
mediump
প্রিসিশন মডিফায়ার ব্যবহার করার চেষ্টা করুন, যেহেতু মিডিয়াম প্রিসিশন (mediump
) 16-বিট ভেরিয়েবলগুলি সাধারণত সম্পূর্ণ নির্ভুলতা (highp
) 32-বিট ভেরিয়েবলের চেয়ে দ্রুত এবং আরও বেশি শক্তি দক্ষ হয়। - আপনি যদি পরিবর্তনশীল ঘোষণায় শেডারে কোনো নির্ভুল যোগ্যতা দেখতে না পান, অথবা শেডারের শীর্ষে একটি
precision precision-qualifier type
সহ, এটি সম্পূর্ণ নির্ভুলতা (highp
) তে ডিফল্ট হয়। পরিবর্তনশীল ঘোষণাগুলিও দেখতে ভুলবেন না। - উপরে বর্ণিত একই কারণে ভার্টেক্স শেডার আউটপুটের জন্য
mediump
ব্যবহার করাও পছন্দনীয়, এবং এছাড়াও মেমরি ব্যান্ডউইথ হ্রাস করার সুবিধা এবং ইন্টারপোলেশন করার জন্য প্রয়োজনীয় অস্থায়ী রেজিস্টার ব্যবহারের সুবিধা রয়েছে।
- যেখানেই সম্ভব ভেরিয়েবলগুলিতে
- ইউনিফর্ম বাফার : ইউনিফর্ম বাফারের আকার যতটা সম্ভব ছোট রাখার চেষ্টা করুন (সারিবদ্ধকরণের নিয়ম বজায় রেখে)। এটি ক্যাশিংয়ের সাথে গণনাকে আরও সামঞ্জস্যপূর্ণ করতে সহায়তা করে এবং অভিন্ন ডেটাকে দ্রুত অন-কোর রেজিস্টারে উন্নীত করার সম্ভাব্য অনুমতি দেয়।
অব্যবহৃত ভার্টেক্স শেডার আউটপুটগুলি সরান : যদি আপনি দেখতে পান যে ভার্টেক্স শেডার আউটপুটগুলি ফ্র্যাগমেন্ট শেডারে অব্যবহৃত হচ্ছে, মেমরি ব্যান্ডউইথ এবং অস্থায়ী রেজিস্টারগুলি খালি করতে সেগুলিকে শেডার থেকে সরিয়ে দিন।
ফ্র্যাগমেন্ট শেডার থেকে ভার্টেক্স শেডারে কম্পিউটেশন সরান : যদি ফ্র্যাগমেন্ট শেডার কোড এমন গণনা করে যেগুলি স্পেসিফিক স্টেট থেকে স্বতন্ত্র ফ্র্যাগমেন্ট শেড করা হয়েছে (বা সঠিকভাবে ইন্টারপোলেট করা যেতে পারে), তাহলে ভার্টেক্স শেডারে সরানো আদর্শ। এর কারণ হল বেশিরভাগ অ্যাপে, ভার্টেক্স শেডারটি ফ্র্যাগমেন্ট শেডারের তুলনায় অনেক কম ঘন ঘন চালানো হয়।
AGI ফ্রেম প্রোফাইলার আপনাকে আমাদের রেন্ডার পাসগুলির একটি থেকে একটি ড্র কল নির্বাচন করে এবং পাইপলাইন ফলকের ভার্টেক্স শেডার বিভাগ বা ফ্র্যাগমেন্ট শেডার বিভাগের মাধ্যমে আপনার শেডারগুলি তদন্ত করতে দেয়৷
এখানে আপনি শেডার কোডের স্ট্যাটিক বিশ্লেষণ, সেইসাথে স্ট্যান্ডার্ড পোর্টেবল ইন্টারমিডিয়েট রিপ্রেজেন্টেশন (SPIR-V) সমাবেশ থেকে আসা দরকারী পরিসংখ্যানগুলি পাবেন যা আমাদের GLSL-কে সংকলিত করা হয়েছে। SPIR-V-এর জন্য অতিরিক্ত প্রসঙ্গ প্রদানের জন্য SPIR-V Cross-এর সাথে ডিকম্পাইল করা আসল GLSL (ভেরিয়েবল, ফাংশন এবং আরও অনেক কিছুর জন্য কম্পাইলার জেনারেটেড নাম সহ) উপস্থাপনা দেখার জন্য একটি ট্যাবও রয়েছে।
স্ট্যাটিক বিশ্লেষণ
শেডারে নিম্ন-স্তরের অপারেশন দেখতে স্ট্যাটিক বিশ্লেষণ কাউন্টার ব্যবহার করুন।
ALU নির্দেশাবলী : এই গণনাটি শেডারের মধ্যে কতগুলি ALU অপারেশন (যোগ, গুণ, ভাগ এবং আরও অনেক কিছু) সম্পাদিত হচ্ছে তা দেখায় এবং শেডারটি কতটা জটিল তার জন্য এটি একটি ভাল প্রক্সি। এই মান কমানোর চেষ্টা করুন.
সাধারণ গণনার রিফ্যাক্টরিং বা শেডারে করা কম্পিউটেশনগুলিকে সরলীকরণ করা প্রয়োজনীয় নির্দেশাবলীর সংখ্যা কমাতে সাহায্য করতে পারে।
টেক্সচার নির্দেশাবলী : এই গণনাটি দেখায় যে কতবার শেডারে টেক্সচার স্যাম্পলিং ঘটে।
- টেক্সচারের নমুনা তৈরির ধরণের উপর নির্ভর করে টেক্সচারের নমুনা ব্যয়বহুল হতে পারে, তাই বর্ণনাকারী সেট বিভাগে পাওয়া আবদ্ধ টেক্সচারের সাথে শেডার কোডের ক্রস-রেফারেন্স ব্যবহার করা টেক্সচারের ধরন সম্পর্কে আরও তথ্য প্রদান করতে পারে।
- টেক্সচারের নমুনা নেওয়ার সময় এলোমেলো অ্যাক্সেস এড়িয়ে চলুন, কারণ এই আচরণ টেক্সচার-ক্যাশিংয়ের জন্য আদর্শ নয়।
শাখা নির্দেশাবলী : এই গণনা শেডারে শাখা অপারেশনের সংখ্যা দেখায়। জিপিইউ-এর মতো সমান্তরাল প্রসেসরের জন্য ব্রাঞ্চিং মিনিমাইজ করা আদর্শ, এবং এমনকি কম্পাইলারকে অতিরিক্ত অপ্টিমাইজেশন খুঁজে পেতে সাহায্য করতে পারে:
- সাংখ্যিক মানের উপর শাখা করার প্রয়োজন এড়াতে
min
,max
এবংclamp
এর মত ফাংশন ব্যবহার করুন। - শাখার উপর গণনার খরচ পরীক্ষা করুন। যেহেতু একটি শাখার উভয় পথই অনেক আর্কিটেকচারে সঞ্চালিত হয়, তাই এমন অনেক পরিস্থিতি রয়েছে যেখানে সর্বদা গণনা করা একটি শাখার সাথে গণনা এড়িয়ে যাওয়ার চেয়ে দ্রুততর।
- সাংখ্যিক মানের উপর শাখা করার প্রয়োজন এড়াতে
অস্থায়ী রেজিস্টার : এগুলি দ্রুত, অন-কোর রেজিস্টার যা GPU-তে গণনার জন্য প্রয়োজনীয় মধ্যবর্তী ক্রিয়াকলাপের ফলাফল ধরে রাখতে ব্যবহৃত হয়। GPU-কে মধ্যবর্তী মান সঞ্চয় করার জন্য অন্যান্য অফ-কোর মেমরি ব্যবহার করে সামগ্রিক কর্মক্ষমতা হ্রাস করার আগে গণনার জন্য উপলব্ধ রেজিস্টারের সংখ্যার একটি সীমা রয়েছে। (এই সীমা GPU মডেলের উপর নির্ভর করে পরিবর্তিত হয়।)
ব্যবহার করা অস্থায়ী রেজিস্টারের সংখ্যা প্রত্যাশার চেয়ে বেশি হতে পারে যদি শেডার কম্পাইলার আনরোলিং লুপগুলির মতো ক্রিয়াকলাপ সম্পাদন করে, তাই কোডটি কী করছে তা দেখতে SPIR-V বা ডিকম্পাইলড GLSL-এর সাথে এই মানটিকে ক্রস-রেফারেন্স করা ভাল।
শেডার কোড বিশ্লেষণ
কোন সম্ভাব্য উন্নতি সম্ভব কিনা তা নির্ধারণ করতে decompiled shader কোড নিজেই তদন্ত করুন।
- যথার্থতা : শেডার ভেরিয়েবলের নির্ভুলতা আপনার অ্যাপ্লিকেশনের GPU কর্মক্ষমতা প্রভাবিত করতে পারে।
- যেখানেই সম্ভব ভেরিয়েবলগুলিতে
mediump
প্রিসিশন মডিফায়ার ব্যবহার করার চেষ্টা করুন, যেহেতু মিডিয়াম প্রিসিশন (mediump
) 16-বিট ভেরিয়েবলগুলি সাধারণত সম্পূর্ণ নির্ভুলতা (highp
) 32-বিট ভেরিয়েবলের চেয়ে দ্রুত এবং আরও বেশি শক্তি দক্ষ হয়। - আপনি যদি পরিবর্তনশীল ঘোষণায় শেডারে কোনো নির্ভুল যোগ্যতা দেখতে না পান, অথবা শেডারের শীর্ষে একটি
precision precision-qualifier type
সহ, এটি সম্পূর্ণ নির্ভুলতা (highp
) তে ডিফল্ট হয়। পরিবর্তনশীল ঘোষণাগুলিও দেখতে ভুলবেন না। - উপরে বর্ণিত একই কারণে ভার্টেক্স শেডার আউটপুটের জন্য
mediump
ব্যবহার করাও পছন্দনীয়, এবং এছাড়াও মেমরি ব্যান্ডউইথ হ্রাস করার সুবিধা এবং ইন্টারপোলেশন করার জন্য প্রয়োজনীয় অস্থায়ী রেজিস্টার ব্যবহারের সুবিধা রয়েছে।
- যেখানেই সম্ভব ভেরিয়েবলগুলিতে
- ইউনিফর্ম বাফার : ইউনিফর্ম বাফারের আকার যতটা সম্ভব ছোট রাখার চেষ্টা করুন (সারিবদ্ধকরণের নিয়ম বজায় রেখে)। এটি ক্যাশিংয়ের সাথে গণনাকে আরও সামঞ্জস্যপূর্ণ করতে সহায়তা করে এবং অভিন্ন ডেটাকে দ্রুত অন-কোর রেজিস্টারে উন্নীত করার সম্ভাব্য অনুমতি দেয়।
অব্যবহৃত ভার্টেক্স শেডার আউটপুটগুলি সরান : যদি আপনি দেখতে পান যে ভার্টেক্স শেডার আউটপুটগুলি ফ্র্যাগমেন্ট শেডারে অব্যবহৃত হচ্ছে, মেমরি ব্যান্ডউইথ এবং অস্থায়ী রেজিস্টারগুলি খালি করতে সেগুলিকে শেডার থেকে সরিয়ে দিন।
ফ্র্যাগমেন্ট শেডার থেকে ভার্টেক্স শেডারে কম্পিউটেশন সরান : যদি ফ্র্যাগমেন্ট শেডার কোড এমন গণনা করে যেগুলি স্পেসিফিক স্টেট থেকে স্বতন্ত্র ফ্র্যাগমেন্ট শেড করা হয়েছে (বা সঠিকভাবে ইন্টারপোলেট করা যেতে পারে), তাহলে ভার্টেক্স শেডারে সরানো আদর্শ। এর কারণ হল বেশিরভাগ অ্যাপে, ভার্টেক্স শেডারটি ফ্র্যাগমেন্ট শেডারের তুলনায় অনেক কম ঘন ঘন চালানো হয়।
AGI ফ্রেম প্রোফাইলার আপনাকে আমাদের রেন্ডার পাসগুলির একটি থেকে একটি ড্র কল নির্বাচন করে এবং পাইপলাইন ফলকের ভার্টেক্স শেডার বিভাগ বা ফ্র্যাগমেন্ট শেডার বিভাগের মাধ্যমে আপনার শেডারগুলি তদন্ত করতে দেয়৷
এখানে আপনি শেডার কোডের স্ট্যাটিক বিশ্লেষণ, সেইসাথে স্ট্যান্ডার্ড পোর্টেবল ইন্টারমিডিয়েট রিপ্রেজেন্টেশন (SPIR-V) সমাবেশ থেকে আসা দরকারী পরিসংখ্যানগুলি পাবেন যা আমাদের GLSL-কে সংকলিত করা হয়েছে। SPIR-V-এর জন্য অতিরিক্ত প্রসঙ্গ প্রদানের জন্য SPIR-V Cross-এর সাথে ডিকম্পাইল করা আসল GLSL (ভেরিয়েবল, ফাংশন এবং আরও অনেক কিছুর জন্য কম্পাইলার জেনারেটেড নাম সহ) উপস্থাপনা দেখার জন্য একটি ট্যাবও রয়েছে।
স্ট্যাটিক বিশ্লেষণ
শেডারে নিম্ন-স্তরের অপারেশন দেখতে স্ট্যাটিক বিশ্লেষণ কাউন্টার ব্যবহার করুন।
ALU নির্দেশাবলী : এই গণনাটি শেডারের মধ্যে কতগুলি ALU অপারেশন (যোগ, গুণ, ভাগ এবং আরও অনেক কিছু) সম্পাদিত হচ্ছে তা দেখায় এবং শেডারটি কতটা জটিল তার জন্য এটি একটি ভাল প্রক্সি। এই মান কমানোর চেষ্টা করুন.
সাধারণ গণনার রিফ্যাক্টরিং বা শেডারে করা কম্পিউটেশনগুলিকে সরলীকরণ করা প্রয়োজনীয় নির্দেশাবলীর সংখ্যা কমাতে সাহায্য করতে পারে।
টেক্সচার নির্দেশাবলী : এই গণনাটি দেখায় যে কতবার শেডারে টেক্সচার স্যাম্পলিং ঘটে।
- টেক্সচারের নমুনা তৈরির ধরণের উপর নির্ভর করে টেক্সচারের নমুনা ব্যয়বহুল হতে পারে, তাই বর্ণনাকারী সেট বিভাগে পাওয়া আবদ্ধ টেক্সচারের সাথে শেডার কোডের ক্রস-রেফারেন্স ব্যবহার করা টেক্সচারের ধরন সম্পর্কে আরও তথ্য প্রদান করতে পারে।
- টেক্সচারের নমুনা নেওয়ার সময় এলোমেলো অ্যাক্সেস এড়িয়ে চলুন, কারণ এই আচরণ টেক্সচার-ক্যাশিংয়ের জন্য আদর্শ নয়।
শাখা নির্দেশাবলী : এই গণনা শেডারে শাখা অপারেশনের সংখ্যা দেখায়। জিপিইউ-এর মতো সমান্তরাল প্রসেসরের জন্য ব্রাঞ্চিং মিনিমাইজ করা আদর্শ, এবং এমনকি কম্পাইলারকে অতিরিক্ত অপ্টিমাইজেশন খুঁজে পেতে সাহায্য করতে পারে:
- সাংখ্যিক মানের উপর শাখা করার প্রয়োজন এড়াতে
min
,max
এবংclamp
এর মত ফাংশন ব্যবহার করুন। - শাখার উপর গণনার খরচ পরীক্ষা করুন। যেহেতু একটি শাখার উভয় পথই অনেক আর্কিটেকচারে সঞ্চালিত হয়, তাই এমন অনেক পরিস্থিতি রয়েছে যেখানে সর্বদা গণনা করা একটি শাখার সাথে গণনা এড়িয়ে যাওয়ার চেয়ে দ্রুততর।
- সাংখ্যিক মানের উপর শাখা করার প্রয়োজন এড়াতে
অস্থায়ী রেজিস্টার : এগুলি দ্রুত, অন-কোর রেজিস্টার যা GPU-তে গণনার জন্য প্রয়োজনীয় মধ্যবর্তী ক্রিয়াকলাপের ফলাফল ধরে রাখতে ব্যবহৃত হয়। GPU-কে মধ্যবর্তী মান সঞ্চয় করার জন্য অন্যান্য অফ-কোর মেমরি ব্যবহার করে সামগ্রিক কর্মক্ষমতা হ্রাস করার আগে গণনার জন্য উপলব্ধ রেজিস্টারের সংখ্যার একটি সীমা রয়েছে। (এই সীমা GPU মডেলের উপর নির্ভর করে পরিবর্তিত হয়।)
ব্যবহার করা অস্থায়ী রেজিস্টারের সংখ্যা প্রত্যাশার চেয়ে বেশি হতে পারে যদি শেডার কম্পাইলার আনরোলিং লুপগুলির মতো ক্রিয়াকলাপ সম্পাদন করে, তাই কোডটি কী করছে তা দেখতে SPIR-V বা ডিকম্পাইলড GLSL-এর সাথে এই মানটিকে ক্রস-রেফারেন্স করা ভাল।
শেডার কোড বিশ্লেষণ
কোন সম্ভাব্য উন্নতি সম্ভব কিনা তা নির্ধারণ করতে decompiled shader কোড নিজেই তদন্ত করুন।
- যথার্থতা : শেডার ভেরিয়েবলের নির্ভুলতা আপনার অ্যাপ্লিকেশনের GPU কর্মক্ষমতা প্রভাবিত করতে পারে।
- যেখানেই সম্ভব ভেরিয়েবলগুলিতে
mediump
প্রিসিশন মডিফায়ার ব্যবহার করার চেষ্টা করুন, যেহেতু মিডিয়াম প্রিসিশন (mediump
) 16-বিট ভেরিয়েবলগুলি সাধারণত সম্পূর্ণ নির্ভুলতা (highp
) 32-বিট ভেরিয়েবলের চেয়ে দ্রুত এবং আরও বেশি শক্তি দক্ষ হয়। - আপনি যদি পরিবর্তনশীল ঘোষণায় শেডারে কোনো নির্ভুল যোগ্যতা দেখতে না পান, অথবা শেডারের শীর্ষে একটি
precision precision-qualifier type
সহ, এটি সম্পূর্ণ নির্ভুলতা (highp
) তে ডিফল্ট হয়। পরিবর্তনশীল ঘোষণাগুলিও দেখতে ভুলবেন না। - উপরে বর্ণিত একই কারণে ভার্টেক্স শেডার আউটপুটের জন্য
mediump
ব্যবহার করাও পছন্দনীয়, এবং এছাড়াও মেমরি ব্যান্ডউইথ হ্রাস করার সুবিধা এবং ইন্টারপোলেশন করার জন্য প্রয়োজনীয় অস্থায়ী রেজিস্টার ব্যবহারের সুবিধা রয়েছে।
- যেখানেই সম্ভব ভেরিয়েবলগুলিতে
- ইউনিফর্ম বাফার : ইউনিফর্ম বাফারের আকার যতটা সম্ভব ছোট রাখার চেষ্টা করুন (সারিবদ্ধকরণের নিয়ম বজায় রেখে)। এটি ক্যাশিংয়ের সাথে গণনাকে আরও সামঞ্জস্যপূর্ণ করতে সহায়তা করে এবং অভিন্ন ডেটাকে দ্রুত অন-কোর রেজিস্টারে উন্নীত করার সম্ভাব্য অনুমতি দেয়।
অব্যবহৃত ভার্টেক্স শেডার আউটপুটগুলি সরান : যদি আপনি দেখতে পান যে ভার্টেক্স শেডার আউটপুটগুলি ফ্র্যাগমেন্ট শেডারে অব্যবহৃত হচ্ছে, মেমরি ব্যান্ডউইথ এবং অস্থায়ী রেজিস্টারগুলি খালি করতে সেগুলিকে শেডার থেকে সরিয়ে দিন।
ফ্র্যাগমেন্ট শেডার থেকে ভার্টেক্স শেডারে কম্পিউটেশন সরান : যদি ফ্র্যাগমেন্ট শেডার কোড এমন গণনা করে যেগুলি স্পেসিফিক স্টেট থেকে স্বতন্ত্র ফ্র্যাগমেন্ট শেড করা হয়েছে (বা সঠিকভাবে ইন্টারপোলেট করা যেতে পারে), তাহলে ভার্টেক্স শেডারে সরানো আদর্শ। এর কারণ হল বেশিরভাগ অ্যাপে, ভার্টেক্স শেডারটি ফ্র্যাগমেন্ট শেডারের তুলনায় অনেক কম ঘন ঘন চালানো হয়।
AGI ফ্রেম প্রোফাইলার আপনাকে আমাদের রেন্ডার পাসগুলির একটি থেকে একটি ড্র কল নির্বাচন করে এবং পাইপলাইন ফলকের ভার্টেক্স শেডার বিভাগ বা ফ্র্যাগমেন্ট শেডার বিভাগের মাধ্যমে আপনার শেডারগুলি তদন্ত করতে দেয়৷
এখানে আপনি শেডার কোডের স্ট্যাটিক বিশ্লেষণ, সেইসাথে স্ট্যান্ডার্ড পোর্টেবল ইন্টারমিডিয়েট রিপ্রেজেন্টেশন (SPIR-V) সমাবেশ থেকে আসা দরকারী পরিসংখ্যানগুলি পাবেন যা আমাদের GLSL-কে সংকলিত করা হয়েছে। SPIR-V-এর জন্য অতিরিক্ত প্রসঙ্গ প্রদানের জন্য SPIR-V Cross-এর সাথে ডিকম্পাইল করা আসল GLSL (ভেরিয়েবল, ফাংশন এবং আরও অনেক কিছুর জন্য কম্পাইলার জেনারেটেড নাম সহ) উপস্থাপনা দেখার জন্য একটি ট্যাবও রয়েছে।
স্ট্যাটিক বিশ্লেষণ
শেডারে নিম্ন-স্তরের অপারেশন দেখতে স্ট্যাটিক বিশ্লেষণ কাউন্টার ব্যবহার করুন।
ALU নির্দেশাবলী : এই গণনাটি শেডারের মধ্যে কতগুলি ALU অপারেশন (যোগ, গুণ, ভাগ এবং আরও অনেক কিছু) সম্পাদিত হচ্ছে তা দেখায় এবং শেডারটি কতটা জটিল তার জন্য এটি একটি ভাল প্রক্সি। এই মান কমানোর চেষ্টা করুন.
সাধারণ গণনার রিফ্যাক্টরিং বা শেডারে করা কম্পিউটেশনগুলিকে সরলীকরণ করা প্রয়োজনীয় নির্দেশাবলীর সংখ্যা কমাতে সাহায্য করতে পারে।
টেক্সচার নির্দেশাবলী : এই গণনাটি দেখায় যে কতবার শেডারে টেক্সচার স্যাম্পলিং ঘটে।
- টেক্সচারের নমুনা তৈরির ধরণের উপর নির্ভর করে টেক্সচারের নমুনা ব্যয়বহুল হতে পারে, তাই বর্ণনাকারী সেট বিভাগে পাওয়া আবদ্ধ টেক্সচারের সাথে শেডার কোডের ক্রস-রেফারেন্স ব্যবহার করা টেক্সচারের ধরন সম্পর্কে আরও তথ্য প্রদান করতে পারে।
- টেক্সচারের নমুনা নেওয়ার সময় এলোমেলো অ্যাক্সেস এড়িয়ে চলুন, কারণ এই আচরণ টেক্সচার-ক্যাশিংয়ের জন্য আদর্শ নয়।
শাখা নির্দেশাবলী : এই গণনা শেডারে শাখা অপারেশনের সংখ্যা দেখায়। জিপিইউ-এর মতো সমান্তরাল প্রসেসরের জন্য ব্রাঞ্চিং মিনিমাইজ করা আদর্শ, এবং এমনকি কম্পাইলারকে অতিরিক্ত অপ্টিমাইজেশন খুঁজে পেতে সাহায্য করতে পারে:
- সাংখ্যিক মানের উপর শাখা করার প্রয়োজন এড়াতে
min
,max
এবংclamp
এর মত ফাংশন ব্যবহার করুন। - শাখার উপর গণনার খরচ পরীক্ষা করুন। যেহেতু একটি শাখার উভয় পথই অনেক আর্কিটেকচারে সঞ্চালিত হয়, তাই এমন অনেক পরিস্থিতি রয়েছে যেখানে সর্বদা গণনা করা একটি শাখার সাথে গণনা এড়িয়ে যাওয়ার চেয়ে দ্রুততর।
- সাংখ্যিক মানের উপর শাখা করার প্রয়োজন এড়াতে
অস্থায়ী রেজিস্টার : এগুলি দ্রুত, অন-কোর রেজিস্টার যা GPU-তে গণনার জন্য প্রয়োজনীয় মধ্যবর্তী ক্রিয়াকলাপের ফলাফল ধরে রাখতে ব্যবহৃত হয়। GPU-কে মধ্যবর্তী মান সঞ্চয় করার জন্য অন্যান্য অফ-কোর মেমরি ব্যবহার করে সামগ্রিক কর্মক্ষমতা হ্রাস করার আগে গণনার জন্য উপলব্ধ রেজিস্টারের সংখ্যার একটি সীমা রয়েছে। (এই সীমা GPU মডেলের উপর নির্ভর করে পরিবর্তিত হয়।)
ব্যবহার করা অস্থায়ী রেজিস্টারের সংখ্যা প্রত্যাশার চেয়ে বেশি হতে পারে যদি শেডার কম্পাইলার আনরোলিং লুপগুলির মতো ক্রিয়াকলাপ সম্পাদন করে, তাই কোডটি কী করছে তা দেখতে SPIR-V বা ডিকম্পাইলড GLSL-এর সাথে এই মানটিকে ক্রস-রেফারেন্স করা ভাল।
শেডার কোড বিশ্লেষণ
কোন সম্ভাব্য উন্নতি সম্ভব কিনা তা নির্ধারণ করতে decompiled shader কোড নিজেই তদন্ত করুন।
- যথার্থতা : শেডার ভেরিয়েবলের নির্ভুলতা আপনার অ্যাপ্লিকেশনের GPU কর্মক্ষমতা প্রভাবিত করতে পারে।
- যেখানেই সম্ভব ভেরিয়েবলগুলিতে
mediump
প্রিসিশন মডিফায়ার ব্যবহার করার চেষ্টা করুন, যেহেতু মিডিয়াম প্রিসিশন (mediump
) 16-বিট ভেরিয়েবলগুলি সাধারণত সম্পূর্ণ নির্ভুলতা (highp
) 32-বিট ভেরিয়েবলের চেয়ে দ্রুত এবং আরও বেশি শক্তি দক্ষ হয়। - আপনি যদি পরিবর্তনশীল ঘোষণায় শেডারে কোনো নির্ভুল যোগ্যতা দেখতে না পান, অথবা শেডারের শীর্ষে একটি
precision precision-qualifier type
সহ, এটি সম্পূর্ণ নির্ভুলতা (highp
) তে ডিফল্ট হয়। পরিবর্তনশীল ঘোষণাগুলিও দেখতে ভুলবেন না। - উপরে বর্ণিত একই কারণে ভার্টেক্স শেডার আউটপুটের জন্য
mediump
ব্যবহার করাও পছন্দনীয়, এবং এছাড়াও মেমরি ব্যান্ডউইথ হ্রাস করার সুবিধা এবং ইন্টারপোলেশন করার জন্য প্রয়োজনীয় অস্থায়ী রেজিস্টার ব্যবহারের সুবিধা রয়েছে।
- যেখানেই সম্ভব ভেরিয়েবলগুলিতে
- ইউনিফর্ম বাফার : ইউনিফর্ম বাফারের আকার যতটা সম্ভব ছোট রাখার চেষ্টা করুন (সারিবদ্ধকরণের নিয়ম বজায় রেখে)। এটি ক্যাশিংয়ের সাথে গণনাকে আরও সামঞ্জস্যপূর্ণ করতে সহায়তা করে এবং অভিন্ন ডেটাকে দ্রুত অন-কোর রেজিস্টারে উন্নীত করার সম্ভাব্য অনুমতি দেয়।
অব্যবহৃত ভার্টেক্স শেডার আউটপুটগুলি সরান : যদি আপনি দেখতে পান যে ভার্টেক্স শেডার আউটপুটগুলি ফ্র্যাগমেন্ট শেডারে অব্যবহৃত হচ্ছে, মেমরি ব্যান্ডউইথ এবং অস্থায়ী রেজিস্টারগুলি খালি করতে সেগুলিকে শেডার থেকে সরিয়ে দিন।
ফ্র্যাগমেন্ট শেডার থেকে ভার্টেক্স শেডারে কম্পিউটেশন সরান : যদি ফ্র্যাগমেন্ট শেডার কোড এমন গণনা করে যেগুলি স্পেসিফিক স্টেট থেকে স্বতন্ত্র ফ্র্যাগমেন্ট শেড করা হয়েছে (বা সঠিকভাবে ইন্টারপোলেট করা যেতে পারে), তাহলে ভার্টেক্স শেডারে সরানো আদর্শ। এর কারণ হল বেশিরভাগ অ্যাপে, ভার্টেক্স শেডারটি ফ্র্যাগমেন্ট শেডারের তুলনায় অনেক কম ঘন ঘন চালানো হয়।