CERN Program Library

CentOS 8.2.2004

  • Debugging the DESY cernlib
    • PAW のメモリの大きさを変えた時は、すべてをコンパイルする必要はなく、以下のコマンドで再コンパイル可能。何度もコンパイルし直していると、log ファイルのファイル名が長くなりすぎてエラーになるので、ログファイルも消しておく。
$ emacs -nw 2005/src/pawlib/paw/paw/pawbig.inc
$ touch 2005/src/pawlib/paw/programs/0pamain.F
$ rm -rf 2005/build/log/*
$ ./Install_cernlib_paw  
  • コンパイルオプション (例えば # define DefaultFCOptions) を 2005/src/config/linux-lp64.cf 内に追加したら、2005 ディレクトリ内の bin, build, lib ディレクトリをすべて消してすべてコンパイルし直しする。
  • NWPAW を 175000000 以上にして、二次元ヒストグラムを表示すると、以下のように SIGFPE で落ちるときがある。これは再現性がある。
PAW> hi/pl 6

Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation.

Backtrace for this error:
#0  0x7f7b6339216a
#1  0x7f7b633912d3
...
#32  0x7f7b627f96a2
#33  0x429edd
#34  0xffffffffffffffff
Floating point exception (core dumped)
  • gdb ~/cern/sandbox/cernlib_2005_minipacklib_paw/2005/bin/pawX11 として、 (dbg) run とすると、ighcxy_ () で落ちていることがわかる。コンパイル時に -g オプションをつけなくてもSIGであれば dbg がとらえてくれる。

Ubuntu 18.04 LTS

  • Ubuntu 18.04 に gfortran でコンパイルした cernlib をインストールした。ただ、うまく動いてないかも?
    1. はじめに一応 Ubuntu のバージョンをチェックしておく。
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
  1. imake コマンドを使えるようにし、gmake から make へのリンクを貼る
$ sudo apt-get install xutils-dev
$ sudo ln -s /usr/bin/make /usr/bin/gmake
  1. ディレクトリを作成
$ mkdir -p ~/cern/cernlib-2005-paw-128mb
$ cd ~/cern/cernlib-2005-paw-128mb
$ wget https://www-zeuthen.desy.de/linear_collider/cernlib/new/cernlib-2005-all-new.tgz
$ wget https://www-zeuthen.desy.de/linear_collider/cernlib/new/cernlib.2005.corr.2014.04.17.tgz
$ wget https://www-zeuthen.desy.de/linear_collider/cernlib/new/cernlib.2005.install.2014.04.17.tgz
  1. tar ファイルの解凍と上書き
$ tar zxvf cernlib-2005-all-new.tgz
$ mv cernlib.2005.corr.2014.04.17.tgz cernlib.2005.corr.tgz
$ tar zxvf cernlib.2005.install.2014.04.17.tgz
  1. 中身があるか一応チェック
$ ls
Install_cernlib*		Install_old_patchy4*
Install_cernlib_and_lapack*	README_cernlib
Install_cernlib_bin*				cernlib-2005-all-new.tgz
Install_cernlib_fixes*		cernlib.2005.corr.tgz
Install_cernlib_include*	cernlib.2005.install.2014.04.17.tgz
Install_cernlib_lib*		cernlib.fixed*
Install_cernlib_patchy*		cernlib_2005.tgz
Install_cernlib_src*		cernlib_env*
Install_cernlib_test*		lapack.tar.gz
Install_lapack*			patchy4.tar.gz
$ 
  1. src の展開
$ export CERN=$PWD
$ ./Install_cernlib_src
  1. PAW のメモリを増加
$ emacs ~/cern/cernlib-2005-paw-128mb/2005/src/pawlib/paw/paw/pawbig.inc
*** Edit Line 20 of the file as below ***
      PARAMETER (NWPAW=2000000)
             | | |
             V V V
* NWPAW was enlarged from 2000000 to 32000000 by Nobu on Jul. 4, 2018
*      PARAMETER (NWPAW=2000000)
      PARAMETER (NWPAW=32000000)
  1. sdf
$ emacs ~/cern/cernlib-2005-paw-128mb/2005/src/config/linux-lp64.cf
*** Edit Line 142 and 157 as below ***
...
# define DefaultCCOptions	-fPIC 
              | | |
              V V V
# define DefaultCCOptions	/* -fPIC c/o by Nobu on Aug. 24, 2019*/
...
#   define DefaultFCOptions	-fno-automatic -fno-second-underscore -fPIC
              | | |
              V V V
#   define DefaultFCOptions	-fno-automatic -fno-second-underscore /* -fPIC c/o by Nobu on Aug. 24, 2019*/
...
$ emacs ~/cern/cernlib-2005-paw-128mb/2005/src/config/Imake.cf
*** Edit Line 390 as below ***
...
#if __GNUC__ == 4
          | | |
          V V V
#if __GNUC__ == 7 
  1. Install_cernlib を書き換え
$ emacs ~/cern/cernlib-2005-paw-128mb/Install_cernlib
*** Edit Line 13-15, and 33 as below ***
...
echo "installing cernlib sources"

./Install_cernlib_src
              | | |
              V V V
#echo "installing cernlib sources"
#
#./Install_cernlib_src
...
[ "$GCCVSN" = "4" ]&&FC=gfortran
              | | |
              V V V
[ "$GCCVSN" = "7" ]&&FC=gfortran
  1. インストールの実行
$ ./Install_cernlib

CentOS 7

  • CentOS 7 に g77 と g77 でコンパイルされた cernlib をインストールした。
$ wget http://ftp.riken.jp/Linux/scientific/6.8/x86_64/os/Packages/compat-libf2c-34-3.4.6-19.el6.x86_64.rpm
$ wget http://ftp.riken.jp/Linux/scientific/6.8/x86_64/os/Packages/compat-gcc-34-3.4.6-19.el6.x86_64.rpm
$ wget http://ftp.riken.jp/Linux/scientific/6.8/x86_64/os/Packages/compat-gcc-34-g77-3.4.6-19.el6.x86_64.rpm
$ wget http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/Packages/c/cernlib-g77-2006-34.el6.x86_64.rpm
$ wget http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/Packages/c/cernlib-g77-devel-2006-34.el6.x86_64.rpm
$ wget http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/Packages/c/cernlib-g77-static-2006-34.el6.x86_64.rpm
$ wget http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/Packages/c/cernlib-g77-utils-2006-34.el6.x86_64.rpm
$ wget http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/Packages/p/paw-2006-34.el6.x86_64.rpm
$ su
# yum remove compat-libf2c-34
# yum localinstall compat-libf2c-34-3.4.6-19.el6.x86_64.rpm
# yum localinstall compat-gcc-34-3.4.6-19.el6.x86_64.rpm
# yum localinstall compat-gcc-34-g77-3.4.6-19.el6.x86_64.rpm
# yum localinstall cernlib-g77-2006-34.el6.x86_64.rpm
# yum localinstall cernlib-g77-devel-2006-34.el6.x86_64.rpm
# yum localinstall cernlib-g77-static-2006-34.el6.x86_64.rpm
# yum localinstall cernlib-g77-utils-2006-34.el6.x86_64.rpm
# yum localinstall paw-2006-34.el6.x86_64.rpm

順番をまちがえるとだめかも? インストール後、http://lnr.irb.hr/soya/physics/asdoc/chbook-example.c をダウンロードしてきてコンパイル。http://hep.fuw.edu.pl/misc/CERNLIB_from_C.html を参考に。C から cernlib を実行できた。

$ wget http://lnr.irb.hr/soya/physics/asdoc/chbook-example.c
$ gcc -c -Df2cFortran -I/usr/include/cernlib/2006/cfortran chbook-example.c
$ g77 chbook-example.o `cernlib-g77 packlib,mathlib` -o chbook-example
$ ./chbook-example
1 some random distribution                                                            PART  1 OF **
 
 HBOOK     ID =         1                                        DATE  24/12/2016            NO =     1
 
 
 CHANNELS 100   0                                                                                                  1   
           10   0        1         2         3         4         5         6         7         8         9         0   
            1   1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890   
...
...
 LOW-EDGE   1.  3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334
            0   9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999990
            0   6666666666666666666666667777777777777777777777777888888888888888888888888899999999999999999999999990
            0   0011222334445566677888990001122233444556667788899000112223344455666778889900011222334445566677888990
            0   4826048260482604826048260482604826048260482604826048260482604826048260482604826048260482604826048260
 
  * ENTRIES =     100000      * ALL CHANNELS = 0.0000E+00      * UNDERFLOW = 0.0000E+00      * OVERFLOW = 0.1000E+06
  * BIN WID = 0.4000E-03      * MEAN VALUE   = 0.0000E+00      * R . M . S = 0.0000E+00
$

Shared Library

* CERN program library はそもそも shared library (lib*.so) をサポートしないらしい(参考: https://userweb.jlab.org/~marki/cernlib_on_debian/cernlib/faq.html#33)? 公式ページでも、武内さんのバイナリでも (http://ribf.riken.jp/~takesato/research/as/ap6.html)、static library (lib*.a) しかない。

softwares/cernlib.txt · 最終更新: 2021/08/21 15:29 by kobayash
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0