2008-09-29 18 views
20

मैं अपने प्रोग्राम को सी ++ में चल रहे सीपीयू के कैश लाइन आकार को पढ़ने के लिए चाहता हूं।सी ++ में सीपीयू कैश पृष्ठ का आकार प्रोग्रामेटिक रूप से कैसे प्राप्त करें?

मुझे पता है कि यह पोर्टेबल नहीं किया जा सकता है, इसलिए मुझे विंडोज के लिए एक समाधान की आवश्यकता होगी और अन्य सिस्टम के लिए समाधान दूसरों के लिए उपयोगी हो सकता है, इसलिए यदि आप उन्हें जानते हैं तो उन्हें पोस्ट करें)।

लिनक्स के लिए मैं/proc/cpuinfo की सामग्री पढ़ सकता हूं और cache_alignment के साथ शुरू होने वाली रेखा को पार्स कर सकता हूं। शायद एपीआई को कॉल करने का एक बेहतर तरीका है।

विंडोज के लिए मुझे बस कोई जानकारी नहीं है।

उत्तर

2

cpuinfo विंडोज पर

#include <Windows.h> 
#include <iostream> 

using std::cout; using std::endl; 

int main() 
{ 
    SYSTEM_INFO systemInfo; 
    GetSystemInfo(&systemInfo); 
    cout << "Page Size Is: " << systemInfo.dwPageSize; 
    getchar(); 
} 

लिनक्स

पर http://linux.die.net/man/2/getpagesize

+1

इस पर वापस आने के बाद मुझे विश्वास नहीं है कि मैंने आपके प्रश्न का उत्तर दिया, जो कैश लाइन आकार के बारे में था, फिर मेमोरी पेज का आकार सही था? https://en.wikipedia.org/wiki/Page_(computer_memory) मैं पेज आकार स्निपेट (मेमोरी एक्सेस से जुड़े एक प्रोजेक्ट पर काम कर रहा था) के लिए गुगल रहा था और यहां आया, स्किमिंग के खतरे। कृपया मेरा जवाब अनचेक करें, लेकिन शायद इसे भविष्य के संदर्भ के लिए यहां छोड़ने लायक है। – Researcher

0

ऐसा लगता है कि कम से कम एससीओ यूनिक्स (http://uw714doc.sco.com/en/man/html.3C/sysconf.3C.html) में sysconf के लिए _SC_CACHE_LINE है। शायद अन्य प्लेटफार्मों में कुछ समान है?

12

Win32, GetLogicalProcessorInformation पर आपको SYSTEM_LOGICAL_PROCESSOR_INFORMATION वापस मिल जाएगा जिसमें CACHE_DESCRIPTOR है, जिसमें आपको आवश्यक जानकारी है।

+1

ओह - SYSTEM_LOGICAL_PROCESSOR_INFORMATION संरचनाओं की सरणी डिकोडिंग लगता है कि यह एक दर्द होगा। –

+3

सिस्टम प्रोग्रामिंग की दुनिया में आपका स्वागत है। ;) –

+0

यह बहुत बुरा नहीं है, माइकल। वैसे भी, इसके साथ पकड़ने के लिए आपको यह सीखने के लिए मजबूर किया जाता है कि कैसे सीपीयू टोपोलॉजी की व्यवस्था की जाती है, और आपको अच्छी तरह से जानने की आवश्यकता हो सकती है। –

4

x86 के लिए, CPUID निर्देश। एक त्वरित Google खोज Win32 और C++ के लिए कुछ libraries बताती है। मैंने इनलाइन असेंबलर के माध्यम से सीपीयूआईडी का भी उपयोग किया है।

कुछ अधिक जानकारी:

+0

क्या आप इस पर टिप्पणी कर सकते हैं कि आप इसे प्राप्त करने के लिए CPUID का उपयोग कैसे करेंगे? –

4

लिनक्स पर proccpuinfo library, पढ़ने/proc के लिए एक वास्तुकला स्वतंत्र सी एपीआई कोशिश/

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^