2013年9月20日金曜日

AX2 ネジ抜け 再び

新しいネジにしたが気がつくとまたネジが抜けて無くなっている。
mobilePCとしてNGでしょう。

2013年9月19日木曜日

文献管理ソフト

windows8 64bit, intel corei5-3317U@1.7GHz, 4..0GB memory

imageのみの古いpdf論文もあり、それらも検索するために手でabstract、検索keywordを書くという使い方を私はします。

pdf内検索ができるのは当然で、その他の点を上げると

Mendeley (Desktop)

長所:
  • 古い論文でもpdf informationからyear/title/author程度は自動で入れてくれる。
  • 動作が軽い。
短所:
  • Mendeley server上にpdfを置かない設定にしているが、毎回なにやらserverと通信をしておりそれに結構時間がかっている。どこまで情報がuploadされているのか不安。
  • pdf informationがない場合に結構いい加減な情報を入れている。確認が必要。
  • Nature,Scienceなどpage途中で始まる論文の場合に違う論文の情報になっていることがある。
  • Mendeley serverが止まっていたり、障害があり通信できないと論文情報を自動で全く取れない。(と書いている現在も障害がおきて論文情報を補完できない。)なお、serverが止まっていても自動補完機能以外は問題なく使える。
  • 新しくファイルを登録した時しか文献のlookupができない。その時にinternet connectionができないと、もしくはMendeley serverがdownしていると論文の詳細を自動的に探せない。一度delete document,remove from collectionしても内部に情報が残っているらしく、Mendeley上で削除しても二度目はlookupできない。最初の登録時にinternet connectionができないと、もしくはMendeley serverがdownしていると論文の詳細を自動的に探さない。
以下FAQより、関連事項
----------------------------------------------------

Update References (automated DOI lookup)

...
I can update a reference via manual "doi lookup". Bit this is annoying when I will lookup thousands of references. I have to click for each single entry the "doi lookup" button.

Is there a way to automate this process?

Thanks
Christof


Best Answer 
Robert Knight Feb 27, 2012 03:14PM GMT
> Is there a way to automate this process?

There isn't currently a way to do a batch DOI lookup for multiple documents at once.

If you imported the documents from PDF files, Mendeley will try to do a lookup automatically if it finds a DOI, but this only works if you have an internet connection when the import happens.

-----------------------------------------------------------
papers2のように確信がなければ情報を何も入れないなどとできる補完レベルを指定できるとbetter。今のところこれが最も私の使い方に合う。

papers2

長所:
  • 完全にstandaloneで動く。
  • そのわりに結構論文情報を取ってくれる。
短所:
  • userがfree wordの検索文字を書き込めない。
  • abstractは改行を取って一行にしないとabstract欄に全て入らない。普通にコピペすると一行目のみ挿入される。
  • windows版は動作が重い。多分interpreterのソフト。
古い論文も検索に入れたい場合にabstractを簡単にコピペできず、また検索タグにfree wordを書けないので私の場合は致命的にNG。

readcube

natureと提携しているというので期待しましたが、

短所:
  • Adobe AIRが同時にinstallされるinterpreterのソフト。windows版は動作がかなり重い。
  • pdf informationから情報を全然取らない。なかなか情報取りのgive upをしない。情報を取れない場合の表示が意味不明。
という理由ですぐuninstall。

2013年8月9日金曜日

mpi_alltoallを使った行列の転置

簡単な例

2次元配列を考える。どうすればいいのか考えるために簡単な例から調べる。

3processorでA(6,6)を一次元目で切る。

A=
11 12 |13 14 |15 16
21 22 |23 34 |25 27
31 32 |33 34 |35 36
41 42 |43 44 |45 46
51 52 |53 54 |55 56
61 62 |63 64 |65 66
 #1         #2         #3     processor

mpi_alltoallでこの行列を渡すと4つが一つの単位となりprocessor間で渡される。Aと同じ位置にalltoall後の配列を書くとこうなっている。

11 12 | 31 32 | 51 52
21 22 | 41 42 | 61 62
13 14 | 33 34 | 53 54
23 24 | 42 44 | 63 64
15 16 | 53 54 | 55 56
25 26 | 63 64 | 65 66
 #1         #2         #3     processor

processor内部での転置

processor #1は

11 12 21 22 13 14 23 24 15 16 25 26

という配列を持っている。

a= 11 12
b = 21 22
c = 13 14
d = ...

と定義して a-fまでの6つの配列を2x3だと思ってみると

a b
c d
e f
(memory imageが a b c d e f であるという意味)

である。この転置を取り

a c e
b d f
(memory imageが a c e b d f であるという意味)

と並び替える。a,b,cなどを数値に戻すと6x2の行列に対してメモリーimageが

11 12 13 14 15 16
21 22 23 24 25 26

となる。

他のprocessでも同じことを行い全体としては

11 12 13 14 15 16  proccess #1
21 22 23 24 25 26
------------------
31 32 33 34 36 36  process #2
41 42 43 44 45 46
------------------
51 52 53 54 55 56  process #3
61 62 63 64 65 66

とな並べられており、rowでの分割とcolumnでの分割を無事入れ替えることができた。(分割表示も左右から上下に直している。)

一般的な行列サイズと、processor数の場合

global配列がA(n2,n3)

 n2
---------------------------
|                  |
|                  |  n3
|                  |
|                  |
|                  |
|                  |
---------------------------

に対してlocal memoryを
  n2'
-------
|          n3'
|           |  
--------
|           |
|           |  
-------
|           |
|           |  
-------
と切る。

transpose側の配列は

-n2'----n2'----n2'--
|           |           |            | n3'
|           |           |            |
--------------------
と切る。以下、n3'をn3dと置く。

comminucationを同じblockサイズ(=n2'*n3')で行う必要から、配列にmarginがあり、n2'*mpi__size >= n2, n3'>=n3である。このmargin分は以下のように計算できる。

n2d=n2/mpi__size
if (mod(n2,mpi__size)/=0) n2d=n2d+1
i2s=mpi__rank*n2d+1
i2e=(mpi__rank+1)*n2d
if (i2e>n2) i2e=n2

n3d=n3/mpi__size
if (mod(n3,mpi__size)/=0) n3d=n3d+1
i3s=mpi__rank*n3d+1
i3e=(mpi__rank+1)*n3d
if (i3e>n3) i3e=n3

n2f=n2d*mpi__size
n3f=n3d*mpi__size

i2f=i2s+n2d-1

n2d=n2/mpi__size
if (mod(n2,mpi__size)/=0) n2d=n2d+1
i2s=mpi__rank*n2d+1
i2e=(mpi__rank+1)*n2d
if (i2e>n2) i2e=n2

n3d=n3/mpi__size
if (mod(n3,mpi__size)/=0) n3d=n3d+1
i3s=mpi__rank*n3d+1
i3e=(mpi__rank+1)*n3d
if (i3e>n3) i3e=n3

n2f=n2d*mpi__size
n3f=n3d*mpi__size

i2f=i2s+n2d-1

allocate(a(i2s:i2f,n3f)); a=0    ! すべてのprocessに同じサイズが割り当てられる。
allocate(b(n2f,n3d)); b=0

結果を確認しやすいようにAの値はこうしておく。
do i3=1,n3
do i2=i2s,i2e
  a(i2,i3)=i2+i3*10
enddo
enddo

bはmpi_alltoallでtransposeした配列になる。bも配列にmarginがある。alltoallでまずはbへ移す。

i1=int(size(a),kind=4)/mpi__size
i2=int(size(b),kind=4)/mpi__size
call mpi_alltoall(&
a,i1,MPI_INTEGER,&
b,i2,MPI_INTEGER,&
MPI_COMM_WORLD, mpi__err) 

ここにi1,i2は各processorがcommunicateするblockのサイズであり配列の全体のサイズではないことに注意。例えば上の例の場合4つ=2x2となる。

ここでの配列bはまだtransposeとしては順序が合っていないのでそれをblockサイズでprocessor内でtransposeする。行列を切り直したいのでsubroutineに渡してしまう。

call transpose_submatrix(mpi__size,n2d,n3f,b)

subroutine transpose_submatrix(mpi__size,n2d,n3,b)
implicit none
integer,intent(in):: mpi__size
integer,intent(in)::n2d,n3
integer,intent(inout):: b(n2d,n3/mpi__size,mpi__size)

integer:: c(n2d,mpi__size,n3/mpi__size) ! local array
integer::i,j
do j=1,mpi__size 
do i=1,n3/mpi__size
   c(:,j,i)=b(:,i,j)
enddo
enddo
b=0; call iaXPY(n2d*n3,1,c,1,b,1)  ! iaxpyはblas1のsaxpyをintegerに修正したもの。メモリー上でb = c 相当のことを行えれば良い。
end subroutine transpose_submatrix

例1

最初にかなり変な例としてA(8,5)行列を4processで分割してtransposeをかけてみる。

 local A(n2d,n3f)
    rank        ここからaの中身
          n2d
               n3f
a   0   2   8  11  12  21  22  31  32  41  42  51  52   0   0   0   0   0   0
a   1   2   8  13  14  23  24  33  34  43  44  53  54   0   0   0   0   0   0
a   2   2   8  15  16  25  26  35  36  45  46  55  56   0   0   0   0   0   0
a   3   2   8  17  18  27  28  37  38  47  48  57  58   0   0   0   0   0   0

(
character(10):: form1='(a,100i4)'
write(6,form1)'size_of_a=',size(a,dim=1),size(a,dim=2),size(a)
として書いている。

とAの中身がなっているとする。これは行列の形で書くと
A=
11 12 | 13 14 | 15 16 | 17 18 |
21 22 | 23 24 | 25 26 | 27 28 |
31 32 | 33 34 | 35 36 | 37 38 |
41 42 | 43 44 | 45 46 | 47 48 |
51 52 | 53 54 | 55 56 | 57 58 |
0   0    | 0   0    | 0   0    | 0   0    | 
0   0    | 0   0    | 0   0    | 0   0    | 
0   0    | 0   0    | 0   0    | 0   0    | 
0   0    | 0   0    | 0   0    | 0   0    | 
0   0    | 0   0    | 0   0    | 0   0    | 
0   0    | 0   0    | 0   0    | 0   0    | 

である。programで転置した結果は

local B(n2f,n3d)
    rank        ここからbの中身
          n2f
               n3d
b   0   8   2  11  12  13  14  15  16  17  18  21  22  23  24  25  26  27  28
b   1   8   2  31  32  33  34  35  36  37  38  41  42  43  44  45  46  47  48
b   2   8   2  51  52  53  54  55  56  57  58   0   0   0   0   0   0   0   0
b   3   8   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

となる。ちゃんと行列でかいてあげると

11 12 13 14 15 16 17 18
21 22 23 24 25 26 27 28
--------------------------
31 32 33 34 35 36 37 38
41 42 43 44 45 46 47 48
-------------------------
51 52 53 54 55 56 57 58 
0    0   0   0    0    0    0   0
-------------------------
0    0   0   0    0    0    0   0
0    0   0   0    0    0    0   0
-------------------------
と転置されていることが確認される。

例2

もうすこしまともな例をだそう。A(8,5)行列を3processで分割する。

   rank          A
         n2d
              n3f
a   0   3   6  11  12  13  21  22  23  31  32  33  41  42  43  51  52  53   0   0   0
a   1   3   6  14  15  16  24  25  26  34  35  36  44  45  46  54  55  56   0   0   0
a   2   3   6  17  18   0  27  28   0  37  38   0  47  48   0  57  58   0   0   0   0

A=
11 12 13 |14 15 16 |17 18 0
21 22 23 |24 25 26 |27 28 0
31 32 33 |34 35 36 |37 38 0
41 42 43 |44 45 46 |47 48 0
51 52 53 |54 55 56 |57 58 0
 0    0   0   |0    0    0   | 0   0  0

   rank          B
         n2f
              n3d
b   0   9   2  11  12  13  14  15  16  17  18   0  21  22  23  24  25  26  27  28   0
b   2   9   2  51  52  53  54  55  56  57  58   0   0   0   0   0   0   0   0   0   0
b   1   9   2  31  32  33  34  35  36  37  38   0  41  42  43  44  45  46  47  48   0

B=
11 12 13 14 15 16 17 18 0
21 22 23 24 25 26 27 28 0
--------------------------
31 32 33 34 35 36 37 38 0
41 42 43 44 45 46 47 48 0
-------------------------
51 52 53 54 55 56 57 58  0
0    0   0   0    0    0    0   0   0

例3

A(8,3)を3processで切る。
   rank          A
         n2d
              n3f
a   0   3   3  11  12  13  21  22  23  31  32  33
a   1   3   3  14  15  16  24  25  26  34  35  36
a   2   3   3  17  18   0  27  28   0  37  38   0

行列の形では
A=
11 12 13 | 14 15 16 | 17 18 0 
21 22 23 | 24 25 26 | 27 28 0
31 32 33 | 34 35 36 | 37 38 0

転置行列は
   rank          B
         n2f
              n3d
b   0   9   1  11  12  13  14  15  16  17  18   0
b   1   9   1  21  22  23  24  25  26  27  28   0
b   2   9   1  31  32  33  34  35  36  37  38   0

行列の形では
B=
11 12 13 14 15 16 17 18 0
-------------------------
21 22 23 24 25 26 27 28 0
-------------------------
31 32 33 34 35 36 37 38 0 

となる。

2013年6月3日月曜日

自動車各社安全性能比較 2013年06月

以下は各社のHPから読み取れる情報のみを記載。各社どの程度の制御かは不明。

ボルボ

v40~290万円から。(安全装備オプションの+20万円を含む。全体ではもっと高価なシステム。)
前方デジタルカメラ、前方、後方ミリ波レーダー。
  • 全車速追従   車間距離設定可能、30km/h以上で速度設定可能
  • 車間警告 
  • 追突回避、軽減オートブレーキ アラームとブレーキ、全速度域
  • 低速用追突回避、軽減オートブレーキ 15km/h以下で衝突回避、50km/h以下で軽減、夜間でも作動 (上とは使うセンサーが異なる。)
  • 歩行者検知、アラーム、フルブレーキ
  • 自転車検知(2014年モデルより)
  • 車線逸脱警告、レーンキーピングエイド
  • ブラインドスポット
  • レーンチェンジマージエイド 10km/h以上
様々な事態を考えている。

スバル アイサイト 

インプレッサ~210万円から。( 車両の価格差からするとシステムは10万円。)
前方デジタルカメラ。
  • プリクラッシュブレーキ 速度差が30km/h以下で衝突回避、軽減
  • 全車速追従機能付きクルーズコントロール, 0-100km/h 車間距離設定可能、
  • AT誤発進抑制
  • ふらつき警報 50km/h以上
  • 車線逸脱警報 40km/h以上
  • 先行車発進お知らせ
full setを二百万円の車にも搭載している。
停止だけでなく発進も制御できる。
後方は見ない。

マツダ i-activsense 

アテンザ~290万円から。(安全装備オプション分は20万円。)
前方デジタルカメラ、前方ミリ波レーダー、前方前方近赤外線レーザー、後方準ミリ波レーダー
  • 車線逸脱警報
  • ハイビームコントロール
  • リアビークルモニタリング 15km/h以上、後方50m
  • レーダークルーズコントロール 車間制御、30-100km/h 
  • スマートシティブレーキサポート 4-30km/h
  • AT誤発信抑制
  • スマートブレーキ 15km/h以上

トヨタ、レクサス 

前方、後方ミリ波レーダー、前方デジタルカメラ。
  • プリクラッシュセーフティ オートブレーキ、相対速度15km/h以上?
  • レーダークルーズコントロール 先行車との車間制御と追従
  • ブラインドスポットモニター
  • レーンデパーチャーアラート
高いクルマにしかfull setを搭載しない。
オートブレーキは止まるところまで行くらしい。

VW 

GOLF ~250万円から。標準装備。
前方レーダー、前方デジタルカメラ。
  • プリクラッシュブレーキシステム 5km/h以上の前速度域
  • シティエマージェンシーブレーキ 30km/h未満
  • アダプティブクルーズコントロール 車間距離を維持,渋滞などの低速域でも作動し、先行車が完全に停止するまでの範囲
  • レーンキープアシスト
  • ドライバー疲労検知
後方は見ない。
full setを標準装備。

日産

スカイラン以外では以下を見つけた。

  • インテリジェントクルーズコントロール 40-100km/h
  • インテリジェントブレーキアシスト

2013年4月26日金曜日

gemmとmatmul

メモ
      real(8):: A(M,K),B(K,N),C(M,N)

      C=matmul(A,B)
と等価になるのが
      call dgemm('N','N',M,N,K,1.0d0,A,M,B,K,1.0d0,C1,M)

2013年3月10日日曜日

交通の要所

 シンガポールは交通の要所である。東アジアと南アジア、更にその西の中東、ヨーロッパ、アフリカを繋いでいる。シンガポールは自由貿易国家であるというのが有名だが、この場所、そしてこの国土の小ささでは自由貿易国家にする以外国を富ませる手段がなかったというのが本当のところに違いない。しかし、それを実行し成功させるには政治的な才能を必要とする。事実上一党独裁でやりやすかったこともあるが、その政策を計画、実行したリー・クアンユー元首相は天才と言われる。


中東に移る。ドバイもまだ交通の要所として有名だ。最適な場所はオマーン湾があるイランかオマーンだが、先にドバイがこの地域のハブとしてインフラを整備したので当面その地位は安泰だろう。ドバイの王様は賢いし実行力もある。バブルを弾けさせ資金難になるという失態もあったが、リー・クアンユー元首相と同等の天才であろう。


東アジアを見よう。もともと大きな港町だったのだが、地理的な理由ではなく、政治的に香港、マカオは中国への玄関口として交通の要所となり、結果大きく栄えたことを認めない人はいないだろう。

以上が交通の要所であることを発展に利用できた例であるが、以下は交通の要所であることが諍いの原因になった例である。

下図は日本の北方領土だが、ソ連がこれらを必要とした理由はウラジオストック艦隊が真冬でも自国領だけ通って安全に太平洋へ出るためだったと言われている。そういう意味でこの場所も交通の要所である。地図で分かる通りAの歯舞群島とBの色丹島の返還は太平洋へ出るためには大した問題でないことがわかるので二島返還は今ロシアとしては痛みなど存在しない。更に、地球温暖化で択捉島の北の島でも真冬に安全に通れるのでロシアとしてはこれら四島が無くてももう何の問題もない。今となっては自給自足不能でロシア本国から遠く離れたこれらの四島の管理は高く付いているはずだ。これらの島を返還しない理由は単なるプライドだろう。


大西洋に移る。上の赤丸内のオレンジ色がイギリスで、下の赤丸がイギリス領であるフォークランド諸島である。ここも大西洋と太平洋を繋ぐ交通の要所で昔は戦略上に重要だったためイギリスが占領した。当然だが現在公立学校などイギリス本国と全く同じ行政サービスを行なっており、しかもイギリスの軍隊が駐留しており管理に膨大な金がかかっている。もしここがアルゼンチン領であったならこの島の管理費用は1/100-1/1000なはずである。金欠のイギリスとしては、もし石油が出ていなかったらこの島は単なる不良債権であり、アルゼンチンはただ待っていただけで返還されていたはずだ。現実的な問題とししてここまで離れた場所を直轄地として管理するのは膨大な金がかかり現代的な解とは言いがたい。地域住民にはその地域は自分で管理してもらい、貿易して互いに儲け、国の成長に従い自分で行政サービスの質を上げていくというのが現代的な手法であるそうだ。民族の多様性を尊重する現代の風潮とも合っているし、多様性それだけでも魅力的な観光資源になりうるが、石油がでるのでこのままイギリス領なのだろう。
もし基地が必要ならば、アメリカがやるように返還の条件として基地用地を政府に無償貸与させるというのが現実的なやり方だったはずだが、もうアルゼンチンとイギリスの間では無理な話だろう。


交通の要所でも栄えるためには人を養える都市になれるでなければいけない、のは言うまでもない。

紺碧の艦隊の世界では下図のようになっていて黄色には大国ができる。こうなると北海道は交通の要所となり栄えることはいうまでもない。




最後に黄色で示したこの国を見よう。外へ出るにはどこかの国の防衛範囲内に入る必要があるという意味で、この国にとって周りの国全部が交通の要所になっている。有事までいかない冷戦状態でも、そちらの側の航空、陸上、海上輸送路を全て失い兼ねないし、別の国に輸送路を確保してもらった場合には政治的にも経済的にもかなり高くつくはずだ。こういう地理的条件がある場合、私が指導者なら、友好的だった隣国に喧嘩をふっかけて意図的に敵国にするなど最も愚かな選択として一蹴するが、大丈夫なのだろうか。

北朝鮮が戦争するといっているが、戦争するときに自分が北朝鮮の指導者ならいつを選ぶだろうか。こういう時にはしたくない。

やるならこういうふうに相手が孤立している時だ。
なにやら北朝鮮が数十年かけてうまく隣国を誘導してきたような気がしてならない。


地図はhttp://kantan-net.main.jp/worldmap/とwikipediaから使用させていただいた。

2013年3月6日水曜日

SSDの相性問題

plextor PX-0256M5S  on  let's note CF-S9 ->  NG
plextor PX-0256M5S on dynabook T551-> OK
crucial CT256M4SSD2 on Let's note CF-S9, CF-S10 -> OK
書いていない組み合わせはやっていない。

\1.5kで買ったUSB3.0の外付けケース
plextor PX-0256M5S  -> OK
crucial CT256M4SSD2 -> NG