CPU বৈশিষ্ট্য

আপনার কোডে সিপিইউ ফিচারগুলো পরীক্ষা করার বিভিন্ন উপায় রয়েছে, যার প্রত্যেকটিরই নিজস্ব সুবিধা-অসুবিধা আছে।

ABI: প্রিপ্রসেসরের পূর্ব-নির্ধারিত ম্যাক্রো ব্যবহার করুন

সাধারণত বিল্ড টাইমে #ifdef সাথে নিম্নলিখিতগুলি ব্যবহার করে ABI নির্ধারণ করা সবচেয়ে সুবিধাজনক:

  • ৩২-বিট ARM এর জন্য __arm__
  • ৬৪-বিট ARM এর জন্য __aarch64__
  • ৩২-বিট X86 এর জন্য __i386__
  • ৬৪-বিট X86 এর জন্য __x86_64__

লক্ষ্য করুন যে ৩২-বিট X86-কে __i386__ বলা হয়, __x86__ নয়, যেমনটা আপনি হয়তো আশা করতে পারেন!

সিপিইউ কোর সংখ্যা: libc-এর sysconf(3) ব্যবহার করুন

sysconf(3) আপনাকে _SC_NPROCESSORS_CONF (সিস্টেমের CPU কোরের সংখ্যা) এবং _SC_NPROCESSORS_ONLN (বর্তমানে অনলাইন থাকা CPU কোরের সংখ্যা) উভয়ই জিজ্ঞাসা করার সুযোগ দেয়।

বৈশিষ্ট্য: libc'র getauxval(3) ব্যবহার করুন

API লেভেল 18 এবং নতুন সংস্করণে, getauxval(3) অ্যান্ড্রয়েডের C লাইব্রেরিতে উপলব্ধ। AT_HWCAP এবং AT_HWCAP2 আর্গুমেন্টগুলো সিপিইউ-নির্দিষ্ট বৈশিষ্ট্যগুলোর তালিকা সম্বলিত বিটমাস্ক রিটার্ন করে। তুলনা করার জন্য কনস্ট্যান্টগুলো জানতে NDK-তে থাকা বিভিন্ন hwcap.h হেডারগুলো দেখুন, যেমন arm64-এর SHA512 নির্দেশাবলীর জন্য HWCAP_SHA512 , অথবা arm-এর Thumb ইন্টিজার ডিভিশন নির্দেশাবলীর জন্য HWCAP_IDIVT

গুগল সিপিইউ_ফিচার লাইব্রেরি

AT_HWCAP এর একটি সমস্যা হলো, এটি মাঝে মাঝে ডিভাইস শনাক্ত করতে ভুল করে। উদাহরণস্বরূপ, কিছু পুরোনো ডিভাইস দাবি করে যে তাদের ইন্টিজার ডিভিশন ইনস্ট্রাকশন আছে, কিন্তু আসলে তা থাকে না।

গুগলের cpu_features লাইব্রেরি নির্দিষ্ট SoC সম্পর্কে তার নিজস্ব জ্ঞান প্রয়োগ করে এই ধরনের সমস্যার সমাধান করে (প্রশ্নবিদ্ধ নির্দিষ্ট SoC-টি শনাক্ত করার জন্য এটি /proc/cpuinfo পার্স করে)।

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

এনডিকে সিপিইউফিচারস লাইব্রেরি (অপ্রচলিত)

যেসব অ্যাপ ইতিমধ্যেই এটি ব্যবহার করে, তাদের সাথে সোর্স সামঞ্জস্যের জন্য NDK এখনও cpufeatures নামের একটি অপ্রচলিত লাইব্রেরি সরবরাহ করে। নতুন এবং আরও সম্পূর্ণ cpu_features লাইব্রেরির বিপরীতে, এই পুরোনো লাইব্রেরিতে তত বেশি নির্দিষ্ট SoC-এর জন্য বিকল্প সমাধান নেই।

,

আপনার কোডে সিপিইউ ফিচারগুলো পরীক্ষা করার বিভিন্ন উপায় রয়েছে, যার প্রত্যেকটিরই নিজস্ব সুবিধা-অসুবিধা আছে।

ABI: প্রিপ্রসেসরের পূর্ব-নির্ধারিত ম্যাক্রো ব্যবহার করুন

সাধারণত বিল্ড টাইমে #ifdef সাথে নিম্নলিখিতগুলি ব্যবহার করে ABI নির্ধারণ করা সবচেয়ে সুবিধাজনক:

  • ৩২-বিট ARM এর জন্য __arm__
  • ৬৪-বিট ARM এর জন্য __aarch64__
  • ৩২-বিট X86 এর জন্য __i386__
  • ৬৪-বিট X86 এর জন্য __x86_64__

লক্ষ্য করুন যে ৩২-বিট X86-কে __i386__ বলা হয়, __x86__ নয়, যেমনটা আপনি হয়তো আশা করতে পারেন!

সিপিইউ কোর সংখ্যা: libc-এর sysconf(3) ব্যবহার করুন

sysconf(3) আপনাকে _SC_NPROCESSORS_CONF (সিস্টেমের CPU কোরের সংখ্যা) এবং _SC_NPROCESSORS_ONLN (বর্তমানে অনলাইন থাকা CPU কোরের সংখ্যা) উভয়ই জিজ্ঞাসা করার সুযোগ দেয়।

বৈশিষ্ট্য: libc'র getauxval(3) ব্যবহার করুন

API লেভেল 18 এবং নতুন সংস্করণে, getauxval(3) অ্যান্ড্রয়েডের C লাইব্রেরিতে উপলব্ধ। AT_HWCAP এবং AT_HWCAP2 আর্গুমেন্টগুলো সিপিইউ-নির্দিষ্ট বৈশিষ্ট্যগুলোর তালিকা সম্বলিত বিটমাস্ক রিটার্ন করে। তুলনা করার জন্য কনস্ট্যান্টগুলো জানতে NDK-তে থাকা বিভিন্ন hwcap.h হেডারগুলো দেখুন, যেমন arm64-এর SHA512 নির্দেশাবলীর জন্য HWCAP_SHA512 , অথবা arm-এর Thumb ইন্টিজার ডিভিশন নির্দেশাবলীর জন্য HWCAP_IDIVT

গুগল সিপিইউ_ফিচার লাইব্রেরি

AT_HWCAP এর একটি সমস্যা হলো, এটি মাঝে মাঝে ডিভাইস শনাক্ত করতে ভুল করে। উদাহরণস্বরূপ, কিছু পুরোনো ডিভাইস দাবি করে যে তাদের ইন্টিজার ডিভিশন ইনস্ট্রাকশন আছে, কিন্তু আসলে তা থাকে না।

গুগলের cpu_features লাইব্রেরি নির্দিষ্ট SoC সম্পর্কে তার নিজস্ব জ্ঞান প্রয়োগ করে এই ধরনের সমস্যার সমাধান করে (প্রশ্নবিদ্ধ নির্দিষ্ট SoC-টি শনাক্ত করার জন্য এটি /proc/cpuinfo পার্স করে)।

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

এনডিকে সিপিইউফিচারস লাইব্রেরি (অপ্রচলিত)

যেসব অ্যাপ ইতিমধ্যেই এটি ব্যবহার করে, তাদের সাথে সোর্স সামঞ্জস্যের জন্য NDK এখনও cpufeatures নামের একটি অপ্রচলিত লাইব্রেরি সরবরাহ করে। নতুন এবং আরও সম্পূর্ণ cpu_features লাইব্রেরির বিপরীতে, এই পুরোনো লাইব্রেরিতে তত বেশি নির্দিষ্ট SoC-এর জন্য বিকল্প সমাধান নেই।