13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Colaboratory で CUDA Fortran

Last updated at Posted at 2018-10-31

#Google Colaboratory
我々の私生活を覗き見して金儲けをする悪徳商人 google が、乞食に無料で計算させてくださる Google Colaboratory ですが、Nvidia が無料で使わせてくださる CUDA Fortran をインストールすることで、Fortran から GPU が使える模様です。

本当は CUDA Fortran を Google Colab から直接 wget 出来ればいいのですが、やり方が分かりませんので、一度ローカルにダウンロードして、次に Google Drive に upload し、Google Colab と Google Drive を連結した後、Google Colab 側にコピーし、そこでインストールします。

##手順

  1. CUDA Fortran download :
    https://www.pgroup.com/products/community.htm

  2. pgilinux-2018-184-x86-64.tar.gz (現在の version)を各人の googledrive へ

  3. Google Drive と Colab の連結を以下のページを参考に Colab 上で行う。Colab では GPU 付のノートブックで作業する。

!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse
from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}

ここでトークンを聞かれるので、出たリンクを踏んだ先に表示される文字列をコピペする。

!mkdir -p drive
!google-drive-ocamlfuse drive

これで、Drive ディレクトリ下に Google Drive がリンクされる。

4.Google Drive から Colab 上に、pgilinux-2018-184-x86-64.tar.gz をコピーし、展開する。

!cp drive/pgilinux-2018-184-x86-64.tar.gz .
!mkdir PGI
!cd PGI
!tar zxvf ../pgilinux-2016-1710-x86_64.tar.gz

5.環境変数をセットしてインストール(手動インストールは可能だがメンドイ)。まず !bash でシェルを起動して、白枠の中に入力する。

!bash
root@60018d3878b3:/content/PGI# export PGI_SILENT="true"
root@60018d3878b3:/content/PGI# export PGI_ACCEPT_EULA="accept"
root@60018d3878b3:/content/PGI# ./install
Installing PGI version 18.4 into /opt/pgi
localrc has not changed
localrc has not changed
Installing module files for PGI linux86-64 version(s): 18.4 2018
Done
root@60018d3878b3:/content/PGI# exit

CELL を停止する。

6.PATH をセットできないので、絶対パスでコンパイラ起動する。

!/opt/pgi/linux86-64-llvm/18.4/bin/pgf90 -V

7.ソースファイル入力

以下のページの例でテスト
https://www.softek.co.jp/SPG/Pgi/TIPS/opt_cudaF.html

%%writefile sample.f90
module cudamod
   use cudafor
   implicit none

   contains
   !  kernel subprogram
   attributes(global) subroutine test1 (intdat,n)
      integer :: it, ib
      integer, value :: n
      integer, device :: intdat(n)
      !----------------------------
      it = threadidx%x
      ib = (blockidx%x-1) * 16
      intdat(it+ib) = it + ib
      !----------------------------
   end subroutine test1
end module cudamod

program cuda_device
   use cudafor
   use cudamod
   implicit none
   integer, parameter :: n=64
   integer :: int_h(n), ist
   ! デバイス側の配列データを allocatable で宣言
   integer, device, allocatable, dimension(:)  :: int_d

   int_h = 0
   allocate(int_d(n))
   
   ! カーネル(デバイスプログラム)を起動する
   call test1 <<<n/16,16>>> (int_d, n) !pass arguments
   ist = cudathreadsynchronize()  ! 同期ポイント

   ! デバイス側の配列データをホスト側に戻す
   int_h = int_d
   print *,'int_h = ',int_h
   deallocate(int_d)
end program cuda_device

8.コンパイル&実行

!/opt/pgi/linux86-64-llvm/18.4/bin/pgf90 -Mcuda sample.f90
!./a.out
 int_h =             1            2            3            4            5 
            6            7            8            9           10           11 
           12           13           14           15           16           17 
           18           19           20           21           22           23 
           24           25           26           27           28           29 
           30           31           32           33           34           35 
           36           37           38           39           40           41 
           42           43           44           45           46           47 
           48           49           50           51           52           53 
           54           55           56           57           58           59 
           60           61           62           63           64
13
4
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?