โปรแกรมค้นหาจำนวนแกนในเครื่องโดยทางโปรแกรม


464

มีวิธีในการพิจารณาจำนวนคอร์ของเครื่องจาก C / C ++ ในแบบอิสระหรือไม่ หากไม่มีสิ่งดังกล่าวแล้วจะพิจารณาได้อย่างไรต่อแพลตฟอร์ม (Windows / * nix / Mac)


4
หากคุณต้องการใช้ดูจำนวนกระทู้ที่จะเริ่มต้นโปรดใช้ NUMBER_OF_PROCESSORS เป็นมาตรการหลัก ฉันปล่อยให้มันเป็นแบบฝึกหัดให้คุณว่าทำไมมันถึงดีกว่า (ถ้ามีคนใช้มากกว่านี้) จากนั้นใช้แกนฮาร์ดแวร์ โปรแกรมของคุณมีคอร์มากแค่ไหนที่เป็นปัญหาสิ่งแวดล้อม
Lothar

โปรดทราบว่าstd::thread::hardware_concurrencyส่งคืนจำนวนแกนประมวลผล CPU จริง แต่nprocใน Linux จะแสดงเฉพาะจำนวนแกนประมวลผล CPU ที่กระบวนการปัจจุบันสามารถทำงานได้ซึ่งสามารถควบคุมsched_setaffinityได้ ฉันไม่พบวิธีรับสิ่งนั้นแทนจากมาตรฐาน C ++: ดูตัวอย่างใน Python: stackoverflow.com/questions/1006289/…
Ciro Santilli 郝海东冠状病病六四事件法轮功

คำตอบ:


706

C ++ 11

#include <thread>

//may return 0 when not able to detect
const auto processor_count = std::thread::hardware_concurrency();

การอ้างอิง: std :: thread :: hardware_concurrency


ใน C ++ ก่อน C ++ 11 ไม่มีวิธีการพกพา แต่คุณจะต้องใช้วิธีการต่อไปนี้อย่างน้อยหนึ่งวิธี (ป้องกันโดย#ifdefบรรทัดที่เหมาะสม):

  • Win32

    SYSTEM_INFO sysinfo;
    GetSystemInfo(&sysinfo);
    int numCPU = sysinfo.dwNumberOfProcessors;
  • Linux, Solaris, AIX และ Mac OS X> = 10.4 (เช่น Tiger เป็นต้นไป)

    int numCPU = sysconf(_SC_NPROCESSORS_ONLN);
  • FreeBSD, MacOS X, NetBSD, OpenBSD เป็นต้น

    int mib[4];
    int numCPU;
    std::size_t len = sizeof(numCPU); 
    
    /* set the mib for hw.ncpu */
    mib[0] = CTL_HW;
    mib[1] = HW_AVAILCPU;  // alternatively, try HW_NCPU;
    
    /* get the number of CPUs from the system */
    sysctl(mib, 2, &numCPU, &len, NULL, 0);
    
    if (numCPU < 1) 
    {
        mib[1] = HW_NCPU;
        sysctl(mib, 2, &numCPU, &len, NULL, 0);
        if (numCPU < 1)
            numCPU = 1;
    }
  • HPUX

    int numCPU = mpctl(MPC_GETNUMSPUS, NULL, NULL);
  • IRIX

    int numCPU = sysconf(_SC_NPROC_ONLN);
  • Objective-C (Mac OS X> = 10.5 หรือ iOS)

    NSUInteger a = [[NSProcessInfo processInfo] processorCount];
    NSUInteger b = [[NSProcessInfo processInfo] activeProcessorCount];

5
@mcandre: นั่นเป็นแบบฝึกหัดสำหรับผู้อ่าน ถ้าฉันใช้ฉันอาจใช้แม่แบบนโยบายที่กำหนดนโยบายไว้ในคำสั่ง preprocessor หรือ ... คุณสามารถใช้ boost thread :: hardware_concurrency ()
paxos1977

3
เป็นจุดของการชี้แจงวิธีการแก้ปัญหา Win32 ส่งกลับจำนวนแกนทั้งหมด (สิ่งที่ถูกถาม) ไม่ใช่จำนวนฟิสิคัล CPU ทั้งหมด
Eric

1
วิธี Linux / Solaris / AIX ใช้งานกับ FreeBSD และมีตั้งแต่อย่างน้อยปี 2006 นอกจากนี้ที่จะส่งคืน CPU แบบออนไลน์หากระบบสามารถปิดบางอย่างพวกเขาอาจไม่ถูกนับ การเรียก sysconf ด้วย "_SC_NPROCESSORS_CONF" จะส่งคืน CPU ทั้งหมดที่กำหนดค่า
Chris S

3
สองสิ่งที่ต้องระวัง HW_NCPUเลิกใช้แล้วใน OS X บน Windows GetSystemInfoจะมีประโยชน์ก็ต่อเมื่อระบบของคุณมีตัวประมวลผลเชิงตรรกะ 32 ตัวหรือน้อยกว่าใช้GetLogicalProcessorInformationสำหรับระบบที่มีตัวประมวลผลเชิงตรรกะมากกว่า 32 ตัว

1
@Trejkaz Documentaionกล่าวอย่างชัดเจนว่า "ตรรกะ" - ซึ่งนับ HT เสมอแกนคำว่า"ทางกายภาพ" มักจะหมายถึงแกนที่รายงานโดย BIOS / UEFI เป็นแกนอาจถูกเลียนแบบ / เสมือนจริง คุณสามารถแยกแยะความแตกต่างระหว่างแกน HT / ไม่ใช่ HT กับฟังก์ชั่นเช่นGetLogicalProcessorInformationเป็นต้น หมายเหตุ: HT! = การจำลองหรือการจำลองเสมือนนั่นคือความแตกต่างที่ยิ่งใหญ่ HT เป็นการปรับแต่งฮาร์ดแวร์เพื่อพูด
specializt

202

ฟังก์ชันนี้เป็นส่วนหนึ่งของมาตรฐาน C ++ 11

#include <thread>

unsigned int nthreads = std::thread::hardware_concurrency();

สำหรับคอมไพเลอร์รุ่นเก่าคุณสามารถใช้ห้องสมุดBoost.Thread

#include <boost/thread.hpp>

unsigned int nthreads = boost::thread::hardware_concurrency();

ในกรณีใดกรณีหนึ่งให้hardware_concurrency()ส่งคืนจำนวนเธรดที่ฮาร์ดแวร์สามารถดำเนินการพร้อมกันตามจำนวนแกนประมวลผล CPU และหน่วยเธรดไฮเปอร์


1
ขั้นที่สอง ... กำลังจะใช้โค้ดตัวอย่างด้านบนและมาโครตัวประมวลผลล่วงหน้าบางตัวเพื่อแสดงฟังก์ชั่นเดียว แต่การทำงานอย่างหนักสำหรับฉัน
jkp

สำหรับ win32 จะเป็นการเรียกไปยัง GetSystemInfo (ในฐานะของการเพิ่มประสิทธิภาพเวอร์ชั่น 1.41.0) การจับข้อมูลทั้งหมดเพื่อตรวจสอบว่าจำนวนเธรดผู้ปฏิบัติงานจะมีประสิทธิภาพหรือไม่? เราจำเป็นต้องพิจารณาทั้งจำนวนคอร์และไฮเปอร์เธรดหรือไม่? เธรดที่ไม่ได้ลงนาม :: hardware_concurrency () {SYSTEM_INFO info = {0}; GetSystemInfo (และข้อมูล); ส่งคืน info.dwNumberOfProcessors }
Jive Dadson

ตาม MSDN, GetSystemInfo () ส่งคืนจำนวน "ตัวประมวลผลทางกายภาพ" ใน dwNumberOfProcessors แต่ไม่ได้กำหนดความหมายของสิ่งนั้น ดูเหมือนว่าเอกสาร Boost จะอ้างว่ามีหน่วยไฮเปอร์เธรดอยู่
Ferruccio

ดูstackoverflow.com/questions/642348/…สำหรับ hyperthreading
naugtur

57

OpenMPรองรับหลายแพลตฟอร์ม (รวมถึง Visual Studio 2005) และให้บริการ

int omp_get_num_procs();

ฟังก์ชั่นที่คืนค่าจำนวนตัวประมวลผล / คอร์ที่มีในเวลาที่โทร


เพราะมันเป็นคำตอบที่ผิด จากgcc.gnu.org/bugzilla/show_bug.cgi?id=37586 "omp_get_num_procs () จะส่งคืนจำนวนที่น้อยกว่าจำนวนของ CPU ของระบบออนไลน์หาก GOMP_CPU_AFFINITY env var ใช้หรือหากกระบวนการเรียกใช้และ / หรือเธรดมี CPU affinity จำกัด ชุดย่อยของ CPU " ดังนั้นหากคุณโทรไปก่อนหน้านี้เช่นsched_setaffinityนี้จะไม่ทำงาน
angainor

7
ฟังก์ชันนี้ส่งคืนจำนวนของ CPU ที่พร้อมใช้งานสำหรับกระบวนการเรียกใช้ นี่ไม่ใช่กรณีการใช้งานทั่วไปใช่ไหม นอกเหนือจากวัตถุประสงค์ในการรายงานที่ไร้ประโยชน์บางส่วนจำนวนแกนประมวลผลฮาร์ดแวร์ที่แท้จริงไม่เกี่ยวข้องกับคุณหากคุณไม่สามารถใช้ประโยชน์จากรหัสดังกล่าวในรหัสของคุณ
macbirdie

@EvanTeran นอกเหนือจากข้อเท็จจริงที่ว่ามันเป็นจุดประสงค์ของคำถามก็สามารถเป็นประโยชน์ได้แน่นอน ตัวอย่างเช่นสำหรับวัตถุประสงค์ของการตั้งค่าความสัมพันธ์ของเธรด บอกว่าฉันต้องการเรียกใช้ 4 เธรดที่เชื่อมโยงกับคอร์ CPU สี่ตัวสุดท้ายบนเครื่องของฉันแทนที่จะเป็นคอร์แรกสี่คอร์ และนอกจากนี้ยังมีวิธีอื่นในการทำให้ขนานรหัสยกเว้น OpenMP ฉันอาจต้องการวางไข่ pthreads ด้วยตัวเอง สิ่งเหล่านี้พร้อมใช้งานและไม่ถูก จำกัด โดยตัวแปรสภาวะแวดล้อม OpenMP
angainor

2
สิ่งนี้ส่งคืนจำนวนของ CPU แบบโลจิคัลไม่ใช่แกนประมวลผล (ฟิสิคัล CPU) เช่นนั้น
Michael Konečný

37

หากคุณมีการเข้าถึงภาษาแอสเซมบลีคุณสามารถใช้คำสั่ง CPUID เพื่อรับข้อมูลทุกประเภทเกี่ยวกับ CPU เป็นแบบพกพาระหว่างระบบปฏิบัติการแม้ว่าคุณจะต้องใช้ข้อมูลเฉพาะของผู้ผลิตเพื่อกำหนดวิธีการค้นหาจำนวนคอร์ นี่คือเอกสารที่อธิบายวิธีการทำบนชิป Intelและหน้า 11 ของเอกสารนี้อธิบายถึงข้อกำหนดของ AMD


4
อาจถูกลดระดับลงเนื่องจากคำถามถูกติดแท็กเป็น C ++ และคำตอบนี้ใช้ไม่ได้กับระบบที่รัน C ++ บนสถาปัตยกรรมที่ไม่ใช่ x86 (ARM, PPC และอื่น ๆ ) ฉันไม่ได้บอกว่ามันเป็นเหตุผลที่ดีในการโหวตคำตอบเพียงเป็นไปได้
Ferruccio

3
ข้อผิดพลาดประการหนึ่งของวิธีนี้คือถ้าคุณใช้ CPUID เพื่อตรวจจับ HyperThreading ในโปรเซสเซอร์ของ Intel ฉันพบปัญหานี้ในแล็ปท็อปของฉัน: ในขณะที่ CPU ที่ฉันใส่เข้าไปในเครื่องรองรับ HyperThreading (และแน่นอนว่ารายงานผ่านทาง CPUID) BIOS ไม่ได้ ดังนั้นคุณไม่ควรพยายามใช้ความสามารถ HT จากการอ่าน CPUID เนื่องจากคุณไม่สามารถสอบถาม BIOS เกี่ยวกับการสนับสนุน HT (ไม่เคยเห็นมาก่อน) ระบบปฏิบัติการจึงควรถูกสอบถามเพื่อรับจำนวนตัวประมวลผลเชิงตรรกะ
Chuck R

32

(เกือบ) ฟังก์ชั่นอิสระของแพลตฟอร์มใน c-code

#ifdef _WIN32
#include <windows.h>
#elif MACOS
#include <sys/param.h>
#include <sys/sysctl.h>
#else
#include <unistd.h>
#endif

int getNumCores() {
#ifdef WIN32
    SYSTEM_INFO sysinfo;
    GetSystemInfo(&sysinfo);
    return sysinfo.dwNumberOfProcessors;
#elif MACOS
    int nm[2];
    size_t len = 4;
    uint32_t count;

    nm[0] = CTL_HW; nm[1] = HW_AVAILCPU;
    sysctl(nm, 2, &count, &len, NULL, 0);

    if(count < 1) {
        nm[1] = HW_NCPU;
        sysctl(nm, 2, &count, &len, NULL, 0);
        if(count < 1) { count = 1; }
    }
    return count;
#else
    return sysconf(_SC_NPROCESSORS_ONLN);
#endif
}

ดูเหมือนHW_NCPUเลิกใช้แล้วในแหล่งที่มาของ

16

บน Linux คุณสามารถอ่านไฟล์ / proc / cpuinfo และนับจำนวนแกน


ยกเว้นว่าจะนับไฮเปอร์เธรดเธรดหรือโซลูชัน SMT อื่น ๆ เป็นแกนเพิ่มเติม ...
jakobengblom2 2

13
@Arafangion: การทำไฮเปอร์เธรดไม่ได้เป็นการดำเนินการแบบขนานที่แท้จริงมันเป็นเทคโนโลยีสำหรับลดค่าใช้จ่ายในการสลับบริบท ซีพียูที่มีเธรดมากสามารถรันเธรดได้ครั้งละหนึ่งเธรดเท่านั้น แต่สามารถเก็บสถานะสถาปัตยกรรม (ค่าการลงทะเบียนเป็นต้น) ของสองเธรดในเวลาเดียวกัน ลักษณะการทำงานแตกต่างจากการมีสองแกน
Wim Coenen

7
@Wim: นั่นไม่ถูกต้องอย่างสมบูรณ์ ซีพียูที่มีไฮเปอร์เธรดมักมี ALU หลายตัวและสามารถส่งคำสั่งได้หลายคำสั่งต่อรอบ หากเนื่องจากการพึ่งพาข้อมูลและแผงลอย ALU บางตัวสามารถไม่ว่างโดยเธรดหนึ่งตัว ALU เหล่านั้นจะถูกใช้แทนการประมวลผลเธรดฮาร์ดแวร์ที่สองพร้อมกัน
Ben Voigt

11

โปรดทราบว่า "จำนวนแกนหลัก" อาจไม่ใช่หมายเลขที่มีประโยชน์โดยเฉพาะคุณอาจต้องผ่านการรับรองอีกเล็กน้อย คุณต้องการนับซีพียูแบบมัลติเธรดเช่น Intel HT, IBM Power5 และ Power6 อย่างไรและโด่งดังที่สุดคือ Niagara / UltraSparc T1 และ T2 ของ Sun หรือน่าสนใจยิ่งขึ้น MIPS 1004k พร้อมเธรดฮาร์ดแวร์สองระดับ (หัวหน้างานและระดับผู้ใช้) ... ไม่ต้องพูดถึงสิ่งที่เกิดขึ้นเมื่อคุณย้ายเข้าสู่ระบบที่รองรับ hypervisor ซึ่งฮาร์ดแวร์อาจมีซีพียูหลายสิบตัว แต่เป็นระบบปฏิบัติการเฉพาะของคุณ เห็นเพียงไม่กี่

สิ่งที่ดีที่สุดที่คุณสามารถคาดหวังได้คือการบอกจำนวนหน่วยการประมวลผลเชิงตรรกะที่คุณมีในพาร์ติชันระบบปฏิบัติการท้องถิ่นของคุณ ลืมเกี่ยวกับการดูเครื่องจริงเว้นแต่คุณจะเป็นไฮเปอร์ไวเซอร์ ข้อยกเว้นสำหรับกฎนี้ในวันนี้คือในที่ดิน x86 แต่จุดสิ้นสุดของเครื่องจักรที่ไม่ใช่เสมือนกำลังมาอย่างรวดเร็ว ...



7

คุณอาจไม่สามารถรับได้ด้วยวิธีที่เป็นอิสระจากแพลตฟอร์ม Windows คุณจะได้รับจำนวนโปรเซสเซอร์

ข้อมูลระบบ Win32


1
Carefull: ตัวประมวลผลไฮเปอร์เธรดที่บอกว่ามีอยู่สองตัว ดังนั้นคุณต้องดูว่าโปรเซสเซอร์นั้นมีความสามารถในการทำไฮเปอร์เธรดหรือไม่
Martin York

6

Windows (x64 และ Win32) และ C ++ 11

จำนวนกลุ่มของตัวประมวลผลเชิงตรรกะที่แบ่งใช้ตัวประมวลผลหลักเดียว (ใช้GetLogicalProcessorInformationExดูGetLogicalProcessorInformationเช่นกัน)

size_t NumberOfPhysicalCores() noexcept {

    DWORD length = 0;
    const BOOL result_first = GetLogicalProcessorInformationEx(RelationProcessorCore, nullptr, &length);
    assert(GetLastError() == ERROR_INSUFFICIENT_BUFFER);

    std::unique_ptr< uint8_t[] > buffer(new uint8_t[length]);
    const PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX info = 
            reinterpret_cast< PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX >(buffer.get());

    const BOOL result_second = GetLogicalProcessorInformationEx(RelationProcessorCore, info, &length);
    assert(result_second != FALSE);

    size_t nb_physical_cores = 0;
    size_t offset = 0;
    do {
        const PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX current_info =
            reinterpret_cast< PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX >(buffer.get() + offset);
        offset += current_info->Size;
        ++nb_physical_cores;
    } while (offset < length);

    return nb_physical_cores;
}

โปรดทราบว่าการดำเนินการของNumberOfPhysicalCoresIMHO นั้นห่างไกลจากเรื่องเล็กน้อย (เช่น "ใช้GetLogicalProcessorInformationหรือGetLogicalProcessorInformationEx") แต่มันค่อนข้างบอบบางถ้ามีคนอ่านเอกสาร (นำเสนออย่างชัดเจนGetLogicalProcessorInformationและโดยปริยายสำหรับGetLogicalProcessorInformationEx) ที่ MSDN

จำนวนตัวประมวลผลเชิงตรรกะ (ใช้GetSystemInfo )

size_t NumberOfSystemCores() noexcept {
    SYSTEM_INFO system_info;
    ZeroMemory(&system_info, sizeof(system_info));

    GetSystemInfo(&system_info);

    return static_cast< size_t >(system_info.dwNumberOfProcessors);
}

โปรดทราบว่าทั้งสองวิธีสามารถแปลงเป็น C / C ++ 98 / C ++ 03 ได้อย่างง่ายดาย


1
ขอบคุณ! ฉันกำลังมองหาสิ่งนี้เพราะGetLogicalProcessorInformationไม่ได้ทำงานกับขนาดบัฟเฟอร์ที่ฉันใช้ มากกว่าความพึงพอใจ! ^^
KeyWeeUsr

@KeyWeeUsr ขอบคุณการเขียนโปรแกรม Windows ค่อนข้างไกลจากเรื่องเล็กน้อยและมีเหตุผล ในเวลาเฉลี่ยที่ผมใช้ปรับปรุงเพิ่มเติมเล็กน้อยC ++ 17 รุ่นซึ่งยังเป็นไปตามที่ถูกต้องมากขึ้นในการวิเคราะห์แบบคงที่ PVS-Studio เกี่ยวกับการบางอย่างกับsize_tมันได้ปลดเปลื้อง (แม้ว่า msvc ++ จะไม่บ่นที่ W4)
Matthias

5

เพิ่มเติมเกี่ยวกับ OS X: sysconf(_SC_NPROCESSORS_ONLN)มีเฉพาะรุ่น> = 10.5 ไม่ใช่ 10.4

อีกทางเลือกหนึ่งคือHW_AVAILCPU/sysctl()รหัส BSD ซึ่งมีอยู่ในรุ่น> = 10.2



4

ไม่เกี่ยวข้องกับ C ++ แต่บน Linux ฉันมักจะทำ:

grep processor /proc/cpuinfo | wc -l

มีประโยชน์สำหรับภาษาสคริปต์เช่น bash / perl / python / ruby


4
สำหรับไพ ธ อน:import multiprocessing print multiprocessing.cpu_count()
initzero

3
เป็นเวลานาน แต่grepมีการ-cตั้งค่าสถานะเพื่อนับรายการ!
Lapshin Dmitry

3

hwloc (http://www.open-mpi.org/projects/hwloc/) มีมูลค่าการดู แม้ว่าต้องมีการรวมไลบรารีอื่นในรหัสของคุณ แต่สามารถให้ข้อมูลทั้งหมดเกี่ยวกับโปรเซสเซอร์ของคุณ (จำนวนคอร์โทโพโลยีและอื่น ๆ )


3

บน linux วิธีการเขียนโปรแกรมที่ดีที่สุดเท่าที่ฉันรู้คือการใช้

sysconf(_SC_NPROCESSORS_CONF)

หรือ

sysconf(_SC_NPROCESSORS_ONLN)

สิ่งเหล่านี้ไม่ได้มาตรฐาน แต่อยู่ใน man page ของฉันสำหรับ Linux


3

บน Linux อาจไม่ปลอดภัยที่จะใช้_SC_NPROCESSORS_ONLNเนื่องจากไม่ใช่ส่วนหนึ่งของมาตรฐาน POSIX และสถานะsysconfด้วยตนเองมาก ดังนั้นจึงมีความเป็นไปได้ที่_SC_NPROCESSORS_ONLNอาจไม่มีอยู่:

 These values also exist, but may not be standard.

     [...]     

     - _SC_NPROCESSORS_CONF
              The number of processors configured.   
     - _SC_NPROCESSORS_ONLN
              The number of processors currently online (available).

วิธีง่าย ๆ คือการอ่าน/proc/statหรือ/proc/cpuinfoนับพวกเขา:

#include<unistd.h>
#include<stdio.h>

int main(void)
{
char str[256];
int procCount = -1; // to offset for the first entry
FILE *fp;

if( (fp = fopen("/proc/stat", "r")) )
{
  while(fgets(str, sizeof str, fp))
  if( !memcmp(str, "cpu", 3) ) procCount++;
}

if ( procCount == -1) 
{ 
printf("Unable to get proc count. Defaulting to 2");
procCount=2;
}

printf("Proc Count:%d\n", procCount);
return 0;
}

การใช้/proc/cpuinfo:

#include<unistd.h>
#include<stdio.h>

int main(void)
{
char str[256];
int procCount = 0;
FILE *fp;

if( (fp = fopen("/proc/cpuinfo", "r")) )
{
  while(fgets(str, sizeof str, fp))
  if( !memcmp(str, "processor", 9) ) procCount++;
}

if ( !procCount ) 
{ 
printf("Unable to get proc count. Defaulting to 2");
procCount=2;
}

printf("Proc Count:%d\n", procCount);
return 0;
}

วิธีการเดียวกันในเชลล์โดยใช้ grep:

grep -c ^processor /proc/cpuinfo

หรือ

grep -c ^cpu /proc/stat # subtract 1 from the result

2

ทางเลือก OS X: วิธีการแก้ปัญหาที่อธิบายไว้ก่อนหน้านี้อิงตาม [[NSProcessInfo processInfo] ตัวประมวลผลจำนวน] ใช้ได้เฉพาะใน OS X 10.5.0 ตามเอกสาร สำหรับ OS X เวอร์ชั่นก่อนหน้าให้ใช้ฟังก์ชั่น Carbon MPProcessors ()

หากคุณเป็นโปรแกรมเมอร์โกโก้ไม่ต้องกลัวว่ามันจะเป็นคาร์บอน คุณเพียงแค่ต้องเพิ่ม Carbon framework ในโครงการ Xcode ของคุณและ MPProcessors () จะพร้อมใช้งาน



-2

คุณสามารถใช้ WMI ใน. net ได้เช่นกัน แต่ขึ้นอยู่กับบริการ wmi ที่ใช้งาน ฯลฯ บางครั้งก็ทำงานได้ภายในเครื่อง แต่ก็ล้มเหลวเมื่อมีการเรียกใช้รหัสเดียวกันบนเซิร์ฟเวอร์ ฉันเชื่อว่าเป็นปัญหาเกี่ยวกับเนมสเปซซึ่งเกี่ยวข้องกับ "ชื่อ" ที่คุณกำลังอ่าน


-3

ใน Linux คุณสามารถชำระเงิน dmesg และกรองบรรทัดที่ ACPI เริ่มต้น CPU ได้ดังนี้:

dmesg | grep 'ACPI: Processor'

ความเป็นไปได้อื่น ๆ คือการใช้ dmidecode เพื่อกรองข้อมูลโปรเซสเซอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.