9

Ubuntu 10.04 で GeForce 8400M GS を使用しており、CUDA プログラミングを学んでいます。私はいくつかの基本的なプログラムを書いて実行しています。私は cudaMalloc を使用していましたが、ルートとしてコードを実行するまでエラーが発生し続けました。ただし、ルートとしてコードを実行する必要があったのは 1 回だけでした。その後、通常のユーザーでコードを実行しても、malloc でエラーは発生しません。どうしたの?

4

2 に答える 2

9

これはおそらく、起動時に GPU が適切に初期化されていないことが原因です。X サーバーが自動的に開始されない Ubuntu サーバーやその他のインストールを使用しているときに、この問題に遭遇しました。それを修正するには、次のことを試してください。

GPU を初期化するスクリプトのディレクトリを作成します。私は通常使用します/root/bin。このディレクトリにcudainit.sh、次のコードを含むファイルを作成します (このスクリプトは 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  

次に、このスクリプトを起動時に自動的に実行する必要があります。次のように編集/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 プログラムを実行してみます。問題が何であるかについて私が正しければ、それは修正されるべきです。

于 2012-06-20T17:10:23.713 に答える
2

Ubuntu 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を作成するために機能する理由はわかりませんが、リストには udev ルールが必要です。/dev/nvidia-uvmsudo cuda_program/etc/modules

于 2015-03-20T17:01:24.100 に答える