No Such Blog or Diary
ノートPCが「ぴー」
電源を入れ WindowsXP へログオンして暫く,デスクトップになかなかアイコンが描画されないなぁと思っていたら突然ブルースクリーンに.ネタを見せるための起動でブルースクリーンという別ネタにたどり着いたまでは良かったのだが,そのまま暫く放置してたら「ピーーィ.キューウィーァ,ビーピーィ」とか騒ぎ出した.これはやばいかなと思って再起動したら HDD のアクセスランプが付きっぱなしで,相変わらずの油が切れかけた回転軸のような高周波「ピーィ,キューィ」なノイズ.BIOS 画面で確認したところ IDE のマスターに何も付いていない.起動しようとしても no system みたいな表示で停止.HDDヤバイ?
ということで,HDD吹っ飛んだかと思っていたのだが,しばらくバッテリ抜いてほっといたら復活してた.バンザイ.とりあえずさっさとデータを吸出して RAR で固める.データ用ディスクのみで全部で 9万ファイルぐらい.今のところ問題なく吸い出せているのでチップセットか何かが熱暴走してたみたい.
まとめ:「肝を冷やさないためにも,もっとこまめにバックアップしましょう.」
- Comments: 0
- TrackBack (Close): -
すとーる
- 2006-10-26 (Thu)
- プログラミング
うーん,GWT の widget から element を抜き出して javascript に渡した後にその element に対応するもとの widget を知るにはどうしたらよいか? これが出来ないと仕事が進まないので失速中.やっぱ JSNI 使わないほうが楽なのかなぁ…
- Comments: 0
- TrackBack (Close): -
ACアダプタが...
中で「パチパチパチパチ...」とか鳴いてる.鳴き止んだのを叩いたり動かしてみるとまた泣き出したりする.コンデンサ破裂気味?
- Comments: 0
- TrackBack (Close): -
gwigle で遊ぶ
- 2006-10-24 (Tue)
- 一般
The Gwigle Game という google の検索結果から検索に使った言葉を答えるゲームをやった.とりあえず final と書かれたページまで行ったので一通り正解し終えた気がする.面倒というか分かりにくかったのは株の情報から検索ワードを当てさせる問題とか「もしかして」で訂正される前の間違った綴りを当てさせる問題とかで,これらのいやらしい問題もあって結局二日かかってしまった...
- Comments: 0
- TrackBack (Close): -
GWTで
- 2006-10-23 (Mon)
- プログラミング
Drag and Drop が標準では実装されてない.マウスイベント取れるから自前で実装できるけれど面倒.Developper forum のほうにコードがあるからもって来ればいいのだがマウスを押したとこからドラッグが始まってくれてもちょっと困るので... 毎度のごとく多少動いたらドラッグ開始に書き換えねば.ついでにドラッグしてるものは半透明にしたいので...
filter: alpha(opacity=25); -moz-opacity:0.25; opacity:0.25;
あたりの設定を style に入れときゃいいのかな.先は長い.
- Comments: 0
- TrackBack (Close): -
SSE2 を使う
更なる高速化のためにSSE2に手を出してみる.CIPスキームの最内ループの元がこんなもん:
double const *v = VV + (La+Lb)*(k-1) + La; double *v2 = VV + (La+Lb)*(k-1); for(double const*const ve = VV + (La+Lb)*(k-1) + La + STEPLEN; ve != v; v2+=2, v+=2){ v2[0] = CA2 * v[-2] + CA1 * v[-1] + C0 * *v + CB1 * v[1]; v2[1] = DA2 * v[-2] + DA1 * v[-1] + D0 * *v + DB1 * v[1]; }
配列をインターリーブして使ってるが,長さ 2 のベクトルを一つ左の値と現在地の値で更新している.ちょうど 128bit のデータになってるから SSE2 にぴったりなので,SSE2を使ったコードが下.当然のごとく配列の alignment を 16byte に合わせておく.
__m128d A2 = _mm_setr_pd(CA2, DA2); __m128d A1 = _mm_setr_pd(CA1, DA1); __m128d A0 = _mm_setr_pd(C0 , D0 ); __m128d B1 = _mm_setr_pd(CB1, DB1); double const *v = VV + (La+Lb)*(k-1) + La; double *v2 = VV + (La+Lb)*(k-1); __m128d pv = _mm_load_pd(v-2); for(double const*const ve = VV + (La+Lb)*(k-1) + La + STEPLEN; ve != v; v2+=2, v+=2){ __m128d r = _mm_shuffle_pd(pv,pv,_MM_SHUFFLE2(0,0)); __m128d op = _mm_shuffle_pd(pv,pv,_MM_SHUFFLE2(1,1)); r = _mm_mul_pd(r, A2); op = _mm_mul_pd(op, A1); r = _mm_add_pd(r,op); pv = _mm_load_pd(v); op = _mm_shuffle_pd(pv,pv,_MM_SHUFFLE2(0,0)); op = _mm_mul_pd(op, A0); r = _mm_add_pd(r,op); op = _mm_shuffle_pd(pv,pv,_MM_SHUFFLE2(1,1)); op = _mm_mul_pd(op, B1); r = _mm_add_pd(r,op); _mm_store_pd(v2, r); }
xmm レジスタがもう一本あればもう少しスマートなのだが... 上のコードより場合によっては下のほうが速い.アセンブラ上は定数のうち一つをメモリから取るようになるが,並列に実行できる命令が増えるので速いのかな?
__m128d op1 = _mm_shuffle_pd(pv,pv,_MM_SHUFFLE2(0,0)); __m128d op2 = _mm_shuffle_pd(pv,pv,_MM_SHUFFLE2(1,1)); op1 = _mm_mul_pd(op1, A2); op2 = _mm_mul_pd(op2, A1); __m128d r = _mm_add_pd(op1,op2); pv = _mm_load_pd(v); op1 = _mm_shuffle_pd(pv,pv,_MM_SHUFFLE2(0,0)); op2 = _mm_shuffle_pd(pv,pv,_MM_SHUFFLE2(1,1)); op1 = _mm_mul_pd(op1, A0); op2 = _mm_mul_pd(op2, B1); op1 = _mm_add_pd(op1,op2); r = _mm_add_pd(r,op1);
うーむ,ここら辺になると Pentium4 の仕様を良く調べないと全く分からない.
- Comments: 0
- TrackBack (Close): -