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ではダメです。変数の部分選択をやってくれません。
きっともっと賢い方法があると思うんだけど、調べるのもめんどくさいので、これでいいのです。