2012/12/12

GNU Screenの便利な使い方

仮想端末のscreenがこんなふうに使えるって知った。

screen -S Aで立ち上げ
screen でもう一個仮想端末を立ち上げる。
screen -X split -v で仮面分割後
Crtl + A  TAB で新しく立ち上げた方に移動
Ctrl + A Shift + "で仮想端末を選択して上げる

でこんなふうに使える

コード書くときすごく便利。

2012/12/02

可視化のマシンがほしぃ

AMD のA-serisを真剣に検討中。結構描写性能もいいみたいだけどparaviewとかの業務用のやつのベンチも載せてくだされ。

2012/11/19

頑張れAMD

AMDのニュースは最近明るいのきかない。


お安いのが多いのでAMDは結構好きなのだけども。 パソコンメーカがあんまり魅力的な商品を作っていない。  GPUではIntelよりも 優れた技術を持っているのに full HD でるノート型のPCを発売しているメーカーがない。

15.6型ぐらいでお安いのをどこか出してくれないだろうか。

今, lenovoの安いのを買おうかちょっと迷ってる、でも1366x768なのが残念。どこかのメーカーでAMDの製品にスイッチしてさらにお安くとかしてくれないだろうか。そういえば一時期Appleにそんな噂が...。 AMDと運命を共にするだろうけど

2012/11/15

CUDAの罠? ホスト側のメモリーを静的に取るな!

以下のコードを

nvcc -D DYNAMIC -arch=sm_20 vect_add.cu 
nvcc -D STATIC -arch=sm_20 vect_add.cu

でコンパイルして実行してみると面白いことがわかる。
CUDAではCPU側のメモリーを動的に取る必要があるようだ。もし指定いない場合デバイスからホスト側にメモリーのコピー時にエラーコード11を出し止まる。

科学計算系のコードは静的に取ることが多いのでいちいち書き直すのめんどくさい。


GB
Here is a simple vector addition CUDA code. The difference is memory allocation one is static and one is dynamic. Test the code compiling by follwing options.

nvcc -D DYNAMIC -arch=sm_20 vect_add.cu 
nvcc -D STATIC -arch=sm_20 vect_add.cu

For static version, memory copy from device to host should failed with error code 11. I'm unsure why this happened. I felt it's a bit inconvenient because most scientific codes allocate memory statically.

================================================
  vect_add.cu
================================================

#include<iostream>
#include<cuda.h>

#define N 4

//--------------------------------------------
__global__ void device_hello(
//--------------------------------------------
    const double *a,
    const double *b,
    double *c
){
    size_t i = threadIdx.x + blockIdx.x * blockDim.x;
    c[i] = a[i] + b[i];
}

//--------------------------------------------
int main(){
//--------------------------------------------
    size_t i;
    size_t n = N;
    double *a,*b,*c;
    #ifdef DYNAMIC
    double *a_cuda, *b_cuda, *c_cuda;
    #endif
    #ifdef STATIC
    double a_cuda[N], b_cuda[N], c_cuda[N];
    #endif
    cudaError_t stat;

    #ifdef DYNAMIC
    a = (double*)malloc(sizeof(double)*n);
    b = (double*)malloc(sizeof(double)*n);
    c = (double*)malloc(sizeof(double)*n);
    #endif

    for( i=0; i<n; i++){
        a[i] = 1.0;
        b[i] = i;
        c[i] = 0.0;
    }

    cudaMalloc( (void**)&a_cuda, sizeof(double)*n );
    cudaMalloc( (void**)&b_cuda, sizeof(double)*n );
    cudaMalloc( (void**)&c_cuda, sizeof(double)*n );

    cudaMemcpy( &a_cuda[0], a, sizeof(double)*n, cudaMemcpyHostToDevice );
    cudaMemcpy( &b_cuda[0], b, sizeof(double)*n, cudaMemcpyHostToDevice );
    cudaMemcpy( &c_cuda[0], c, sizeof(double)*n, cudaMemcpyHostToDevice );

    device_hello<<<n,1>>>( a_cuda, b_cuda, c_cuda );

    stat = cudaMemcpy( &c[0], c_cuda, sizeof(double)*n, cudaMemcpyDeviceToHost );
    std::cout << "stat " << stat << std::endl;

    //for( i=0; i<n; i++){
    //    std::cout << c[i] << std::endl;
    //}

    cudaFree( a_cuda );
    cudaFree( b_cuda );
    cudaFree( c_cuda );
    #ifdef DYNAMIC
    free( a );
    free( b );
    free( c );
    #endif
return 0;}

2012/11/13

clang のperformance

 himeno benchで結構出てる。倍精度はGCCと変わらない?

http://openbenchmarking.org/result/1203235-SU-GCC47LLVM92

2012/11/07

Pthread vs OpenMPの性能比較してみた (科学計算)

ふと思いついてPthreadとOpenMPの性能の比較をしてみた。 blasを使った倍精度の内積計算。

AMD: C-50 (2core)
gcc: 4.7.0 (gmp-5.0.5)

real:
     serial 1.079 s
     Omp   0.830 s ( 2 thread )
     pthread 1.225 s ( 2 thread )

ネットブックのじゃ、スレッド呼出のオーバヘッドの方が大きいのか? pthreadがなんだか遅い。 pthreadだけ作業用にglobalでとってあげたりしたんだけどあんまり早くならない。 pthread_joinが結構食ってる感じだ。外すと他と同じぐらいになるのだけれど答えが合わない。 内積計算はメモリーアクセスの問題の方が大きいかも

研究室のクラスタでやったらXeon( sandy世代 )
 
     serial 0.19 s
     Omp   0.001 s ( 2 thread )
     pthread 0.001 s ( 2 thread )

もっと正確に測んなきゃだめですね。 とにかく順当に早くなっていました。Pthreadのほうが欠かなきゃいけない量が多いのでOpenMPですね。

EN
I just wondered which is faster OpenMP or Pthread. Here is my measurement.
The test code is illustrated below. It's a simple double precision dot product using cblas written in C. The compiler used was gcc-4.7.0. I initially tested on my Netbook with AMD C50 APU and got follwing result

real:
     serial 1.079 s
     Omp   0.830 s ( 2 thread )
     pthread 1.225 s ( 2 thread )

I didn't got what I expected somehow pthread was slower than serial ??? For validation, I also tested on my Uni's Cluster, which has sandy bridge generation Xeon, and got follwing result.

     serial 0.19 s
     Omp   0.001 s ( 2 thread )
     pthread 0.001 s ( 2 thread )

Looks OK now though more accurate measurement is required. Pthread looks slightly slower for me, yet pthread required more longer codes. Then I'm for OpenMP.

以下テストコード 
( serial, pthread and OpenMP performance comparison by Cblas dot product)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<cblas.h>
#include<pthread.h>

#include<omp.h>

#define N 165535
//#define N 8

double *x_global;
double *y_global;
double tmp_global;

//--------------------------------------------------------
void init(
//--------------------------------------------------------
    double *x,
    double *y
){
    size_t i;
    for( i=0; i<N; i++ ){
        x[i] = i;
        y[i] = i;
    }
}

//--------------------------------------------------------
void serial_dot(
//--------------------------------------------------------
    double *x,
    double *y
){
    cblas_ddot( N, x, 1, y, 1 );   
    #ifdef SERIAL
    printf( " %lf\n", cblas_ddot( N, x, 1, y, 1 ) );   
    #endif
}

//--------------------------------------------------------
void omp_dot(
//--------------------------------------------------------
    double *x,
    double *y
){
    size_t i;
    const size_t nprocs = omp_get_num_procs();
    double tmp;

    omp_set_num_threads(nprocs);

    tmp = 0.0;   
    #pragma omp parallel for
    for( i=0; i<nprocs; i++ ){
        tmp += cblas_ddot( N/2, &x[i*N/2], 1, &y[i*N/2], 1 );
    }
    #ifdef OMP
    printf("%lf\n",tmp );
    #endif
}

//--------------------------------------------------------
void *pddot( void *arg ){
//--------------------------------------------------------
    size_t i;

    i = (size_t)arg;
    #ifdef PTHREAD
    printf("\tthread[%lu]\n",i);
    #endif

    tmp_global += cblas_ddot( N/2, &x_global[i*N/2], 1, &y_global[i*N/2], 1 );
}

//--------------------------------------------------------
void pthread_dot(
//--------------------------------------------------------
    pthread_t threads[2],
    double *x,
    double *y
){
    size_t i;

    tmp_global = 0;
    for( i=0; i<2; i++ ){
        pthread_create( &threads[i], NULL, pddot, (void*)i );
    }
    for( i=0; i<2; i++ ){
        pthread_join( threads[i], NULL );
    }
    #ifdef PTHREAD
    printf("%lf\n",tmp_global);
    #endif
}

//--------------------------------------------------------
int main(){
//--------------------------------------------------------
   
    int i;   
    pthread_t threads[2];
    double *x, *y;
    x = (double*)malloc(sizeof(double)*N);   
    y = (double*)malloc(sizeof(double)*N);   

    x_global = (double*)malloc(sizeof(double)*N);
    y_global = (double*)malloc(sizeof(double)*N);

    init( x, y );

    memcpy( x_global, x, sizeof(double)*N );
    memcpy( y_global, y, sizeof(double)*N );
   
    for( i=0; i<1000; i++ ){
        //serial_dot( x, y );
        //omp_dot( x, y );
        pthread_dot( threads, x, y );
    }

return 0;}

2012/11/01

並列VTK PVTUのサンプル ( paralell VTU )

並列VTK形式 (VTU形式)

xml形式のVTUデータは並列用にも出力できます。小さいのを手で書くのは簡単なので作ってみた。

以下に示すように

  parallel.pvtu
  material1.vtu
  material2.vtu

のファイルを同じディレクトリに用意する。 あとはparaviewでparallel.pvtuを開いてあげれば表示できる。



------------------------------------------------------------------------------------------------------------------------------
paralell.pvtu
------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0"?>

<VTKFile type="PUnstructuredGrid" version="0.1" byte_order="LittleEndian">
<PUnstructuredGrid GhostLevel="0">
<PPoints>
  <PDataArray type="Float32" Name="Position" NumberOfComponents="3"/>
</PPoints>
<PCells>
  <PDataArray type="Int32" Name="connectivity" NumberOfComponents="1"/>
  <PDataArray type="Int32" Name="offsets"      NumberOfComponents="1"/>
  <PDataArray type="UInt8" Name="types"        NumberOfComponents="1"/>
</PCells>
<PCellData Scalars="Material">
    <PDataArray type="Int32" Name="Material" NumberOfComponents="1"/>   
</PCellData>
<Piece Source="material1.vtu"/>
<Piece Source="material2.vtu"/>
</PUnstructuredGrid>
</VTKFile>

------------------------------------------------------------------------------------------------------------------------------
material1.vtu
------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0"?>

<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian">
<UnstructuredGrid>
<Piece NumberOfPoints="3" NumberOfCells="1">
<Points>
  <DataArray type="Float32" Name="Position" NumberOfComponents="3" format="ascii">
    0.0    0.0    0.0
    1.0    1.0    0.0
    0.0    1.0    0.0
  </DataArray>
</Points>
<Cells>
  <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii">
    0    1    2       
  </DataArray>
  <DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii">
    3   
  </DataArray>
  <DataArray type="UInt8"  Name="types" NumberOfComponents="1" format="ascii">
    5
  </DataArray>
</Cells>
<CellData Scalars="Material">
  <DataArray type="Int32" Name="Material" NumberOfComponents="1" format="ascii">
    1   
  </DataArray>
</CellData>
</Piece>
</UnstructuredGrid>
</VTKFile>

------------------------------------------------------------------------------------------------------------------------------
material2.vtu

------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0"?>

<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian">
<UnstructuredGrid>
<Piece NumberOfPoints="3" NumberOfCells="1">
<Points>
  <DataArray type="Float32" Name="Position" NumberOfComponents="3" format="ascii">
    0.0    0    0
    1.0    0.0    0
    1.0    1.0    0
  </DataArray>
</Points>
<Cells>
  <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii">
    0    1    2   
  </DataArray>
  <DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii">
    3
  </DataArray>
  <DataArray type="UInt8"  Name="types" NumberOfComponents="1" format="ascii">
    5
  </DataArray>
</Cells>
<CellData Scalars="Material">
  <DataArray type="Int32" Name="Material" NumberOfComponents="1" format="ascii">
    2   
  </DataArray>
</CellData>
</Piece>
</UnstructuredGrid>
</VTKFile>





こんなのが出るはず。青いのがmateral1で赤いのが2。

2012/10/29

FreeBSD

Sun のワークステーションを復活させ使用しようとしているのだが、sicentific linux のカーネルにバグあるらしく一定時間毎にerror messageがで続ける。

ECC memoryを使用した場合のみ起こるようでkernelのバージョンを上げる必要がある。あんまり時間もないので他のOSに乗り換えることにした。

ここはlinuxではなくBSDにしてみようと(突然)思っていろいろ調べてみた。NetBSDは前に使ったことがあって最初はそれにしようかと思ったのだけれども、調べてみるとFreeBSDがdesktop環境としてはいいらしい。じゃ使ってみるべ...ここから悪夢が始まった。

fdiskでHDDを初期化してインストールを始めたのだが、どうもうまくいかない。なぜか途中で止まってしまう。しかも、いつも同じところで止まらないので、原因も探れない。

HDDのpartitionをdefaultの設定でminimum installしたところどうにかでできたが、起動しない。困った。linuxのディスクでrescueモードで入ってみたがboot loderはOKなようだ。


こんなにインストールが難しいなんて知らなかった。

2012/10/17

流体計算屋のためのOS

GeekoCFDなる物があるらしい

http://susestudio.com/a/2qtLK2/geekocfd

OpenFOAM
Gmsh
Blender

など必要な物がほとんどはいってるらしい。

2012/10/03

メインの研究ミスったかも

博士三年にして大問題に直面している

今までNavier-StokesのソルバーにはMAC系(陽解法)の方法を用いてきたのだけれども、ここに来て陰解法を使わなければならない可能性が出てきた。しかもかなり高く。

ちなみに書いたことある方法
MAC (陽解法)
Crank-Nicolson + Adams-Bashforth (半陰解法)

simple系とかでも完全な陰解法ではないのだよね。いろいろ、論文読んでみたけれども移流項にたいしても反復が必要みたいでかなり面倒くさい。しかも、生成されるマトリックスがCG系の方法で収束しない場合があるらしい。GMRES必須とか書いてあった。

作るのに半年ぐらいかかると思う。

2012/10/01

すごいサービスみつけた

こんなのあるんだ お墓の検索サービス 

ハカダス

http://hakadas.yomiuri.co.jp/

うちあるから、いらないんだけどね

2012/09/29

いきたい場所ができた

それは

猫カフェ

一日入り浸って、ねこをもふもふしてたい。

2012/09/28

kindle paperwhiteを買った

アメリカにいる友人に協力してもらってkindle paper whiteを購入することにした。実はまだ本国でも販売はされていない。10月の頭に発送開始らしい。

人気があるようで、自分が頼んだ時には一ヶ月待ちだった。さらにそれを日本に送らなければいけないのでさらに日数がかかる。

日本での正式サービスを待った方がよかったかもしれない。

2012/09/27

paraviewをコンパイルしているが

バグ多すぎ


ロンドンに行ってきた

ロンドンの学会に行ってきた

3年前に卒業していらいイギリスには初めて行った。ロンドンは観光で2004年に行っただけだったのでいろいろ新鮮に感じられて楽しかった。(毎年ヒースローからパディントン駅までは通っていたが)

 Les miserable見た
 楽しかった。小学校の時の課外授業でみたのとは大違い。演奏まで生でやってた。

飯安い
 パン 800g (一斤) 50円ぐらいから これでも昔より二倍ぐらい高い。

ホテル
 安宿 一泊6000円ぐらい 何か東欧とかアラブ系か学生とかしかいないんですけど。

博物館とか
 タダでは入れるとは

学会
 oxford, cambridgeとかETH Zurich名門の所ばかりなんですけど。

アメリカに去年行ったときかなり聞き返され、やはり英語力が落ちたかと思ったがイギリスではまったく聞き返されることが無かった。自分のアクセントがかなり特化したものになってしまったようだ。

2012/09/11

gccをコンパイルした

gcc-4.7.1を作った。
  • 研究室のマシン コンパイル時間: 30分 'make -j13', 6コア乗ってるi7 型番は何だっけ?
  • 自分のnetbook コンパイル時間: 5時間 'make -j3' AMD C-50
格差...orz

AVXオプションが使えるんだよね。対応しているマシンないけど。

2012/09/06

徹夜明け

今の頭んなか
  • 眠い 40%
  • 結果出た ! 20%
  • 計算間に合うかな ? 20%
  • お腹減った 20%

2012/08/22

ルーマニアでの邦人殺人事件

ルーマニアで女子大生のボランティアが殺害されたそうな。まだ若いのに。 思えば、自分も
  • 基本一人で行動
  • 空港で寝泊まりデフォ(深夜到着便)
  • タクシー使わない
  • 深夜二時とかに24時間スーパーまで徒歩でいく(一回二人組につけられたことがあった、結構怖かった)
とイギリスで学生していたときしてました。田舎の治安のいい街だったので問題なかったけど。 一番ヤバかったのはヒースローで早朝のだったので前日入りして寝た。次の日、武装警察に起こされた。その先日にスコットランドの空港で自爆テロがあって。厳戒体制になってた。

2012/08/12

mpcがコンパイルできないよぅ

mpcのMakefileなんかへん。/usr/localにinstallしようとする。なぜだ? --with-gmpをつかうとコンパイルできないし。root持ってないマシンで作りたいのだけれども。

2012/08/03

Regarding with nvcc

I have been testing nvcc and fortran comlipers. Around 2008 nvidia's presentation nvcc was explained to be designed compatible with gfortran. However, I found out gcc and gfortran can not be linked to nvcc created object code. My mates told me that combinations of ifort and nvcc worked. Moreover, I confirmed pgcc and pgfortran as well. Which was no suprise.

2012/07/10

同窓会

中学の同窓会がお盆のときにあるらしい。この年で学生しているなんて恥ずかしくていけない。facebookでページ作って30人ぐらい登録してあった。プチ同窓会を数ヶ月に一回ぐらいしているらしく写真とかも載っていた。みんな何となく面影はある、がもっと驚くのは地元にほとんどの人が留まっていること。やっぱり田舎の学校だ。

2012/06/27

GPBiCGソルバーをCUDA化してみた

近日中に公開予定。さっきやっとできた。 ワークベクトル多いからメモリーサイズの小さいGPUには向かないかも。 まだ性能向上とかはみてない

2012/06/24

Open Foam 2.1.1をコンパイルした

/home/build で管理しているのでOpenfoam dirに展開する。ThirdPartyも同じところへ展開 aptで
  • build-essential
  • flex
  • bison
  • cmake
  • zlib1g-dev
  • qt4-dev-tools
  • libqt4-dev
  • gnuplot
  • libreadline-dev
  • libxt-dev
を入れる あとはOpenFOAM/etc/bashrcで環境変数を合わせてやる。今回は/home/build/OpenFOAMに作った。デフォルトだと~/OpenFOAMにできる。 あとは sh OpenFOAM/Allwmake でコンパイルが始まる。10時間ぐらいかかった。

2012/06/20

虫歯になった

虫歯になったじょ痛いじょ。 何か一番奥の歯のまわりが黒い。ガリガリしてみた。何か黒いのがとれる。

2012/06/14

OpenCLの変な仕様?

動的にとったローカル配列を他の関数に渡せない。静的関数はOK。 グローバルに取れと? 多分ポインターとして渡せないようにしているのだろう、ベクトル処理には確かに向かない。

2012/06/06

今度はロンドンにいくことになった

五輪の後何だけれども、ロンドンにいくことになった。まさか講演になるとは思っていなかったのでビックリした。そしてその後はjornal paperの提出。これさえとおれば後は楽。

2012/06/01

中国行ってきた

中国行ってきた。

こんなに英語が通じない国だと思っていなかった。せめて空港とホテルの職員ぐらいは全員、片言でも話せる用にしようぜ。

一番通じたところが、パチもの市場、外人狙いなのかしょっちゅう話しかけてくる。しかも、空港職員より英語はうまい。

2012/05/23

学会にいってくる

忙しくてしばらく更新できなかった。

一週間程中国に行ってくる。初の非英語圏の国だ!

2012/05/11

CG法 CUDA ソースコード

CG法のCUDAバージョンを作ってみた。blasを使用してます。

nvcc -lcublas cg_cuda.cu

でコンパイルしる!

cg_cuda
追記: 12 June 2012 URL間違えていた。修正した。

2012/05/02

ubuntu 12.04 LTS (3)

サーバー版なら安定しているかな?と思って入れてみた。

鯖版は初めてだったので、デスクトップ版が以下に楽なのか分かった。まず、ネットにつながらない。インストール時につないでおけば自動でやってくれたらしいのだがつながなかった。

dhclientが動いてくれないので、/etc/network/interfacesを手動で書き換える。つながったら、ようやくaptが使えるので必要なソフトを入れていく。wirelessのドライバは入ったけれど起動するとやっぱり落ちる。ドライバ無でも同じ症状なので、他が問題っぽい。

wifconfigでも落ち、ログファイルも生成されないので原因究明できない。困った。

unityもgnomeも入れてないので快適。x windowだけっていうのもありかも。twmぐらいはいれようか?

CG法をGPU化してみた

CG法をGPU化してみた

5024x5024の三重対角行列をserialとCUDA化したCG法(共役勾配法)でといてみたよ

最適化オプションなしで、opteron 6128に対して約2百倍の高速化。

こんなに早いの?

普通に書いたのは8秒ぐらいかかった。CUDAのは0.04秒でといちゃった。

2012/04/29

ubuntu 12.04 LTS (2)

ubuntu 12.04-desktop-amd64 の続き。

partitionをマニュアルで分割して、ネットワークなし、追加ソフトを初期インストール時に一切インストールしないを選んだらようやくインストールできた。

/dev/sda1 swap 4GB
/dev/sda2 ext4 残り

で切ってある。

無線LANのドライバー入れて起動するとハングする。もう他のOSに乗り換えよう。

2012/04/28

Aspire One 522 (AMD C-50)




11:00ごろ Ubuntuをクリーンインストールし始める。メディアを焼く。ftp北陸先端大

11:30 インストーラ起動せず。ubuntu.jp 本家から落とした。md5sumで今度はチェックする。OK

 12:30 一回目 インストーラが起動中に止まる。 長押しで強制終了。

12:35 二回目 インストール始まるが終了間際でインストールが止まる。dhclientが何か探しに入ってるんですけど?

1:10 三回目 ネットに接続しないで、後からapt-getでとってくればOK作戦 インストーラのエラーでらしい。エラーログ送ってくださいとののメッセージまで

1:21 眠くなる <- いまここ

IQ testをやってみた

ネタがないのでやってみた
何気にできる子なのか?

2012/04/27

Ubuntu 12.04 LTS

Ubuntu 12.04 LTS キター
ネットブックはアップデートしたら起動しなくなったのでクリーンインストールすることにした。 追記:mainマシンをアップデートしたらおかしくなった。マウスとキーボードの入力が一切できないんだけど。

2012/04/26

もういっちょ更新情報

ホームページに一般積共役勾配法 GPBiCG (General Product Bi-conjugate Gradient Method )のソースを追加してみた。飛んでみる

2012/04/25

ホームページを更新

ホームページを更新 二次元のポワソン方程式を陰的にといてみた。五重対角行列をBiCGStabにて解いてます。マトリックスの圧縮はしていない。 飛ぶ

デバッガ

デバッガの使い方がようやく理解できてきた。でも、あんまり信用できない。 c と fortranの混合のコードなのかもしれないけれど、問題のある場所と全く関係のない箇所を示すことも多い。値を追いかけていく時は便利だけども。 やっぱり最後はprinf()とwrite(*,*)が最強。

2012/04/24

windows用に書いたfortranは、pgiのコンパイラだとコンパイルできないことがあるらしい。 fileのI/Oで今回、上記のような自体に遭遇した。FortranでのI/Oはとにかく使い辛いので、Cで書き直し中。

2012/04/23

NACA-0015をCで書いてみた。



これからメッシュ切って遊んでみる

隣人

隣の人がFPS厨な件

正直、五月蝿い。明け方までやっているんだけど、授業出てないよね。

2012/04/20

Fortran と c

f90とcのミックスでコード書いているけど。今まで正式なやり方でやっていなかったのに昨日気がついた。

iso_c_biningと言うモジュールを使って、cの型指定をしてあげるのが本来の方法らしい。そういえば、変な誤差がでることがあったな。

2012/04/19

賞味期限

facebookで古い知り合いを見つけたが、名字が変わっていた。

30までに結婚できないと賞味期限が切れるらしい。あんまり時間が無い。

賞味期限って男にもあるの?

2012/04/18

昔言われたことを思い返してみる

学部時代に良かったインド人に、'お前は日本人らしくない'散々言われた。

基本一人で行動していたし、だから誰かと、日本語で話したこともなかった。服装もいつも同じで、アジア系の食品とか売っているスーパーにいくこともなかった。

でも桜を見て、写真とか撮っていると、自分も日本人なんだと思う。

2012/04/17

main機のOS再インストール

Ubuntuが一回で、bootしなくなってきたので新しいバージョンが出たらインストールしたい。

目指すは週末を使ってのクリーンインストール。

2012/04/12

2012/04/01

量子力学のシュミレーション

今日量子力学関係のシュミレーションをやっている人と話す機会があった。
なんでも物性系では、かなり誤差が大きくてもいいらしい。

例えば、実験で300度の計測結果が得られているのもでも、1000度ぐらいなら論文に載るレベルらしい。本当に数値計算で300度とかの値が得られれば、サイエンスとかネイチャーに載る快挙だそうな。そんな適当なんだ。

流体では離散化方法が違っても検証計算で10^{-3}ぐらいまであわないとダメなのに。

2012/03/31

並列処理

人間は並列処理には向いていない用だ。仕事ありすぎー。

2012/03/29

pgiのコンパイラ

gccとgfortranで頑張ってきたけれど、GPU用にコンパイルする必要があった。

nvccとgfortranだとリンクできないので、pgiのコンパイラーにした。

が...今まで見たこともエラーがたくさんでている。cは全くでなかったが使用しているf90のソースコードので方言が多用されているらしい。ついてない

2012/03/28

GPBiCG ソルバー(2)

やっとバグがとれた。今度はちゃんと収束するようになったけど、bicgstabよりも誤差が大きいのが気になる。

残差のnorm、解のnormで収束判定するのかいつも悩む。大体は解の相対誤差で判定しているけれども、一つ余計にベクトルがひつようになる。残差と解のnormが厳密にリンクしてないスキームとかもあるらしいので、ソルバーの専門家出ないので怖くて手が出せない。 追記: ソースコードを公開しました。http://a-daily-life-in-the-office.blogspot.jp/2012/04/blog-post_26.html

2012/03/24

引き継がれているコードが

研究室で開発されたコードを使って研究してるんだけど、かなり怪しい部分があるのに気づいた。
本でチェックしたら、何か違うんですけど。検証結果とか残ってないのかな?

正直、直すの面倒くさい。

2012/03/22

また学会が増えた

中国とイギリスの学会にいけとのお達示が合って大変だった。まだ、まとまってないのに。
取り合えず、中国の方は審査を通った。

それよりも、早く論文投稿させてくれ。

2012/03/02

GPBiCGソルバーを作ってみた

何か、かなり安定しないんですけど。BiCGStabで解ける行列も解けなかったりする。 追記: ソースコードを公開しました。http://a-daily-life-in-the-office.blogspot.jp/2012/04/blog-post_26.html

2012/02/23

paraviewのへんな仕様見つけた

connectivity
二次元では0から始めないとダメ
三次元では1からはじめないとダメ

三次元の書いた奴Fortran厨だろ

what's the hell is this?

If you writing paraview vtk output file, be careful for your connectivity table
-in 2D, the smallest node number must be zero
-in 3D, the smallest node number must be one

The 3d module is apparently written by Fortran lover.

2012/02/16

2012/02/09

間違えました。

ようやく有限要素法のソルバーができてデバッグを始めたら、やってはいけないバグに気づいた。係数行列か既知のベクトルがおかしいみたい。で現在書き直し中。

2012/02/07

2012/02/02

amazonすげ

こんな大雪なのにもう注文した本が届きました。アマゾンの配送センター(大阪)からはどうやら一日で届くようです。東京方面からはけっこうかかるみたいね。

gccとsh-4のは結構あたりっぽい、パラパラ眺めてた、だけなので何とも言えない。

2012/02/01

amazon にて注文

この四冊を注文した。
みんな古本なので全部で2000円ぐらいだった。あとで感想とか書く。

実例で学ぶGCCの本格的活用法

正直オプション多くてわからないからこの際良く読んでおこうと思ってかった。


技術者のためのUnix系OS入門

NetBSDについて詳しく書いているらしいので隠れNetBSDユーザーとしては見過ごせなぜぃ!Linux/Unixを組み込み用に作るやり方なども乗ってるらしい。


SH-3 SH‐4プロセッサ入門
実は結構組み込み系も興味がある。今持ってる学位は機械工学だもんね。



画像&音声圧縮技術のすべて—インターネット/ディジタルテレビ/モバイル通信時代の必須技術
これ100円しなかった。何かついでに持ってるといいかもって感じで購入。

ちょっと欲しいと思っているもの

これ



未だにprintfで頑張るタイプなので少しデバッカについて学びたいと思ってる。
マジでかってよかったと思うもの



初心者向けじゃない。

基礎的な部分だけでも直接法、安定化、CG系の線形ソルバー、element by elementまでカバーしていてものすごく詳しい。ただ一次元の三角形要素の例題やサンプルしかないので少し特殊。これの前の本も使えたけれどこっちの方が一般的なトピックになっていると思う。

このシリーズネットでも品薄になってるみたい

収束しません

element by elementを線形ソルバーに組み込んだら収束しなくなった。働かない部分はすぐに直したいけど、今日はもう限界なのでおやすみ。

good night

2012/01/31

やっぱりC++の挙動はわからない

powerpcとx86の問題は解決しましたが、また問題が出てきた。

init()を作って値を初期化しているのですが、いざ初期化した配列を使おうとするとなぜかされていません。変だなと思ってアドレスで無理やりしていしてみましたが、同じアドレスなのに初期化した後も値が入っていな状態になっています。現在原因特定中。

2012/01/28

大雪

学校のまわりが雪降りすぎ。買い物にいけない。

2012/01/27

更新情報

ホームページ更新すた。みてけろ

前処理付きの安定化双共役勾配法、PBiCGStab ( preconditioned Bi-Conjugate Gradient Stabilised )を追加。一応OpenMPで並列化してある。カリカリにはチューニングしてないけどそれなりに早いはず。ソースコードもあるよ。

http://www.geocities.jp/yosuke_3141592/numerics/bicgstab.html

2012/01/23

c++の挙動がよくわからない件について

メッシュデータを読み込ませるときにかなり不可解な挙動をしめす。

メッシュのノードの座標位置を読みたい時、個数が事前にわからないので二回読み込ませている。これをなぜか同じ一回目の読み込み関数から、二回目のファイルアクセスをとエラーになる

もちろん一回目のファイルアクセスのあとifstreamを閉じている。この問題は、関数を二つに分け、mainから呼んだら正常に動きました

あとこの情況で、なぜか新しくポインタをつくるだけ、alloactionもアクセスもしていない、でallocation errorになる。

x86では正常に動くけど、power系では動かないといった謎なコードになってしまった。

2012/01/21

2012/01/18

七重対角行列をBiCGStabでといてみた


画像のような七重対角行列をBiCGStab法で解いてみました
iteration = 0 residual = 0.838021
iteration=59

x=
-0.329031
-0.390997
-0.385867
-0.459732
-0.452909
-0.413003
-0.465395
-0.436181
-0.359735
-0.325728
-0.271722
-0.188105
-0.137904
-0.083966
-0.010057
0.031578

A*x =
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
10.000000
11.000000
12.000000
13.000000
14.000000
15.000000

ちゃんと解けているようです。

2012/01/17

いぬ

実家に先日帰ったとき、新しい犬がいました。前の子は自分が下宿先に移った矢先に亡くなってしまいました。とても可愛かったのですが。

新しい娘もなんだか不憫です。どこかのブリーダーに育てられたらしいのですが、商品として不適格と判断されたらしく声帯を手術されたらしいのです。おかげで吠えても力のない声しか出ません。ブリーダーの方に室内でずっと買われていたらしいのですが..ちょっとかわいそう。

姿は、たしかに目が小さく本来の犬種のイメージとは少し違います。でも人間の都合で飼われたり手術されたりするのはかわいそうだと思う。

本人はいつも日向でのんびりしているけど、幸せなのだろうか?

2012/01/11

GL/gl.h ヘッダーがないと言われる件

ubuntuのリポジトリに問題があるらしくなぜかmesa-dev-commonが取れない。dpkgでもやってみたけれど依存関係ではねられる。AMDのfirstream SDKのサンプルコンパイルに必要なのだが。ソース落として作るかな?

2012/01/10

高性能GPUが欲しい

GPGPUをやり始めたのだが、ちょっとした問題が発生している。

AMDのAPU搭載のマシンを持っているので、OpenCLでコーディングしているのですが、私のマシンでは倍精度の計算ができない様だ。困った。

倍精度計算可能なグラボは結構ハイエンドのものでなければならないらしいredeon 58xx,69xxとか79xxぐらいじゃないとサポートされてないらしい。

最新のグラボならば倍精度でも1TFLOPSぐらい出るらしい。ウチの学校のスパコンの中にはこれよりも性能低いのあるよ。とんでもない世の中だ。もちろん理論性能での話だけれどもね。

でもハイエンドは一番安くても15000円ぐらいするし、マザーボードも電源も買い換えなければならない。どう安く見積もっても結局三万円ぐらいかかる。

結婚式に行ってきた

妹が結婚したので式に出てきました。

思えば、昨年の11月ぐらいに母親から電話で’妹が結婚することになったので式に出ろ’と。

で急遽年末に変える予定を変更し、三連休中に地元に帰ってまいりました。高速バスだったので結構時間食って自由にくつろげたのは5時間ぐらいだったけど、たのしかった。 その時間のほとんどは犬に戯れてもらってた、手のかかる飼い主ですまん。

結婚した相手の人なのだが、家族の中で全く認識がなかったのは自分だけでした。どうやら自分は、謎の兄という扱いだったらしい。ずっと大学行っていて家にいなかったからね。人よさそうだし何より、リア充だった、よく妹とくっついたな。

新郎側のテーブル乗りのいい人ばっかりでめっちゃ盛り上がってたし。相手の親御さんとか新郎とか、感謝の言葉とかの涙ぐんでたし、なんか心こもってた。

それに比べウチは、



誰も泣かないし、感謝の言葉棒読み。



さずが我が父、母と妹、やるな。

2012/01/04

スキーム決定

年末年始パソコンには触らずにずっと本とにらめっこしてた。

分離型ではなくmatrix methodのSUPG/PSPG系のtetrahedron 4のコードにすることにした。実質GLSなのですが、まあ、こまけーことはいいんだよ。

ようやく積分の方法もわかったし。でもコード書くのものすごく大変そう。

まとめページ

      

リンク

The Wizard of Science
友達のブログ文化人類学とか難しい話をしております。あとホームページから自作ゲームも配布。