2016-03-31 6 views
1

を機能呼び出すと、簡単なプログラムはBLASはここ

PROGRAM MAIN 
implicit none 
integer, PARAMETER :: N=10 
real*8 :: A(N) 
real*8 :: x=0.1D0 
integer :: i=1 
Do i=1,N 
A(i)=i 
end do 
call dscal(N,x, A, 1) 

x=dasum(N,A,1) 

END PROGRAM MAIN 

である私は、サブルーチンdscalを呼び出して何の問題もありませんが、私は機能dasum

ための次のエラーを取得する

gfortran test.f90 -o test -O1 -I /usr/include/ -L /usr/lib -lblas 

コマンドでコンパイル

test.f90:15.2: 

x=dasum(N,A,1) 
1 
Error: Function 'dasum' at (1) has no IMPLICIT type 

BLAS機能を定義するために特定のファイルを含める必要がありますか?

+0

どのBLAS実装を使用していますか?ベンダーは、手続きのためにモジュールにインタフェースを提供することが多い。 – francescalus

+0

@francescalus 'libblas.so.3'は、コンパイル時に実行可能ファイルにリンクされているライブラリです。 – Tarek

答えて

2

(あなたが優雅な感じている場合は、必要に応じてexternal、および)関数については、手動で戻り値を指定する必要があります。

real*8,external :: dasum 

また、real*8を使用しないでください。それは標準準拠ではなく、移植性がなく、非常に混乱します。代わりにkindパラメータを使用して精度を定義します。たとえば、

real(kind=kind(1.d0)) 

などです。 ISO_Fortran_env moduleを使用できる場合は、定数REAL32REAL64を使用してください。

+0

私が使用するすべてのBLAS/LAPACK関数の戻り値を手動で指定する必要がありますか?これらの定義を含むファイルはありませんか? – Tarek

+0

原則として、はい。しかし、実装の中には、その目的のために使用できるモジュールを提供するものがあります。 MKLは、[インクルードファイル](https://software.intel.com/de-de/node/468384#3220B6B9-8A35-42E6-888D-8832E65C2EDB)を提供しています。 –