2016-05-18 7 views
1

bl数学ライブラリは、i32lp64モード(つまり整数* 4の整数)またはilp64モード(整数* 8または8バイトの整数)で配布されます。BLASのILPモードの検出

短いFortranルーチンでこれらの2つのBLASモード(i32lp64とilp64)を区別し、segfaultクラッシュを与えないでください。

+0

質問を具体的にする必要があります。どのように区別する必要がありますか? – ztik

+0

実行時にテストするのは遅すぎるようです。デフォルトの整数サイズは、異なるコンパイラでは多すぎるものや異なるものに影響を与える可能性があります。 int32とint64のどちらを渡すべきかだけではありません。例の配列記述子は、内部で整数またはC intを使用していますか? –

答えて

0

まあ、

あなたはILP64のBLASライブラリに対してこのプログラムをリンクする際に、我々はプログラムのクラッシュを取得します。 i32lp64の場合、クラッシュは発生しません。

これは、ilp64とi32lp64の違いです。それほどエレガントではありませんが、実行可能です。

program test 
integer*8, parameter :: inc = +1_8 + 2_8**33_8 
real*8 :: a(3),d 
integer :: ii 
a(1)=1.0d0; a(2)=1.0d0;a(3)=1.0d0 
d=ddot(3,a,inc,a,inc) 
print *,"inc=",inc 
print *,"d=",d 
end program 
+0

あなたはbigendian CPUで試しましたか? –