2011-05-12 13 views
7

के साथ मैक्स-फ़ाइल निष्पादन को रोकना मैं वर्तमान में MATLAB में उपयोग करने के लिए CUDA कार्यक्षमता के साथ एक मैक्स फ़ाइल विकसित कर रहा हूं। जब मैं कुछ गलत कर रहा हूं (उदा। गलत पॉइंटर्स या ऐसा कुछ), MATLAB हमेशा क्रैश हो जाता है (विंडोज़ मुझे समाप्त करने के लिए संकेत देती है, गणित के लिए रिपोर्ट भेजती है या जारी रखने का प्रयास करती है)। क्या ऐसा होने से रोकने के लिए कोई तरीका है? यह वास्तव में विकसित करने के लिए परेशान है लेकिन जैसा कि आप शायद खुद को जानते हैं: शायद कोई भी 'परीक्षण और त्रुटि' के बिना सही कोड लिख सकता है ... अभी तक धन्यवाद!मैटलैब को क्रैश करने से कैसे रोकें (गलत) CUDA कार्यक्षमता

उत्तर

3

Matlab MEX file page से,

MEX जी yourmexfile.c

यदि आप पहले से ऐसा नहीं कर रहे हैं।

+0

यह matlab को क्रैश नहीं करेगा? और डीबगर को कैसे संलग्न करें? क्षमा करें, लेकिन यह है मेरे लिए कुछ नया ... – tim

+0

@Col सुनिश्चित करने के लिए, मैटलैब का मेमोरी मैनेजर काफी नाजुक है, मैंने वास्तव में विचित्र त्रुटियां पैदा की हैं। लेकिन उनमें से कई इस विकल्प के साथ पकड़े जाएंगे। फिर कमांड लाइन से मैटलैब चलाएं डीबगर, जैसे कि आप मैटलैब को डिबग कर रहे हैं। –

+1

'-g' बिल्कुल मैटलैब को मैक्स त्रुटियों के कारण क्रैश होने से नहीं रोकता है। मुझे आश्चर्य है कि यह प्रश्न के लिए एक स्वीकार्य उत्तर है। '-g' वास्तव में खोजने में मदद कर सकता है समस्या, लेकिन एक डीबगर का उपयोग करने का सुझाव लगभग आत्म-स्पष्ट लगता है। – patrickvacek

4

जहां तक ​​मुझे पता है, मैटलैब को मैक्स बग पर दुर्घटनाग्रस्त होने से रोकने का कोई तरीका नहीं है। लेकिन आप मैटलैब प्रक्रिया में डीबगर संलग्न कर सकते हैं और कोड के माध्यम से कदम उठा सकते हैं।

मुझे इस तथ्य के बारे में पता है कि यह काम करता है यदि आपका कोड बाहरी डेल में है जिसे आप Matlab में लोड करते हैं। मुझे यकीन नहीं है कि यह मैक्स फाइलों के साथ काम करता है या नहीं।

+0

एचएम यह एक दयालुता है, क्योंकि यह अक्सर ऐसा नहीं होता है जब मैंने चीजों को विकसित नहीं किया है :( – tim

1

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

  1. प्रणाली पर्यावरण चर परिभाषित NSIGHT_CUDA_DEBUGGER और पर सेट करें।
  2. लॉन्च Matlab
  3. लॉन्च एनवीआईडीआईए नाइट। टास्कबार पर Nsight मॉनिटर आइकन पर राइट क्लिक करें और विकल्प चुनें। CUDA टैब का चयन करें। विकल्प के लिए इस मॉनिटर का उपयोग CUDA संलग्न के लिए करें, ड्रॉप-डाउन मेनू पर क्लिक करें और सही चुनें।
  4. विजुअल स्टूडियो में अपनी प्रोजेक्ट खोलें, ब्रेकपॉइंट्स सेट करें और इसे संकलित करें।
  5. पर जाएं ->प्रक्रिया पर संलग्न करें।
  6. परिवहन फ़ील्ड के बगल में स्थित ड्रॉप-डाउन मेनू पर क्लिक करें, और Nsight GPU डीबगर चुनें।
  7. सुनिश्चित करें कि आपका होस्ट मशीन नाम क्वालीफायर फ़ील्ड में सूचीबद्ध है। ध्यान दें कि यह फ़ील्ड डिफ़ॉल्ट रूप से खाली है; इस संवाद को पहली बार खोले जाने पर आपको अपने मशीन का नाम मैन्युअल रूप से चुनना होगा।
  8. जब आप क्वालीफायर फ़ील्ड में अपने कंप्यूटर का होस्टनाम दर्ज करते हैं, तो उपलब्ध प्रक्रियाओं की एक सूची संवाद बॉक्स में दिखाई देगी। सीयूडीए उपयोग से जुड़ी प्रक्रियाएं टाइप कॉलम में सूचीबद्ध सीयूडीए के साथ दिखाई देंगी। यदि कोई प्रक्रिया ग्रे हो गई है और CUDAमें सूचीबद्ध है कॉलम टाइप करें, यह पहले ही डीबग किया जा रहा है, इसलिए यह अनुलग्नक नहीं है।प्रक्रियाओं है कि CUDAबिना धूसर हो जाते हैं प्रकार स्तंभ में इंगित करता है यह प्रक्रिया में कोई CUDA उपयोग किया जो डिबग किया जाना है। संलग्न होने वाली प्रक्रिया सामान्य रूप से दिखाई देगी, और संलग्न करें बटन सक्षम हो जाएगा।
  9. सुनिश्चित करें कि Matlab में CUDA टाइप कॉलम में है और इसे चुनें।
  10. से Matlab कमांड लाइन, CUDA मेक्सिकन में परिभाषित फ़ंक्शन का आह्वान करें। निष्पादन तब पहले ब्रेकपॉइंट पर रुक जाएगा और डिबगिंग शुरू हो सकती है।
+0

यह मेरे लिए थोड़ा देर हो चुकी है, लेकिन धन्यवाद हालांकि एफ या आपका जवाब। उम्मीद है कि जब वह इस सवाल पर उतरता है तो यह किसी की मदद करता है :) – tim

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