في التطبيقات متعددة الخيوط، يضمن استخدام مؤشر ترابط واحد لكل نواة معالج فعلي الأداء الأمثل. لتحديد عدد الخيوط بشكل دقيق، من الضروري التمييز بين النوى المادية والمتعددة الخيوط. فيما يلي كيفية اكتشاف دعم الترابط التشعبي وحالة التنشيط الخاصة به على أنظمة التشغيل Windows وMac وLinux:
باستخدام تعليمات CPUID، يمكننا جمع معلومات حول قدرات المعالج وتكوينه. تم توضيح العملية خطوة بخطوة أدناه:
العدد الأساسي المادي :
#include
#include
void cpuID(unsigned i, unsigned regs[4]);
int main() {
unsigned regs[4];
// Get CPUID information
cpuID(0x00, regs);
cpuID(0x01, regs);
// Determine vendor
char vendor[12];
((unsigned *)vendor)[0] = regs[1];
((unsigned *)vendor)[1] = regs[3];
((unsigned *)vendor)[2] = regs[2];
std::string cpuVendor = std::string(vendor, 12);
// Variables
unsigned logicalCores = (regs[1] >> 16) & 0xff;
unsigned cores = logicalCores;
bool hyperThreads = false;
// Detect hyper-threading
if (cpuVendor == "GenuineIntel") {
cpuID(0x04, regs);
cores = ((regs[0] >> 26) & 0x3f) 1;
} else if (cpuVendor == "AuthenticAMD") {
cpuID(0x80000008, regs);
cores = ((unsigned)(regs[2] & 0xff)) 1;
}
if (regs[3] & (1 Intel Core 2 Duo E8400 (بدون خيوط متشعبة):
النوى المنطقية: 2
النوى: 2
خيوط متشعبة: false
Logical cores: 2
Cores: 2
Hyper-threading: false
النوى المنطقية: 8
النوى: 4
الخيوط المفرطة: صحيح
Logical cores: 8
Cores: 4
hyper-threads: true
النوى المنطقية: 12
النوى: 6
المواضيع المفرطة: صحيح
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3