2012-06-19 14 views
8

मैं उबंटू 10.04 पर GeForce 8400M जीएस का उपयोग कर रहा हूं और मैं सीयूडीए प्रोग्रामिंग सीख रहा हूं। मैं कुछ बुनियादी कार्यक्रम लिख रहा हूं और चला रहा हूं। मैं cudaMalloc का उपयोग कर रहा था, और यह मुझे एक त्रुटि दे रहा था जब तक कि मैं रूट के रूप में कोड भाग गया। हालांकि, मुझे केवल एक बार रूट के रूप में कोड चलाने के लिए था। उसके बाद, अगर मैं सामान्य उपयोगकर्ता के रूप में कोड चलाता हूं, तो मुझे malloc पर कोई त्रुटि नहीं मिलती है। क्या चल रहा है?कुडा के लिए रूट पहुंच आवश्यक है?

+0

क्या आपने कोड को रूट के रूप में भी संकलित किया था? कंपाइलर आपकी बाइनरी को ओवरराइट करने में सक्षम होने से पहले आपको अपनी फ़ाइल अनुमतियों को अपडेट करने की आवश्यकता हो सकती है। –

उत्तर

7

शायद यह आपके GPU के कारण बूट पर ठीक से प्रारंभ नहीं किया जा रहा है। उबंटू सर्वर और अन्य इंस्टॉलेशन का उपयोग करते समय मैं इस समस्या में आया हूं जहां एक एक्स सर्वर स्वचालित रूप से प्रारंभ नहीं हो रहा है। इसे ठीक करने के लिए निम्न का प्रयास करें:

अपने GPU को प्रारंभ करने के लिए एक स्क्रिप्ट के लिए निर्देशिका बनाएं। मैं आमतौर पर /root/bin का उपयोग करता हूं। इस निर्देशिका में, cudainit.sh नामक एक फ़ाइल को निम्न कोड के साथ बनाएं (यह स्क्रिप्ट एनवीडिया फ़ोरम से आई है)।

#!/bin/bash 

/sbin/modprobe nvidia 

if [ "$?" -eq 0 ]; then 

    # Count the number of NVIDIA controllers found. 
    N3D=`/usr/bin/lspci | grep -i NVIDIA | grep "3D controller" | wc -l` 
    NVGA=`/usr/bin/lspci | grep -i NVIDIA | grep "VGA compatible controller" | wc -l` 

    N=`expr $N3D + $NVGA - 1` 
    for i in `seq 0 $N`; do 
     mknod -m 666 /dev/nvidia$i c 195 $i; 
    done  

    mknod -m 666 /dev/nvidiactl c 195 255 

else 
    exit 1 
fi 

अब हमें बूट पर स्वचालित रूप से यह स्क्रिप्ट चलाने की आवश्यकता है। निम्नलिखित की तरह देखने के लिए /etc/rc.local संपादित करें।

#!/bin/sh -e 
# 
# rc.local 
# 
# This script is executed at the end of each multiuser runlevel. 
# Make sure that the script will "exit 0" on success or any other 
# value on error. 
# 
# In order to enable or disable this script just change the execution 
# bits. 
# 
# By default this script does nothing. 

# 
# Init CUDA for all users 
# 
/root/bin/cudainit.sh 

exit 0 

अपने कंप्यूटर को रीबूट करें और अपने CUDA प्रोग्राम को नियमित उपयोगकर्ता के रूप में चलाने का प्रयास करें। अगर मैं समस्या के बारे में सही हूं, तो इसे ठीक किया जाना चाहिए।

0

उबंटू 14.04 के साथ काम करने के लिए मैंने https://devtalk.nvidia.com/default/topic/699610/linux/334-21-driver-returns-999-on-cuinit-cuda-/ का पालन किया nvidia-uvmetc/modules जोड़ने के लिए, और कस्टम udev नियम में एक पंक्ति जोड़ने के लिए। इस लाइन के साथ /etc/udev/rules.d/70-nvidia-uvm.rules बनाएँ:

KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/bin/mknod -m 666 /dev/nvidia-uvm c $(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0;'" 

मुझे समझ नहीं आता क्यों sudo modprobe nvidia-uvm बनाने के लिए काम करता है एक (sudo cuda_program करता है) उचित /dev/nvidia-uvm लेकिन /etc/modules सूची udev नियम की आवश्यकता है।

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