2016-04-03 7 views
6

तो मैं सी # में प्रदर्शन काउंटर क्लास के साथ प्रयोग कर रहा हूं और सीपीयू काउंटर की जांच करने में बड़ी सफलता मिली है और विंडोज़ प्रदर्शन मॉनीटर में लगभग हर चीज जो मुझे मिल सकती है। हालांकि, मैं "एनवीआईडीआईए जीपीयू" श्रेणी तक पहुंच प्राप्त नहीं कर सकता ...सी # प्रदर्शन काउंटर सहायता, एनवीडिया जीपीयू

तो उदाहरण के लिए, कोड की निम्न पंक्ति यह आमतौर पर काम करती है।

PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); 

कि कोड ठीक काम करता है, लेकिन GPU श्रेणी है कि प्रदर्शन की निगरानी में दिखाई दिया, प्रोसेसर श्रेणी की ही तरह, सी # से सुलभ नहीं है। कोड की निम्न पंक्ति इसे एक्सेस करने का प्रयास करती है।

PerformanceCounter gpuCounter = new PerformanceCounter("NVIDIA GPU", "% GPU Usage","#0 Quadro K1100M(id=1, NVAPI ID=256)"); 

इसके बजाय फेंक देता है एक अपवाद "श्रेणी मौजूद नहीं है" ...

यहाँ क्या यह

enter image description here

श्रेणी स्पष्ट रूप से मौजूद है प्रदर्शन मॉनिटर के भीतर से की तरह लग रहा है, तो मेरा सवाल है ... मैं इस काउंटर का उपयोग कैसे करूं?

+0

मैं पहले से ही एनवीडिया PerfKit देखा है, प्रलेखन बहुत उपयोगी नहीं है, तो यह काम हो सकता है लेकिन वहाँ बहुत अधिक जानकारी वहाँ और पर्याप्त नहीं रन-टाइम उदाहरण है। –

उत्तर

5

के लिए खोज करने के लिए इस पर छह घंटे बिताने के बाद का प्रयास करें, मैं अपने परिणामों को साझा करने के लिए तैयार हूँ। इस अनुपलब्ध प्रदर्शन काउंटर की खोज के लिए कई परीक्षण विधियां उपयोग की गई थीं।

1) पहला कीवर्ड के लिए एक बहुत ही सरल खोज था। इसमें PerformaceCounterCategory के साथ-साथ मेरे सिस्टम पर चल रहे प्रदर्शन काउंटर के हर एक उदाहरण (उनमें से लगभग 12,000) शामिल थे। इस विधि को जीपीयू या एनवीआईडीआईए से संबंधित कुछ भी नहीं मिला, लेकिन सीपीयू के लिए बेकार ढंग से काम किया।

2) अगला परीक्षण GPU को एक बहुत ही विशिष्ट% उपयोग पर चलाकर किया गया था और एक खोज की गई थी जो मूल्यों की संकीर्ण सीमा के भीतर चल रहे प्रत्येक प्रतिशत प्रदर्शन काउंटर का मूल्यांकन करती थी। इस विधि ने जीपीयू से संबंधित कुछ भी वापस नहीं किया, लेकिन फिर सीपीयू के लिए बेकार ढंग से काम किया।

इससे एक निष्कर्ष निकाला जाता है। जीपीयू के लिए वास्तव में कोई प्रदर्शन काउंटर नहीं है, न कि झूठे उपनाम के तहत भी।


समाधान:

कहीं यह राज्य है कि प्रदर्शन पर नजर रखने के स्पष्ट रूप से प्रदर्शन काउंटरों का उपयोग करना चाहिए, और एक छोटे संकेत यह करने के लिए चेहरे में इस पूरे समय हमें घूर रहे थे। प्रदर्शन मॉनीटर में आवृत्ति चर को "एनवीएपीआई आईडी = 256" लेबल किया गया था। एनवीआईडीआईए एपीआई को प्रदर्शन निगरानी क्षमताओं को एनवीआईडीआईए हार्डवेयर को अनुमति देने के लिए डिज़ाइन किया गया था।हालांकि यह प्रदर्शन काउंटर के समान क्रियाएं कर सकता है, लेकिन यह अपने कार्य को करने के लिए समान डेटा प्रकारों का उपयोग नहीं करता है। अब हमारे पास सबूत हैं कि प्रदर्शन मॉनिटर प्रदर्शन काउंटर का उपयोग करने के बजाय सूचना एकत्र करने के लिए एनवीएपीआई का उपयोग कर रहा था। यह बहुत भ्रामक था क्योंकि हर दूसरी प्रविष्टि एक काउंटर से मेल खाती है। तो हम निष्कर्ष निकाल सकते हैं कि इन चरों तक पहुंचने का एकमात्र उचित तरीका एनवीएपीआई के माध्यम से है।

मैं पहली बार NVIDIA वेबसाइट here.

अगला से NVAPI डाउनलोड करने मैं कुछ नमूना कोड एक ब्लॉगर कि ओपन हार्डवेयर मॉनिटर स्रोत कोड का उपयोग कर रहा से here पाया इस्तेमाल किया द्वारा सफलतापूर्वक ऐसा करने के लिए सक्षम था, और here दूसरे से इस साइट पर पोस्ट करें।

कोड सी ++ में लिखा गया है, लेकिन कुछ पुस्तकालयों को चारों ओर ले जाने और कुछ। डीएल के सब कुछ बंदरगाहों को अच्छी तरह से बनाने के बाद।

परिणाम की एक तस्वीर यहां दी गई है। आपकी मदद और समर्थन के लिए सभी को धन्यवाद!

enter image description here

+0

अद्यतन पोस्ट करने के लिए धन्यवाद, मैं वास्तव में भी इस पर अपने सिर खरोंच कर रहा था। –

+0

कोई समस्या नहीं, आपकी मदद के लिए धन्यवाद! –

2

एक PerformanceCounterCategory.GetCategories() करने से आप, आपके सिस्टम पर सभी श्रेणियों की एक सूची मिल जाएगा एक बार आप सही वर्ग आप PerformanceCounterCategory.GetCounters() का उपयोग उस श्रेणी में सभी काउंटरों सूची जाएगा कर सकते हैं तो आप सही नाम प्राप्त कर सकते हैं लगता है।

var cat = new PerformanceCounterCategory("Whatever the correct category name is"); 
var counters = cat.GetCounters(); 

अद्यतन:

यह

static void Main(string[] args) 
{ 
    var counters = PerformanceCounterCategory.GetCategories() 
     .SelectMany(x=>x.GetCounters("")).Where(x => x.CounterName.Contains("GPU")); 

    foreach (var counter in counters) 
    { 
     Console.WriteLine("{0} - {1}", counter.CategoryName, counter.CounterName); 
    } 
    Console.ReadLine(); 
} 
+1

मैंने अपने प्रदर्शन काउंटरों की जांच की और मेरे पास मेरी मशीन पर वह श्रेणी नहीं है, अन्यथा मैं भी शामिल किया होगा कि असली नाम भी –

+1

जैसा ऊपर बताया गया है, श्रेणी मौजूद नहीं है। PerformanceCounterCategory.GetCategories() कुछ भी GPU या NVIDIA से संबंधित नहीं है। तो सवाल अभी भी बनी हुई है, मैं इस श्रेणी को कैसे प्राप्त करूं जो परफमन में पाई जाती है लेकिन सार्वजनिक रूप से दिखाई नहीं देती है। –

+0

यह सिर्फ समझ में नहीं आता है, निजी काउंटर करने का कोई तरीका नहीं है, यह वहां होना चाहिए लेकिन उस नाम के तहत आप उम्मीद नहीं कर रहे हैं। शायद किसी तरह का गुप्त संक्षेप? मैं सचमुच चाहता हूं कि मैं और अधिक मदद कर सकूं लेकिन जैसा कि मैंने कहा था कि मेरे एड काउंटर मेनू में "एनवीआईडीआईए जीपीयू" नहीं था जैसा आपने किया था, इसलिए मैं थोड़ा अंधा उड़ रहा हूं। –

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