2012-06-19 22 views
8

Tôi đang sử dụng GeForce 8400M GS trên Ubuntu 10.04 và tôi đang học lập trình CUDA. Tôi đang viết và chạy vài chương trình cơ bản. Tôi đã sử dụng cudaMalloc, và nó giữ cho tôi một lỗi cho đến khi tôi chạy mã như là người chủ. Tuy nhiên, tôi đã phải chạy mã như root chỉ một lần. Sau đó, ngay cả khi tôi chạy mã như người dùng bình thường, tôi không nhận được một lỗi trên malloc. Chuyện gì vậy?Truy cập root cần thiết cho CUDA?

+0

Bạn cũng đã biên dịch mã dưới dạng gốc một lần? Có lẽ bạn cần thiết để có được quyền truy cập tệp của bạn được cập nhật trước khi trình biên dịch có thể ghi đè lên tệp nhị phân của bạn. –

Trả lời

7

Điều này có thể do GPU của bạn không được khởi chạy đúng lúc khởi động. Tôi đã đi qua vấn đề này khi sử dụng Ubuntu Server và các cài đặt khác, nơi một máy chủ X không được bắt đầu tự động. Hãy thử các cách sau để khắc phục sự cố:

Tạo thư mục cho tập lệnh để khởi chạy GPU của bạn. Tôi thường sử dụng /root/bin. Trong thư mục này, tạo một tập tin gọi là cudainit.sh với đoạn mã sau trong đó (kịch bản này đến từ các diễn đàn Nvidia).

#!/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 

Bây giờ chúng ta cần làm cho tập lệnh này chạy tự động khi khởi động. Chỉnh sửa /etc/rc.local để trông giống như sau.

#!/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 

Khởi động lại máy tính và cố gắng chạy chương trình CUDA của bạn với tư cách người dùng thông thường. Nếu tôi đúng về vấn đề là gì, thì nó phải được sửa.

0

Để làm việc với Ubuntu 14.04, tôi theo dõi https://devtalk.nvidia.com/default/topic/699610/linux/334-21-driver-returns-999-on-cuinit-cuda-/ để thêm nvidia-uvm vào etc/modules và thêm dòng vào quy tắc tùy chỉnh udev. Tạo /etc/udev/rules.d/70-nvidia-uvm.rules với dòng này:

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;'" 

Tôi không hiểu tại sao sudo modprobe nvidia-uvm làm việc để tạo ra một hợp /dev/nvidia-uvm (cũng như sudo cuda_program) nhưng việc niêm yết /etc/modules đòi hỏi các quy tắc udev.

Các vấn đề liên quan