パスワードを忘れた? アカウント作成
508314 journal

t-nissieの日記: g95の最適化-O1でBLAS/LAPACKをコンパイルするとZHEEVが刺さる件

日記 by t-nissie
症状:g95 -O1でコンパイルしたBLAS/LAPACKのsubroutine ZHEEVをcallすると返ってこない。
   g95 -O0と最適化をかけないと大丈夫。g77とifortでは最適化をかけても問題ない。
解析:gdbで実行、C-cで停止、btでバックトレース。gdbは6.3以降を使用のこと。
原因:浮動小数点数演算の性質を解析するための subroutine DLAMC1 (dlamch.f) で無限ループ
   にはまっている。IntelのCPUでは倍精度浮動小数点数演算がレジスタ間では拡張精度で実行
   されるが、最適化によりこれが顕在化し、上記解析がうまくいっていなかった。
対処:次のとおり1行書き足す:
--- dlamch.f.ORIGINAL   2006-11-13 19:32:00.000000000 -0500
+++ dlamch.f    2006-12-10 20:49:53.762957640 -0500
@@ -230,6 +230,7 @@
*
          B = 1
          C = DLAMC3( A, B )
+         C = DLAMC3( C, 0.0d0 )
*
*+       WHILE( C.EQ.A )LOOP
    20    CONTINUE

蛇足:g95 -O0 -S add.f と g95 -O1 -S add.f とのadd.sを比較せよ:
! add.f -*-FORTRAN-*-
! Time-stamp: <2006-12-11 21:34:35 t-nissie>
! Author: t-nissie
!!
      program  opttest
      implicit none
      double precision a,b,c
      double precision add
      external add
      c = add(a,b)
      end program opttest

      double precision function add(a,b)
      implicit none
      double precision a,b
      add = a + b
      return
      end function add
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

※ただしPHPを除く -- あるAdmin

読み込み中...