CPU এবং GPU ফ্রেম প্রক্রিয়াকরণের সময় অনুমান করুন, CPU এবং GPU ফ্রেম প্রক্রিয়াকরণের সময় অনুমান করুন, CPU এবং GPU ফ্রেম প্রক্রিয়াকরণের সময় অনুমান করুন, CPU এবং GPU ফ্রেম প্রক্রিয়াকরণের সময় অনুমান করুন

আপনার অ্যাপের পারফরম্যান্স বোঝা এবং বাধাগুলো চিহ্নিত করার জন্য সিপিইউ ও জিপিইউ-এর ফ্রেম প্রসেসিং টাইম (ফ্রেম টাইম) অনুমান করা অপরিহার্য। যখন আপনি এজিআই (AGI) ব্যবহার করে কোনো অ্যাপ প্রোফাইল করেন, তখন সিস্টেম প্রোফাইলার ট্রেস ডেটা সরবরাহ করে যা আপনি ফ্রেম টাইম অনুমান করতে ব্যবহার করতে পারেন।

সিপিইউ সময়

AGI-তে, আপনি একটি সিস্টেম প্রোফাইলের CPU ট্র্যাকে মোট এবং সক্রিয় CPU ফ্রেম টাইম দেখতে পারেন।

মোট সিপিইউ সময়

মোট ব্যয়িত সিপিইউ সময় পরিমাপ করতে, পরপর ফ্রেম সাবমিশন ইভেন্টগুলোর মধ্যবর্তী সময়সহ সময়সীমাটি নির্বাচন করুন । ফ্রেম সাবমিশন ইভেন্টগুলো হলো eglSwapBuffers (OpenGL-এর জন্য) এবং vkQueuePresentKHR (Vulkan-এর জন্য)।

eglSwapBuffer ইভেন্টগুলোর একটি স্ক্রিনশট।
চিত্র ১. দুটি eglSwapBuffer ইভেন্টের মধ্যবর্তী সময়।


একটি vkQueuePresentKHR ইভেন্টের স্ক্রিনশট।
চিত্র ২. দুটি vkQueuePresentKHR ইভেন্টের মধ্যবর্তী সময়।

এই পরিমাপটি মোট সিপিইউ সময়ের একটি আনুমানিক হিসাব, ​​কিন্তু এটি সক্রিয় সিপিইউ সময়কে আবশ্যকভাবে প্রতিনিধিত্ব করে না। উদাহরণস্বরূপ, জিপিইউ-নির্ভর অ্যাপগুলিতে, একটি নতুন ফ্রেম জমা দেওয়ার আগে সিপিইউ জিপিইউ-এর কাজ শেষ হওয়ার জন্য অপেক্ষা করতে পারে। এটি প্রায়শই ঘটে যখন একটি dequeueBuffer , eglSwapBuffer (OpenGL-এর জন্য), বা vkQueuePresent (Vulkan-এর জন্য) ইভেন্ট সিপিইউ সময়ের একটি বড় অংশ দখল করে নেয়। অপেক্ষার সময়টি মোট সিপিইউ সময়ের মধ্যে অন্তর্ভুক্ত থাকে, কিন্তু সক্রিয় সিপিইউ সময়ের মধ্যে নয়।

একটি স্ক্রিনশট যা dequeueBuffer এবং eglSwapBuffer ইভেন্ট চলাকালীন দীর্ঘ সময় ধরে নিষ্ক্রিয়তা প্রদর্শন করে।
চিত্র ৩. dequeueBuffer এবং eglSwapBuffer ইভেন্ট চলাকালীন সিপিইউ-এর বিপুল পরিমাণ নিষ্ক্রিয়তা।

সক্রিয় সিপিইউ সময়

অ্যাক্টিভ সিপিইউ টাইম নির্ধারণ করে যে, সিপিইউ কখন নিষ্ক্রিয় অবস্থা ছাড়া অ্যাপের কোড চালাচ্ছে।

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

সিপিইউ সময়ের দুটি পর্যায়ের একটি স্ক্রিনশট যা সক্রিয় সিপিইউ সময় পরিমাপ করতে ব্যবহার করা যেতে পারে।
চিত্র ৫। সিপিইউ-এর সক্রিয় সময় পরিমাপ করতে ব্যবহারযোগ্য দুটি পর্যায়।


একটি মাল্টিথ্রেডেড অ্যাপের স্ক্রিনশট, যেখানে মূল থ্রেডটি নিষ্ক্রিয় থাকা অবস্থায় অন্যান্য থ্রেডগুলো সক্রিয় থাকে।
চিত্র ৬। একটি মাল্টিথ্রেডেড অ্যাপ যেখানে প্রধান থ্রেড নিষ্ক্রিয় থাকা অবস্থায় অন্যান্য থ্রেড সক্রিয় থাকে।

সক্রিয় সিপিইউ সময় পরিমাপ করার আরেকটি উপায় হলো সিপিইউ ট্র্যাকগুলিতে থাকা অ্যাপ স্লাইসগুলি দেখা। এই স্লাইসগুলি নির্দেশ করে কখন সিপিইউ চলছে এবং এগুলি রানিং স্লাইসগুলির সাথে সঙ্গতিপূর্ণ।

একটি স্ক্রিনশট যা সিপিইউ ট্র্যাকের সাথে মিলে যাওয়া একটি পিন করা থ্রেডের চলমান অবস্থা প্রদর্শন করে।
চিত্র ৭। পিন করা থ্রেডের চলমান অবস্থা সিপিইউ ট্র্যাকের সাথে মিলে যায়।

অ্যাপ স্লাইস শনাক্ত করতে সাহায্য করার জন্য, আপনি আপনার অ্যাপে ATrace মার্কার যোগ করতে পারেন। এটি সিস্টেম প্রোফাইলারের সিপিইউ ট্র্যাকে মার্কারগুলো প্রদর্শন করবে।

একটি সিপিইউ ট্র্যাকে প্রদর্শিত ATrace স্লাইসগুলোর একটি স্ক্রিনশট।
চিত্র ৮. একটি সিপিইউ ট্র্যাকে প্রদর্শিত ATrace স্লাইসসমূহ।

জিপিইউ ফ্রেম টাইম অনুমান করুন

জিপিইউ ফ্রেম টাইম অনুমান করার জন্য, আপনি সিস্টেম প্রোফাইলার-এ জিপিইউ স্লাইস অথবা জিপিইউ কাউন্টার ব্যবহার করতে পারেন। জিপিইউ স্লাইস ব্যবহার করলে অনুমানটি আরও নির্ভুল হয়।

জিপিইউ স্লাইস

সিস্টেম প্রোফাইলারে যদি জিপিইউ স্লাইস তথ্য উপলব্ধ থাকে, তাহলে আপনার অ্যাপ একটি একক ফ্রেমের সাথে সম্পর্কিত কাজগুলিতে মোট কত সময় ব্যয় করে তা পরিমাপ করে আপনি খুব নির্ভুল জিপিইউ ফ্রেম টাইম তথ্য পেতে পারেন।

মালি ডিভাইস

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

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

ক্রমানুসারে একাধিক ফ্রেম কার্যকর হওয়ার একটি স্ক্রিনশট।
চিত্র ৯। একাধিক ফ্রেম ক্রমানুসারে সম্পাদিত হচ্ছে।
একটি স্ক্রিনশট যেখানে AGI-কে কোনো একটি নির্দিষ্ট ফ্রেমের কাজের উপর জুম করা হয়েছে।
চিত্র ১০। একটি নির্দিষ্ট ফ্রেমের কাজের জুম করা অংশ।

যেসব অ্যাপে আরও বেশি প্যারালাইজড GPU ওয়ার্কফ্লো রয়েছে, সেগুলোর ক্ষেত্রে প্রতিটি স্লাইসের সিলেকশন প্যানে একই সাবমিশনআইডি (submissionID) আছে এমন সমস্ত ফ্রেম খুঁজে GPU ফ্রেম টাইম পাওয়া যায়।

ভলকান-ভিত্তিক অ্যাপের ক্ষেত্রে, একটি ফ্রেম তৈরি করতে একাধিক সাবমিশন ব্যবহার করা যেতে পারে। ভলকান ইভেন্টস ট্র্যাক ব্যবহার করে সাবমিশন আইডিগুলোর হিসাব রাখুন, যেখানে প্রতিটি সাবমিশনের জন্য একটি করে স্লাইস থাকে। একটি সাবমিশন স্লাইস নির্বাচন করলে সেই সাবমিশনের সাথে সম্পর্কিত সমস্ত জিপিইউ অ্যাক্টিভিটি স্লাইস হাইলাইট হবে।

একটি প্যারালালাইজড জিপিইউ ওয়ার্কলোডের স্ক্রিনশট, যেখানে একটি ফ্রেমের কাজ অন্যটির সাথে ওভারল্যাপ করতে পারে।
চিত্র ১১। একটি সমান্তরাল GPU ওয়ার্কলোড, যেখানে একটি ফ্রেমের কাজ অন্য ফ্রেমের কাজের সাথে ওভারল্যাপ করতে পারে।


একটি ফ্রেমের জন্য নির্বাচিত একাধিক ভলকান ইভেন্টের স্ক্রিনশট।
চিত্র ১২। একটি ফ্রেমের জন্য নির্বাচিত একাধিক ভলকান ইভেন্ট।

অ্যাড্রেনো ডিভাইস

Adreno ডিভাইসগুলিতে, GPU স্লাইসগুলি GPU Queue 0 ট্র্যাকে প্রদর্শিত হয় এবং সর্বদা ক্রমানুসারে সাজানো থাকে, তাই আপনি একটি ফ্রেমের রেন্ডার পাসগুলিকে প্রতিনিধিত্বকারী সমস্ত স্লাইস দেখতে পারেন এবং সেগুলি ব্যবহার করে GPU ফ্রেম টাইম পরিমাপ করতে পারেন।

ক্রমানুসারে একাধিক ফ্রেম কার্যকর হওয়ার একটি স্ক্রিনশট।
চিত্র ১৩। একাধিক ফ্রেম ক্রমানুসারে সম্পাদিত হচ্ছে।
একটি স্ক্রিনশট যেখানে একাধিক রেন্ডার পাস সহ একটি ফ্রেমে AGI জুম ইন করা হয়েছে।
চিত্র ১৪। একাধিক রেন্ডার পাস সম্পন্ন একটি ফ্রেমের জুম করা অংশ।

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

একটি ভলকান-ভিত্তিক অ্যাপের স্ক্রিনশট, যেখানে ফ্রেমের ভলকান ইভেন্টগুলো নির্বাচন করা হয়েছে।
চিত্র ১৫। একটি ভলকান-ভিত্তিক অ্যাপ যেখানে একটি ফ্রেমের জন্য ভলকান ইভেন্টগুলো নির্বাচন করা হয়েছে।

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

একটি ব্যাপকভাবে জিপিইউ-নির্ভর অ্যাপের স্ক্রিনশট, যেখানে একটি রেন্ডার পাস প্যাটার্ন দেখানো হয়েছে যা ফ্রেমের সীমানা শনাক্ত করতে সাহায্য করে।
চিত্র ১৬। একটি ব্যাপকভাবে জিপিইউ-নির্ভর অ্যাপ, যার রেন্ডার পাস প্যাটার্ন ফ্রেমের সীমানা শনাক্ত করতে সাহায্য করে।

জিপিইউ কাউন্টার

যদি কোনো ট্রেসে GPU স্লাইসের তথ্য পাওয়া না যায়, তাহলে আপনি GPU কাউন্টার ট্র্যাকগুলো ব্যবহার করে GPU ফ্রেম টাইম অনুমান করতে পারেন।

মালি ডিভাইস

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

একটি মালি ডিভাইসের জিপিইউ ইউটিলাইজেশন এবং জিপিইউ কিউ ট্র্যাকের স্ক্রিনশট।
চিত্র ১৭। একটি মালি ডিভাইসের জিপিইউ ইউটিলাইজেশন এবং জিপিইউ কিউ ট্র্যাক।

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

ফ্র্যাগমেন্ট এবং নন-ফ্র্যাগমেন্ট ট্র্যাকগুলোর একটি স্ক্রিনশট।
চিত্র ১৮। খণ্ডিতঅবিভক্ত ট্র্যাক।

অ্যাড্রেনো ডিভাইস

Adreno ডিভাইসগুলিতে, যদি অ্যাপটি GPU-নির্ভর না হয়, তাহলে আপনি আগের বিভাগে Mali ডিভাইসগুলির মতোই GPU ফ্রেম টাইম অনুমান করতে পারেন।

একটি Adreno ডিভাইসের GPU ব্যবহারের শতাংশ এবং GPU Queue ট্র্যাকগুলির একটি স্ক্রিনশট।
চিত্র ১৯। একটি অ্যাড্রেনো ডিভাইসে জিপিইউ ব্যবহারের শতাংশ এবং জিপিইউ কিউ ট্র্যাকসমূহ।

যদি অ্যাপটি বেশি GPU-নির্ভর হয় এবং অ্যাপ্লিকেশনটির GPU ব্যবহারের হার ধারাবাহিকভাবে বেশি থাকে, তাহলে আপনি GPU ফ্রেম টাইম অনুমান করার জন্য Vertex Instructions / Second এবং Fragment Instructions / Second ট্র্যাকগুলো ব্যবহার করতে পারেন। এই ট্র্যাকগুলোর কার্যকলাপের মাত্রার মধ্যে প্যাটার্ন খুঁজে বের করার মাধ্যমে, আপনি একটি ফ্রেমের সীমানা কোথায় সে সম্পর্কে একটি মোটামুটি ধারণা পেতে পারেন এবং তা ব্যবহার করে GPU ফ্রেম টাইম পরিমাপ করতে পারেন।

ভার্টেক্স ইনস্ট্রাকশন / দ্বিতীয় ট্র্যাকের একটি স্ক্রিনশট।
চিত্র ২০। ভার্টেক্স নির্দেশাবলী / দ্বিতীয় ট্র্যাক।

এই অন্যান্য ট্র্যাকগুলি অনুরূপ তথ্য প্রদান করতে পারে:

  • শীর্ষবিন্দু ছায়াযুক্ত / দ্বিতীয়
  • ছায়াযুক্ত খণ্ডাংশ / দ্বিতীয়
  • % সময় শেডিং ভার্টেক্স
  • % সময় শেডিং খণ্ড