ほんとのこと知りたいだけなのに。

夏休みはもうおわり。

clml.lapack にどんな命令があるのかを眺めてみる。

どんな命令があるのかを眺めてみる。

概要

LAPACK - Wikipedia を利用するためのパッケージの模様。

SciPy(Python用)でも利用しているようなので良い感じ。

どんな命令があるのかを眺めてみる。

エクスポートされているシンボルがLAPACKに存在するか。

エクスポートしているシンボルがindexに存在するか確認してみた。

想像以上に無いものが多い。

最後の一桁数値のものとかはほぼ全滅。

うーむ。。。

Symbol index
DBDSDC o
DBDSQR o
DDISNA o
DGEBAK o
DGEBAL o
DGEBD2 -
DGEBRD o
DGEEV o
DGEEVX o
DGEHD2 -
DGEHRD o
DGELQ2 -
DGELQF o
DGEQR2 -
DGEQRF o
DGESDD o
DGESV o
DGESVD o
DGETF2 -
DGETRF o
DGETRI o
DGETRS o
DHSEQR o
DLABAD -
DLABRD -
DLACON -
DLACPY -
DLADIV -
DLAED6 -
DLAEXC -
DLAHQR -
DLAHRD -
DLALN2 -
DLAMC1 -
DLAMC2 -
DLAMC3 -
DLAMC4 -
DLAMC5 -
DLAMCH o
DLAMRG -
DLANGE -
DLANHS -
DLANST -
DLANV2 -
DLAPY2 -
DLAQTR -
DLARF -
DLARFB -
DLARFG -
DLARFT -
DLARFX -
DLARTG -
DLAS2 -
DLASCL -
DLASD0 -
DLASD1 -
DLASD2 -
DLASD3 -
DLASD4 -
DLASD5 -
DLASD6 -
DLASD7 -
DLASD8 -
DLASDA -
DLASDQ -
DLASDT -
DLASET -
DLASQ1 -
DLASQ2 -
DLASQ3 -
DLASQ4 -
DLASQ5 -
DLASQ6 -
DLASR -
DLASRT -
DLASSQ -
DLASV2 o
DLASWP -
DLASY2 -
DORG2R -
DORGBR o
DORGHR o
DORGL2 -
DORGLQ o
DORGQR o
DORM2R o
DORMBR o
DORML2 -
DORMLQ o
DORMQR o
DTREVC o
DTREXC o
DTRSNA o
DTRTI2 -
DTRTRI o
IEEECK -
ILAENV o

二桁目="LA" のものがかなりないね。

LAPACK では命令の桁ごとに意味が割り当てられています。

こんな感じ。

フォーマット: XYYZZZ

カラム
X 数値データの型を表現
YY サブルーチンが採用するアルゴリズムが想定する行列の型を表現
ZZZ サブルーチンの処理内容を表現

YY のところの種類はマニュアルに定義されています。

しかしそこには LA なるものがありません。

うーんなんだろう。

BLASのほうなのかな。。。

おわり

なんか必要なものだけ実装している雰囲気。

にも LAPACK を利用しているライブラリはあります。

そちらの利用に変更していっても良いのかも。

CLML ってデカいしね。

Netlib とは

最近 CLML がらみで LAPACK や BLAS などを探っていると Netlib なるキーワードが頻繁に出てくる。

なので軽く調べてみた。

概要

ここが本家サイトっぽい。

Wikipedia にもありました。

Netlib

Netlib は、米国のAT&T、ベル研究所、テネシー大学、オークリッジ国立研究所が共同で管理するソフトウェア・リポジトリ (集積所) である。 Netlib には多数のプログラムとライブラリが集められている。 その多くは Fortran で書かれているが、そうでないものもある。

BLAS と LAPACK

BLASLAPACK のドキュメントもここにあるみたい。

ライブラリ

Software, papers, etc. -> Browse the Netlib repository -> Main Index of Software Libraries には以下のライブラリがあるとのこと。

沢山ありますね。f2cl はないけど f2c というのがあります。

まぁ超暇があったら調べて整理しても良いかなぁと。。。。思いませんね。。。

a fftpack machines random
access fishpack magic research
aicm fitpack maspar rib
alliant floppy math77 scalapack
amos fmm mds sched
ampl fn microscope scilib
anl-reports fortran minpack seispack
apollo fortran-m misc sequent
arpack fp mpfun sfmm
atlas gcv mpi slap
benchmark gmat mpicl slatec
bib gnu na-digest-html sminpack
bibnet go napack sodepack
bihar graphics netsolve sparse
blacs harwell news sparse-blas
blas hence numeralgo sparspak
blast hompack ode specfun
bmp hpf odepack spin
c hypercube odrpack srwn
c++ ieeecss opt stoeplitz
cephes ijsa p4 stringsearch
chammp image paragraph svdpack
cheney-kincaid intercom paranoia templates
clapack itpack parkbench tennessee
commercial jakef parmacs textbook
confdb java pascal toeplitz
conformal kincaid-cheney pdes toms
contin la-net performance tomspdf
control lanczos photo transform
crc lanz picl typesetting
cumulvs lapack pltmg uncon
ddsv lapack++ poly2 vanhuffel
dierckx lapack3e polyhedra vfftpack
diffpack lapack90 popi vfnlib
domino laso port voronoi
eispack lawson-hanson posix xblas
elefunt linalg pppack xmagic
env linpack presto xnetlib
etemplates list problem-set y12m
f2c lp pvm3
fdlibm lyapack quadpack

最近の動向?

2016/11/02 に NA Digest Wednesday, November 02, 2016 Volume 16 : Issue 41 なるレポートあり。

トピックも多いし活発なんかな。

Services provided at Netlib -> NA Digest archives を見ると 2016/10 には四つのレポートがある。

英語読めないので「ふ〜ん」ではあるが、今も活発なんかも。

おわり

やはり英語やな。

続・f2cl とは

先日のエントリでf2cl とは でも眺めてみたけどもう一度。

#:g1: f2clの紹介 の情報からイロイロ引用しながら整理する。

gitlab.common-lisp.net

概要

Fortran のプログラムを、Lispのプログラムへ変換するライブラリの様です。

FortranからCommon Lispへのトランスレータです。
#:g1: f2clの紹介 参照

変換?

以下のような hello.f を変換すると hello.lisp が出力される様です。

! hello.f
subroutine hello
print *,"おはよう日本"
end
;;; hello.lisp

;;; Compiled by f2cl version:
;;; ("f2cl1.l,v 95098eb54f13 2013/04/01 00:45:16 toy $" "f2cl2.l,v 95098eb54f13 2013/04/01 00:45:16 toy $" "f2cl3.l,v 96616d88fb7e 2008/02/22 22:19:34 rtoy $"
;;;  "f2cl4.l,v 96616d88fb7e 2008/02/22 22:19:34 rtoy $" "f2cl5.l,v 95098eb54f13 2013/04/01 00:45:16 toy $" "f2cl6.l,v 1d5cbacbb977 2008/08/24 00:56:27 rtoy $"
;;;  "macros.l,v 1409c1352feb 2013/03/24 20:44:50 toy $")

;;; Using Lisp SBCL 1.1.18
;;; 
;;; Options: ((:prune-labels nil) (:auto-save t) (:relaxed-array-decls t) (:coerce-assigns :as-needed) (:array-type ':array) (:array-slicing t)
;;;           (:declare-common nil) (:float-format single-float))

(in-package :f2cl-test)

(defun hello () (prog () (declare) (f2cl-lib:fformat t :list-directed "おはよう日本") end_label (return (values))))

(in-package #-gcl #:cl-user #+gcl "CL-USER")
#+#.(cl:if (cl:find-package '#:f2cl) '(and) '(or))
(eval-when (:load-toplevel :compile-toplevel :execute)
  (setf (gethash 'f2cl::hello f2cl::*f2cl-function-info*) (f2cl::make-f2cl-finfo :arg-types 'nil :return-values 'nil :calls 'nil)))

変換の方法

以下の様なコードで変換できるようです。

(defpackage :f2cl-test 
  (:use :cl)
  (:export :hello))

(f2cl:f2cl "/tmp/hello.f"
           :output-file "/tmp/hello.lisp"
           :package :f2cl-test)

ASDFシステム

quickdocs を参考に表にしてみる。

こう見てみると Fortran to Common Lisp のコンバータとそれプラス、フォートランのいくつかのライブラリを既に変換している雰囲気。

system description
f2cl F2CL: Fortran to Lisp converter
colnew F2CL conversion of COLNEW: Solution of boundary-value problems for ODEs
fishpack F2CL conversion of FISHPACK: Solution of separable elliptic PDEs
hompack F2CL conversion of HOMPACK: Solution of non-linear systems of equations by homotopy methods.
minpack F2CL conversion of MINPACK: Solutions to non-linear equations and least-squares problems
quadpack F2CL conversion of QUADPACK: Adaptive numerical integration
toms419 F2CL conversion of TOMS 419: Zeroes of a complex polynomial
toms717 F2CL conversion of TOMS 717: Max- and quasi-likelihood estimation in non-linear regressio
blas-complex BLAS routines for complex double-float matrices
blas-hompack
blas-package Package definition for BLAS
blas-real BLAS routines for real double-float matrices
lapack

変換しているフォートランのいくつかのライブラリ

それぞれのライブラリの概要を適当に調査。

以下の様子であるため日本語は変だとおもう。。。。

  • リンクになっているものの description はそのサイトをGoogle先生で直接翻訳したものをコピペ。
  • リンクになっていないものは、上のASDFシステムの description をGoogle先生で直接翻訳をコピペ。
name description
BLAS 難しく言うと基本的な線形演算のライブラリ、
簡単にいえば行列やベクトルの基本的な計算をやってくれる関数群です。
LAPACK 高性能線形代数パッケージです。
連立一次方程式、最少二乗問題、固有値問題、特異値問題を解くためのサブルーチンが含まれています。
COLNEW 常微分方程式のための境界値問題の解法ライブラリ
FISHPACK 円型偏微分方程式の解のための効率的なFORTRANサブプログラム
HOMPACK ホモトピーの方法により、非線形方程式系を解くためのサブルーチン
MINPACK 非線形方程式のシステムを解くライブラリであり、
または線形または非線形方程式のセットの残余の最小二乗最小化を行います。
QUADPACK 数値積分を使用して積分を推定するライブラリ
TOMS 419 複雑な多項式の零点ライブラリ
TOMS 717 非線形回帰におけるMAX-と準尤推定ライブラリ

恐らく、上記のFortranのライブラリが変換されたファイル/関数がそれぞれのASDFシステムに入っているのだろう。と認識。

おわり

なんとなく概要が理解できた気になったので終り。

今関係するのは BLAS, LAPACK の二つなので次回はそれぞれのパッケージを眺めてみるか。

まずは BLAS かな。