ラベル 数値計算 の投稿を表示しています。 すべての投稿を表示
ラベル 数値計算 の投稿を表示しています。 すべての投稿を表示

2011/04/11

【BLAS】GotoBLAS2をMacBook Air (late2010)でビルド

最近,ブログの更新が多いです.良いのか悪いのか.

さて,今日はBLASの1つである,GotoBLAS2をMacBook Air late 2010(2.13GHz Intel Core 2 Duo, penryn?)上でmakeします.以下はその記録.なぜかは聞かないでください.研究で必要なんです.Xcodeが入っている状態を仮定します.


目的:
Macbook air (late2010)に最適化したGotoBLAS2の共有ライブラリ(.dylib)をつくる.

インストール方法:
下記のページ(University of Texas Austin)

GotoBLAS2|Texas Advanced Computing Center

からGotoBLAS2をダウンロード→解凍→makeでOKとReadmeには書いてあります.これだけ!

が,まぁそんな上手く行きません.ちょこっと変更が必要.

やること5つ:

1.Makefile.ruleのソースを変更

# If you need to synchronize FP CSR between threads (for x86/x86_64 only).
CONSISTENT_FPCSR = 1

この部分のコメントを外す.(精度保証付き数値計算をしたい人向け)

2.gfortranが64bit対応してないとダメ(version 4.6.0から?)
MacはOSがほぼ64bitで動いているので,コンパイラが対応してないとエラーになります.ターミナルで

gfortran -v

とした時の文を注目,

Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-apple-darwin10.4.0/4.6.0/lto-wrapper
Target: x86_64-apple-darwin10.4.0
Configured with: ../gcc-4.6-20101106/configure --enable-languages=fortran
Thread model: posix
gcc version 4.6.0 20101106 (experimental) (GCC)

このversionが大切.4.6くらいあれば行けるハズ.

3.wget をcurlに変更
Makefile内のlapackの部分(以下)を

lapack-3.1.1.tgz :
ifndef NOFORTRAN
#       -wget http://www.netlib.org/lapack/lapack-3.1.1.tgz
        -curl -0 http://www.netlib.org/lapack/lapack-3.1.1.tgz
endif

とcurl文を追加してwgetをコメントアウト.

4.perlのスクリプトf_checkのなかで

$flags =~ /^\-l/ → $flags =~ /^\-l./

と.(ピリオド)をつける.

5.libgoto2_****.dylibというダイナミックリンクが出来ていれば成功!と思いきや・・・exportsというフォルダの中にlibgoto2_penrynp-r1.13.dylib出来ています.キター!

これでGotoBLASをMatlabに連携させて数値計算が出来るようになります.ちなみにGotoBLASは世界で一番速いBLASといわれていて,制作者が後藤さんだからGotoBLASです.スパコンの世界では超有名人です.

2011/03/10

【Matlab】Sandy Bridge MacBook Proで計算時間比較

Sandy Bridge来た!研究室に.なんかいろいろ速いらしい!?ということで計算速度を比較.数値計算した例がWebであんまり見つからなかったので,シャレでやってみます.購入に迷っている人(研究者?)の参考になれば.

対象:
MacBook Pro 13'' (Early 2011, Core i7 2,7GHz)と
現在のメインマシンMacBook Air 13'' (Late 2008, Core2Duo 1.86GHz).

方法:
Matlabを使って連立一次方程式を解いてその実行時間,演算速度を概算したものをプロット.一応2〜1000次元まで計算.

Air (Core2Duo,2コア):
【実行時間】

【演算速度】


Pro (Sandy Bridge,2コア):
【実行時間】
【演算速度】
何を言っているかが分からない人は華麗にスルーしてください.数値計算です.分かったことは5.4GHzの理論値(2コア×2.7GHz)に対して割とMatlab頑張って近づいてます.もう少し大きな計算をすれば5GHzくらい出るかもしれない.感じとしては「Airの2倍速い」ということ.ただし,本体が約2倍重い・・・

しかし,AVXとかいう演算をいっぺんにやってくれるという命令には対応していない模様.というかMatlabが対応していないのか.来年頃には対応して速くなっているのでしょうかね?まとめると
  • 5GHzくらい出る
  • Airよりも2倍速い!
  • AVXはまだ未対応
使っている感じではAirに比べて,いろいろ速いし,電池が持つのでいいと思います.HDDなのがちょっとね.まぁ贅沢言うなという話.新型Airとも比べてみたい.あとはこの重さにどれだけ耐えられるかかな?

2010/08/22

【Scilab】Scilabでstartup設定方法

今日はもう一つ投稿!

Scilabは無料で使えるMatlabというMatlabクローンとしての一面があります.しかしScilabの初期ディレクトリは/(Mac版,Unix版も?)に設定されているので,そこから自分のwork spaceまで移動するのは面倒.
さらにtoolboxを開発したとして,そのプログラムをいちいちディレクトリ内でexecしなければならず,Matlabでいうpathの設定ができません.

今回はScilabを起動した時に自動で自分の環境のpathを設定する方法を紹介します.

方針:
・簡単,シンプル!
・起動時に自分の環境を自動でexec
・環境:Mac OS X 10.5.8(おそらくSnow leopardも一緒,Windowsもディレクトリのパスを変えれば方法は一緒)

設定方法:
Scilabは起動時にSCIHOMEというディレクトリの中を見ています.そこにscilab.iniというファイルを作成するとその内容を起動時に自動的にexecしてくれます.それだけ.

以下ではMac版で話をすすめます.
ScilabのコマンドラインにSCIHOMEと入れると

-->SCIHOME
SCIHOME  =

/Users/takitoshi/.Scilab/scilab-5.2.2 


と返してきます.このディレクトリを参照しているとのこと.この.Scilabは隠しディレクトリなので通常のFinderでは見れませんが,見れるようにするかterminalなどから行くことができます.

scilab-5.2.2ディレクトリ内にscilab.iniを作成.ファイル内容に自分の環境の初期設定を書いておけば,Scilab起動時に自分の環境がexecされるというワケ.

例:
scilab.ini内に

cd /Users/takitoshi/scilab_work
disp('Start Scilab!')
disp('/Users/takitoshi/scilab_work/')

と書いておけば,起動時に

___________________________________________        
               scilab-5.2.2

         Consortium Scilab (DIGITEO)
       Copyright (c) 1989-2010 (INRIA)
       Copyright (c) 1989-2007 (ENPC)
___________________________________________        


Startup execution:
loading initial environment

Start Scilab !   

/Users/takitoshi/scilab_work/   

-->pwd
ans  =

/Users/takitoshi/scilab_work   

これで自分のwork spaceに移動させることができます.scilab.ini内で自分の作成した関数をexecすればそれがデフォルトで使えるようになるので,実質pathの設定が出来ます.


注意:
実はコマンドラインでclearを実行してしまうと,全てのexecした関数も消えてしまうので,もう一度execする必要があります!不便・・・まぁもう一度Scilabを立ち上げればいいですけど.

参考:Scilab manual 5.2.2 startup

2008/02/07

【Java】 BigDecimal

【大整数】
*多数桁処理のために「大十進数(BigDecimal)」のクラスを使う.

使用パッケージ宣言:
import java.math.BigDecimal;


定義(BigDecimal):
「大十進数」はオブジェクトとして定義する必要があるので以下のように定義する.
BigDecimal b = new BigDecimal(
String);
Stringには文字列を入れる.
*また,BigDecimalの配列は他の配列の宣言と同じである.
BigDecimal [] b = new BigDecimal[30];
*これでBigDecimal型の配列,b[30]を宣言したことになる.

演算(BigDecimal):
オブジェクトとして定義した「大十進数」はオブジェクトの演算メソッドを用いて演算を行う.主な演算メソッドを次にあげる.

返り値型種類記述
BigDecimal加法:a + ba.add(b);
BigDecimal減法:a - ba.subtract(b);
BigDecimal乗法:a * ba.multiply(b);
BigDecimal除法:a / ba.divide(b);
BigDecimal剰余:a % ba.remainder(b);
BigDecimalべき乗:a ^ ba.pow(int b);
BigDecimal絶対値:|a|a.abs();
BigDecimal符号反転:a = - aa.negate();
BigDecimal最小値:min aa.min();
BigDecimal最大値:max aa.max();
BigDecimal合同:a ≡ c (mod b)c = a.mod(b);
BigDecimalべき乗の合同:a ^ m ≡ c (mod b)c = a.modPow(m, b);
BigDecimal逆元(mod b):a ^ -1 (mod b)a.modInverse(b);
BigDecimal最大公約数(gcd(a, b)):gcd(a, b)a.gcd(b);
boolean等号:a == ba.equals(b);
int大小比較:a <>a.compareTo(b);

*表中のa, b, cは特に断りがない限り,BigDecimal型.
*「equals」はboolean型のメソッド.オブジェクトの同一性をチェック
*「compareTo」はint型のメソッドで,「a < a =" b」の場合0,「a"> b」の場合1となる.


出力(BigDecimal):
*大十進数はオブジェクト型のデータなので,出力の際はデータ変換で文字列型にしてから出力する.
System.out.println("BigDecimal b = "+b.toString());


*大十進数の文字列化にはDecimalFormatクラスが向いている.DecimalFormatクラスを使用することで,小数点の桁数,カンマをつけることができる.


例:
使用パッケージ宣言:
import java.text.DecimalFormat;

フォーマットの用意:
String format = "0.00000000000000000000";
DecimalFormat dF = new DecimalFormat( format );

BigDecimalを宣言:
BigDecimal b1 = new BigDecimal( "4.1" );
BigDecimal b2 = new BigDecimal( "8.2" );

加法を実行:
BigDecimal b = b1.add( b2 );

結果の表示:
System.out.println( dF.format( b ) );
// 12.30000000000000000000


このように小数点以下の桁数を指定することができる.

2007/11/22

【Java】 BigInteger 追記01

【大整数】
*多数桁処理のために「大整数(BigInteger)」のクラスを使う.

使用パッケージ宣言:
import java.math.BigInteger;


定義(BigInteger):
「大整数」はオブジェクトとして定義する必要があるので以下のように定義する.


BigInteger b = new BigInteger(String);


Stringには文字列を入れる.
*また,BigIntegerの配列は他の配列の宣言と同じである.

BigInteger [] b = new BigInteger[30];

*これでBigInteger型の配列,b[30]を宣言したことになる.


演算(BigInteger):
オブジェクトとして定義した「大整数」はオブジェクトの演算メソッドを用いて演算を行う.主な演算メソッドを次にあげる.

返り値型種類記述
BigInteger加法:a + ba.add(b);
BigInteger減法:a - ba.subtract(b);
BigInteger乗法:a * ba.multiply(b);
BigInteger除法:a / ba.divide(b);
BigInteger剰余:a % ba.remainder(b);
BigIntegerべき乗:a ^ ba.pow(int b);
BigInteger絶対値:aa.abs();
BigInteger符号反転:a = - aa.negate();
BigInteger最小値:min aa.min();
BigInteger最大値:max aa.max();
BigInteger合同:a ≡ c (mod b)c = a.mod(b);
BigIntegerべき乗の合同:a ^ m ≡ c (mod b)c = a.modPow(m, b);
BigInteger逆元(mod b):a ^ -1 (mod b)a.modInverse(b);
BigInteger最大公約数(gcd(a, b)):gcd(a, b)a.gcd(b);
boolean等号:a == ba.equals(b);
int大小比較:a <>a.compareTo(b);


*表中のa, b, cは特に断りがない限り,BigInteger型.
*「equals」はboolean型のメソッド.オブジェクトの同一性をチェック
*「compareTo」はint型のメソッドで,「a < a =" b」の場合0,「a"> b」の場合1となる.


出力(BigInteger):
*大整数はオブジェクト型のデータなので,出力の際はデータ変換で文字列型にしてから出力する.
System.out.println("BigInteger b = "+b.toString());

2007/11/16

【Java】 BigInteger

【大整数】
*多数桁処理のために「大整数(BigInteger)」のクラスを使う.


使用パッケージ宣言:
import java.math.BigInteger;


定義(BigInteger):
「大整数」はオブジェクトとして定義する必要があるので以下のように定義する.

BigInteger b = new BigInteger(String);

Stringには文字列型データを入れる.
*また,BigIntegerの配列は他の配列の宣言と同じである.

BigInteger [] b = new BigInteger[30];

*これでBigInteger型の配列,b[30]を宣言したことになる.



演算(BigInteger):
オブジェクトとして定義した「大整数」はオブジェクトの演算メソッドを用いて演算を行う.主な演算メソッドを次にあげる.

返り値種類記述
BigInteger加法:a + ba.add(b);
BigInteger減法:a - ba.subtract(b);
BigInteger乗法:a * ba.multiply(b);
BigInteger除法:a / ba.divide(b);
BigInteger剰余:a % ba.remainder(b);
BigIntegerべき乗:a ^ ba.pow(int b);
BigInteger絶対値:aa.abs();
BigInteger符号反転:a = - aa.negate();
BigInteger最小値:min aa.min();
BigInteger最大値:max aa.max();
BigInteger合同:a ≡ c (mod b)c = a.mod(b);
BigIntegerべき乗の合同:a ^ m ≡ c (mod b)c = a.modPow(m, b);
BigInteger逆元(mod b):a ^ -1 (mod b)a.modInverse(b);
BigInteger最大公約数(gcd(a, b)):gcd(a, b)a.gcd(b);


*表中のa, b, cは特に断りがない限り,BigInteger型.


出力(BigInteger):
*大整数はオブジェクト型のデータなので,出力の際はデータ変換で文字列型にしてから出力する.

System.out.println("BigInteger b = "+b.toString());

2007/04/26

NAS2007予稿執筆中

5/11提出期限のNAS2007予稿を執筆中。
自身初の試みで、少し緊張しています。今日はその書き出しを公開。


擬似ニュートン法による代数平方根の計算
Computation of algebraic square root by Quasi-Newton’s method

1. はじめに
RSA暗号は多数桁数での因数分解の困難性を利用している。現在、1024ビットのRSA暗号の解読はスーパーコンで数千年かかると言われており、解読は困難である。多数桁数の因数分解、とくにRSA暗号解読に使用される因数分解には篩系の解法を用いる。篩系の解法としてMPQS(複数多項式2次篩法)、GNFS(一般数体篩法)、MBPS(多重基底多項式篩法)がある。さらにMBPS(多重基底多項式篩法)にはDBPS(2重基底多項式篩法)、TBPS(3重基底多項式篩法)の2種類がある。ここでは特にGNFS(一般数体篩法)、TBPS(3重基底多項式篩法)で行われる代数平方根の計算について述べる。一般的に代数平方根の計算には、中国剰余定理系の解法が用いられているが、我々は擬似ニュートン法を使用して非線形方程式を反復計算し求める解法を検討している。

擬似ニュートン法について学んでいきます。
なるべくこのブログにもアップしていく予定です。

じゃまた。