宝くじ
今年も外れたので、お金が無い。どうにか別のところで当てないと。
新しいPC(GTX1080Ti)が来た
研究費で新しいビデオカードを積んだPCを買った。これまでGTX1080,GTX1070,GTX760があるけど、もっと早いのが欲しくて、買っちゃいました。もうお金ない。まだ箱を開けてないので、そのうちやります。
Cudaのエラー「0: copyin Memcpy 〜〜」
Cuda Fortranで計算しようと思ってコンパイル、実行したら、
0: copyin Memcpy (dev=0x0x63a2dc, host=0x0x2b7977d11020, size=1024000) FAILED: 30(unknown error)
とか表示されて、全然計算できない。なんだこれは?と思って、とりあえずwrite文で画面表示させて、どこまで計算できてるか確かめると、どうやらデバイスに転送する手前まで。もしやと思って、
$ pgaccelinfo
を実行すると、
CUDA Driver Version: 9000
だけしか返ってこない。この間再起動したのが原因なのか、やはりビデオカードを読み込めてませんでした…
でもなんで、バージョンが9000なんだろ?意味不明。
もう一度、NVIDIAのドライバをインストールしたら無事に動きました。そうそう再起動しないので、これでいいのです。これからはすぐに気が付くように、ビデオカードのオプションで該当が無ければ、計算をストップするようにしたいと思います。
続き。ちょっと調べて、ファイルサイズが0かどうか調べるようにしました。こんな感じ。
#! /bin/bash pgaccelinfo |grep tesla > sss if [ -s sss ]; then AAA=`cat sss` BBB=${AAA:21} echo $BBB pgfortran -fast -Mcuda=8.0 -acc $BBB sub.cuf main.cuf -lcufft time ./a.out else echo "Graphic Card not work!" exit fi
Cudaを使うときの、ビデオカードのオプション(-ta=tesla:???)の自動判別
Cuda Fortranを使っているんだけど、ビデオカードによる性能の比較をしてみたくて、色々計算してます。その時に困るのが、カードによって引き渡すオプションが違うこと。例えば
ビデオカード オプション GTX660,760 -ta=tesla:cc30 GTX1070,1080 -ta=tesla:cc60
というようになっている。これは、pgaccelinfoコマンドの一番下の行で確認できて、
・・・ Async Engines: 2 Unified Addressing: Yes Managed Memory: Yes PGI Compiler Option: -ta=tesla:cc60
のように出力される。これを計算機ごとに変更していては、非常にめんどくさい。ということで、シェルのファイルで自動判別することにしました。流れとしては、pgaccelinfoで表示するデータからgrepして1行取り出し、決まった文字数以降が(-ta=tesla:cc60)などになるようにして、コンパイル時のオプションに引き渡すようにするという手順です。
comp.bashというファイルの中身を、
#! /bin/bash pgaccelinfo |grep tesla > sss AAA=`cat sss` BBB=${AAA:21} echo $BBB pgfortran -fast -Mcuda=8.0 -acc $BBB sub.cuf main.cuf -lcufft time ./a.out
として、
$ bash ./comp.bash
これでとりあえず動いています。1行目とコマンドラインですが、shではダメです。変数の部分選択をやってくれません。
きっともっと賢い方法があると思うんだけど、調べるのもめんどくさいので、これでいいのです。
Ubuntu14.04に、Cuda8.0をインストールでハマる
GTX1070が付いているマシンにUbuntuを入れて、Cuda8.0をインストールしようとしたんだけど、ハマった。色々やっているうちに、Nvidiaのドライバがうまくインストールできなくて、
$ pgaccelinfo
としても、CUDA Driver VersionとNVRM versionの2行くらいしか表示されなかったり、
# modprobe nvidia
として普通にmoduleを読み込めても、それでもpgaccelinfoでは2行しか表示されなかったり。もう訳が分からなくなったので、Cudaのアンインストールと、nvidiaのアンインストールをして、まっさらな状態から入れなおしたら動きました。具体的には、
1.nvidiaのアンインストール
# nvidia-uninstall # apt-get remove nvidia*
2.Cudaのアンインストール
# /usr/local/cuda/bin/uninstall_cuda_8.0.pl
としてきれいにしてから、とりあえず再起動。
# reboot
3.Nvidiaドライバのインストール
# ./NVIDIA-Linux-x86_64-384.59.run --disable-nouveau
途中で英語で色々聞かれますが、基本そのままでした。
4.Cuda8.0のインストール
./cuda_8.0.61_375.26_linux.run
ここでインストールの際に、NVIDIAのドライバはスキップします。すると最終的に、
Installing the CUDA Toolkit in /usr/local/cuda-8.0 ... =========== = Summary = =========== Driver: Not Selected Toolkit: Installed in /usr/local/cuda-8.0 Samples: Not Selected Please make sure that - PATH includes /usr/local/cuda-8.0/bin - LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-8.0/bin Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-8.0/doc/pdf for detailed information on setting up CUDA.とWARNINGが出ますが、先に新しいNVIDIAドライバを入れてあるので、WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 361.00 is required for CUDA 8.0 functionality to work.
To install the driver using this installer, run the following command, replacingwith the name of this run file: sudo .run -silent -driver Logfile is /tmp/cuda_install_5632.log # pgaccelinfo CUDA Driver Version: 9000 NVRM version: NVIDIA UNIX x86_64 Kernel Module 384.59 Wed Jul 19 23:53:34 PDT 2017 Device Number: 0 Device Name: GeForce GTX 1070 Device Revision Number: 6.1 Global Memory Size: 8506769408 Number of Multiprocessors: 15 Concurrent Copy and Execution: Yes Total Constant Memory: 65536 Total Shared Memory per Block: 49152 Registers per Block: 65536 Warp Size: 32 Maximum Threads per Block: 1024 Maximum Block Dimensions: 1024, 1024, 64 Maximum Grid Dimensions: 2147483647 x 65535 x 65535 Maximum Memory Pitch: 2147483647B Texture Alignment: 512B Clock Rate: 1746 MHz Execution Timeout: No Integrated Device: No Can Map Host Memory: Yes Compute Mode: default Concurrent Kernels: Yes ECC Enabled: No Memory Clock Rate: 4004 MHz Memory Bus Width: 256 bits L2 Cache Size: 2097152 bytes Max Threads Per SMP: 2048 Async Engines: 2 Unified Addressing: Yes Managed Memory: Yes PGI Compiler Option: -ta=tesla:cc60となり、ちゃんと動くことがわかります。再起動しても、そのままでした。めでたしめでたし。
Ubuntu14.04で、CUIでのログイン設定
cudaをインストールするときに、
Installing the NVIDIA display driver... It appears that an X server is running. Please exit X before installation. If you're sure that X is not running, but are getting this error, please delete any X lock files in /tmp.
と怒られた。どうやら、先にXサーバが動いているので、とりあえず止めてからインストールしてくれということらしい。昔は、/etc/inittabというファイルにrunlevelという項目があって、そこを適当に編集(例えば「5」⇒「3」)に変更すれば、GUIからCUIに変更できた。でもそれが無くなっていて、別の方法が必要みたい。恐らくすぐに忘れるので、メモ。
1./etc/default/grubファイルを一部編集
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" ↓ GRUB_CMDLINE_LINUX_DEFAULT="quiet splash text"
2.grubの変更を反映
# update-grub
以上で、再起動すればCUIでログインできるようになるはず。