Ubuntu 10.04 で GeForce 8400M GS を使用しており、CUDA プログラミングを学んでいます。私はいくつかの基本的なプログラムを書いて実行しています。私は cudaMalloc を使用していましたが、ルートとしてコードを実行するまでエラーが発生し続けました。ただし、ルートとしてコードを実行する必要があったのは 1 回だけでした。その後、通常のユーザーでコードを実行しても、malloc でエラーは発生しません。どうしたの?
2 に答える
これはおそらく、起動時に 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 プログラムを実行してみます。問題が何であるかについて私が正しければ、それは修正されるべきです。
Ubuntu 14.04 で作業するために、 https: //devtalk.nvidia.com/default/topic/699610/linux/334-21-driver-returns-999-on-cuinit-cuda-/ に従ってに追加nvidia-uvm
しetc/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-uvm
sudo cuda_program
/etc/modules