FortranからCUDAを呼ぶその1:C言語をFortranから呼び出してみる
CUDAを呼び出す前に、C言語を呼び出してみます。題材とさせて貰うのは、GPGPU 勉強会 - CUDA Samplesの配列の足し算/C言語による例です。
vecadd.c→「vecadd_C.c, vecadd_main.f90」へと書き換えました。以下code例です。
vecadd_C.c
#include <stdio.h> // 配列の足し算を行う関数 void vecadd(float *x, float *y, float *z, int N) { int i; for(i = 0; i < N; i++) z[i] = x[i] + y[i]; } // Fortranから呼ばれる部分 void vecadd_(float *x, float *y, float *z, int *N) { vecadd(x, y, z, *N); }
vecadd_main.f90
program vecadd_main implicit none integer, parameter:: N=10 ! 配列のサイズを指定する integer:: i real(4):: x(N), y(N), z(N) ! 初期値の設定 do i=1,N x(i)=i-1 + 1.0 y(i)=i-1 + 2.0 enddo ! ここで足し算を行う(C言語の関数呼び出し) call vecadd(x, y, z, N); ! 出力 do i=1,N write(*,*)i, z(i) enddo end program vecadd_main
実行
% icc -c vecadd_C.c % ifort -o vecadd.exe vecadd_main.f90 vecadd_C.o % ./vecadd.exe
実行結果
1 3.000000 2 5.000000 3 7.000000 4 9.000000 5 11.00000 6 13.00000 7 15.00000 8 17.00000 9 19.00000 10 21.00000