2010年8月31日火曜日

KTH Summer School Summing Up

はい,スウェーデンのサマープログラムについて軽く語ろうかと.

8月16日~8月28日まで,"Introduction to High Performance Computing" という題でスウェーデン王立工科大(KTH)のサマープログラムに参加していました.

授業料は1700スウェーデンクローナ(当時のレートで約20000円)と格安.

飛行機代は仕方ありません.宿泊代は大学が全額負担してくれました.

なーんてやつが先週の金曜日にちょうど終わり,昨日帰国し,今日おうちにいるということでこれを書いているのです.


ちなみに授業スケジュールは,

午前は50分×3コマ 午後は50分×1コマ+4時間のLab or 5時間のLab

という鬼畜モノでした.

しかし学んだことは多い.

マルチコアプロセッサのアーキテクチャのお話
OpenMPを用いた共有メモリプログラミングの基礎とLab
MPIを用いたメッセージパッシングプログラミングの基礎とLab
OpenMPとMPIのハイブリットプログラミングのお話とLab
GPUとOpenCLの導入のお話(残念ながらLabはなし)
シリアルコードの最適化

とか他にも細かいことをちょこちょこやりました.

よかった点
・実際にプログラミングができて実践的な授業だった.

・2週間にしては実に濃い内容だった.

・スウェーデン人英語うまいw

・なぜか朝ごはんにサンドイッチ,3時におやつが出るというもてなしがあったw

・授業終了後のプロジェクトワークがあって,帰国後でも取り組んでよいことになっている.

不満な点
・KTHの学生じゃないと印刷ができない.
 Labのインストラクションも印刷できずやりずらい.家で復習できない.ノートがまとめにくい….E-ticketのプリントもわざわざ他人に頼んだ.

・用意された滞在場所が普通のアパートでインターネットが契約式.
仕方ないんですけどね.インストラクションもスウェーデン語でどうしようもなかった.そもそも2週間ならわざわざ契約したくないし…

・なのに学校の図書館は8時に閉まる.
 ひどす!授業は朝9時から6時までなのに!いつネットしろって言うんですか!w

・Welcom PartyがWelcomeじゃない.
 Welcomeパーティというからにはある程度形が必要でしょう.適当にご飯配って以上って….スウェーデン人はスウェーデン人で話し込んでるし,知らん人通しがお互いが話しかけられる雰囲気ゼロ.

・教員は交代性なのだが,明らかに準備不足なひどい授業もあった….

・Labのパートナー編成に対して完全に放置
 じゃあ二人一組でグループ作ってーって言っておいて,放置.チームメンバーどうなったかきちんと管理して,組めてない人にはランダムでもいいから何か処置とったらいいじゃないですか.普通に一人でやってる人いたろ.
俺も最初は台湾人と二人でやってたけど,そいつが超~~ギークで,彼は終始Labと全然関係ないプログラミングしてて,結局事実上俺も一人プレイだったのだが(これは個人の問題だが…).
 わざわざ台湾とか中国とか日本とかタイとかから学生来てるんだからさ,違うバックグラウンドと国籍持った人間がチーム作りやすい環境があったらうれしかったな.本当はスウェーデン人とチーム組んでみたかったけど,そういう雰囲気じゃなかったし….

フィンランドのサマープログラムに行った人はパーティとか多くて逆に友達が作りやすい環境だったらしいのがちょっとうらやましい.

なーんてことを言ってきましたが,他力本願なこと言ってはいけませんよね.自分で積極的に声を掛けていかなかったのがすべてですから.


ま,自分なりに楽しんできたんで,大満足です!週末には観光もできたんでok!本当にきれいな国ですよ.もうはぁ~~って感じになりました.

気が向いたら自分の復習も兼ねて具体的な内容の細かいこともメモしていきたいなー.

今日は以上!

2010年8月27日金曜日

iPhone 4 SIMロックフリー版が使えるようになるって???

日本通信がSIMロックフリー版iPhone4向けの通信サービスを始めました.

http://www.bmobile.ne.jp/sim_tm/index.html

やべーこれはいい.月額6260円と,私としては少々高いがそれを差し引いてもほしいと思ってしまった理由がある.

まず,私が「iPhoneちょっと気になるけどまーいいや」と思ってた理由は

1. SIMロックかかってるじゃん海外留学しても使えねージャン.
2. 金無いし.

でした.

--------------- 動機その一 ---------------
まず1番は文字通り解決.SIMフリーで通話は可能でしたが,iPhone向けのパケ放題プランを提供しているキャリアが今までなかったのです.しかも回線はFOMAハイスピード.やべーやべー.

しかしそれだけならまだ買おうとは思いませんでした.金が気になります.

--------------- 動機その二 ---------------
しかしなんと,このプランなら b-mobile U300回線 でテザリング使い放題!!

Bestエフォートで300kbpsですが,僕の価値観としては「遅くてもいいからどこでもつながるパソコンでネットが使える環境がほしい」なので問題ないです.

今e-moblieで月280円スタートの定額プランに入っていますが,もうこれは放置で乗り換えが可能です.

--------------- 動機その三 ---------------
まぁ,これはもともと持ってた動機ですが…
何たって…アプリ開発したいじゃん!あんな面白そうなおもちゃ他にないですよw
実際10月からインターンでiPhoneアプリ開発することが決まってるし,もう遊ぶしかないですってw

------------------------------------------

てなわけで,購入の方向へ.
---------------- 購入手順 ----------------
シンガポールに行く友人にSIMフリー版iPhoneをおつかいしてもらう.
16GB版でS$888(約60000万円)
日本でSIMフリー買おうと思ったら2倍近くかかるようなのでこれを狙うしかない.

11月からプログラミングのバイトを始める.お金をもらいながらスキルアップしたい♪

------------------------------------------

何か楽しみになってきた♪

---------------- 裏技 ----------------
ちょっと調べてたらいけなそうな裏技を発見.

日本通信はiPhone4以外の通常のSIMロックフリー版のプランも提供している.

http://www.bmobile.ne.jp/sim_t/index.html

価格は月額3960円と安い.
iPhone3GSでの動作は確認済みのよう.問題はiPhone4はmicroSIMカードを使っていることにある.

それを解決するアイテムがこのmicroSIMカッター

これでSIMカードをちょん切ってiPhone4に差し込めば使えるんじゃね?という話である.もちろん動作確認はされてないので自己責任の領域である.

まぁテザリングはできませんが,興味はありますね.これから情報をチェックしていこうかな.

個人的に気になった記事たち
http://hondamarlboro.blog112.fc2.com/blog-entry-92.html#comment-top
http://www.funkyblog.jp/2010/08/iphone_sim.html
http://blog.livedoor.jp/rgf/archives/65392543.html
http://blog.livedoor.jp/rgf/archives/65398962.html#more

2010年8月26日木曜日

渡米前の英語勉強③

渡米前の英語勉強①
渡米前の英語勉強②

11月: TOEIC 850 TOEFL-ITP 558
良く分からんがここで何かが起きた.牛丼チェーンのバイトを止めた分,急に時間が出来た.平日は7時間,休日は10時間以上は英語の勉強をしていた気がする.

このときまで抱えた悩みとしては,文法,単語,長文はやればやるだけ出来るようになるのが実感できたのだが,私は本当に本当に×100000リスニングが苦手で,どうしようもなかった.しゃれになってなかった.リスニングのほうが何故か出来る,という人が心の底からうらやましく,憎くもあった….

でもあきらめたらそこで終了です.通学,トイレ,食事の時間は常に聞きなれた英語を1倍速,1.5倍速または1.8倍速で聞き続け(もちろん聞き流しではなく),人気があればマンブリング,人気がなければシャドーイングにスイッチして常に英語に神経を研ぎ澄ます練習をしていた.
これとは別に毎日ディクテーション,リスニング練習,模擬試験を通して英語は聞き続けても,まだ全然リスニングが出来るようになる気がしなかった.

そしてTOEIC当日を迎えた.時計を忘れタイムマネジメントが出来なかったが何故か念願の800を超える.ずーーーーーーっっと目標にしていたから,まずは一安心.ほっ.ここまでの時点で既に何度もへこたれてたから,もしここで800超えてなかったら多分マジで心が折れてたかもしれない… あー,怖い怖い…

そしてTOEFL-ITPも550を何とか超えた.リスニングが半端なく苦手だったので,文法で満点を取ることを目標に勉強していた.てかここでしか取れないくらい未だにリスニングはしょぼいままだったのよ… ちなみにこれはオススメ.

12月: TOEFL-iBT 82 TOEFL-ITP 587
本番はこの月です.TOEICは中ボスです.ラスボスのiBTが待っていたのです,気を抜かずにせっせか勉強しました.特にiBTに関しては試験時間4時間の上,スピーキングとライティングがある.極めつけは,この試験文法がないくせに,リーディングセクション以外すべてリスニングが必要とか,もう俺をいじめているとしか思えん試験でした(ETSも元々そういう実践力の無い人間をふるい落とすべくこういう形式にしたらしいので,まぁ理にはかなっているとは思います).

そのあたりの対策なんてまだしてなかった上,時間もなかったので,もう思い切って実家に帰って,家事を全部親に任せ,起床時間は全てTOEFL対策に費やしました.
そしてTOEFL-iBT当日.リスニングが鬼過ぎて,もう全然何言ってるか分からないまま終わりました.どうせ無理だろーなーと思って到着した結果を見たら…80点超えてる!!!
唯一の得点源のリーディングで奇跡の満点-1点を取り,この窮地を乗り越える!!!

これは人生でトップレベルにうれしいときでした.個人的には大学受験の時より衝撃はでかかった.先の見えない勉強でいつもいつも不安で,結果も出せず,もう無理と何回あきらめかけたか分かったもんじゃなかったです.
あきらめないで勉強してよかったって,心の底から思いました.今だからもう言えるけど,とんでもない勉強時間割いていたのに,やってもやっても全然出来るようにならなくて,涙を流すことさえありました.

ちなみにリーディングはこれがよかった.単語は絶対これ!!!

そしてクリスマスイブにTOEFL-ITPを受ける.正直もうスコアは要らなかったので相当リラックスして受けたら自己ベスト更新.自分今まで体に力が入りすぎてたのかもしれない.

そしてサボってた卒論開始…そこには地獄の2ヶ月が待っていました….



ということで留学前の勉強記録は以上.このあと翌年8月の留学までは,留学生の友達と会話の練習したのと,単語の勉強くらいで大して勉強していませんでした.
あ,単語の語源学習は実に楽しいですよ.参考までにこれこれ

あ,これが英語スコアのグラフ.帰国後までついちゃったけどもう直すのめんどい.
$エンジニアのたまご


そして渡米.もちろん私の英語なんてカスもいいところです.からスタートでした.

アメリカでの奮闘気はまた次回.

渡米前の英語勉強②

渡米前の英語勉強①
渡米前の英語勉強③

------------ 2008年(学部四年) -----------------
4月:
そろそろ英語耳のルールにも慣れてきた.でもやはりリスニング力は向上しない.そこでweb調査をしピンと来たのがこれ.KHシステム.我が英語学習経験上,最強のインパクトを与えたこの本.一日30分毎日これに費やした.これと平行してディクテーションも毎日行った.
そういえばiknowとか言う当時流行ってた単語学習サイトを使っていたなぁ.

5月: TOEIC 760
KHシステムにはまりにはまる.もちろんディクテーションも毎日続けていた.さらにこの文法参考書を入手.これはまた革命的に分かりすい参考書だった.更にiknowもやっていて,一日3時間は英語の勉強に時間を割いていたような気がする.
バイトを4つ程掛け持ちしていて思うように勉強の時間が取れないとぶーぶー言っていた気もする.

6月: TOEIC 770 TOEFL-ITP 519 TOEFL-iBT 62 英検準一級 一次試験合格
単語が苦手なのを意識していたので,ここで準一級を受験.とりあえず単語を覚えまくった.この時期は一日6時間は英語の勉強をしていた気がする.もちろんリスニングもディクテーションもシャドーイングも文法も継続して.あ,本紹介はあとで追加.
それにもかかわらず,TOEICの点数が上がらず,TOEFLもだめだめ.自分が出来る限りすべての時間を使って英語の勉強をしていただけに,悔しくて悔しくて死にたいほどだった.このあたりから自分は一生英語のスコアが上がらないんじゃないかという恐怖に駆られ始める.

7月: 英検準一級 二次試験合格
さすがに大学院入試の勉強をしないと大変なことになるので,英検終わってからは英語を中断…

8月:
大学院入試のため引き続き中断.さすがに後半はバイトを休みまくる.

9月:
入試に受かった!記念に前半は旅行.後半は休みに休んだ分毎日バイト.

10月: 焦る.
TOEFLの締め切りは12月.はっきり言って,留学可能点数に遠く及んでいない状態から3ヶ月も英語の勉強をしていなかったんだから,能力が落ちているに決まっている.ここからTOEFLに特化した勉強を開始する.
東北大学主催のプラクティカルイングリッシュコースをここから3ヶ月間受講し,刺激を受ける.自分のひよっこさを再確認.今思えばあれはいいコースだったと思う.とにかくスピーチなりディスカッションなりをやらせるタイプの授業で,あれがなかったらスピーキングが必須のTOEFLiBTは終わってたと思う.

そしてクライマックス(?)へ続く

渡米前の英語勉強①

渡米前の英語勉強②
渡米前の英語勉強③

おいらの交換留学前の英語学習法を忘れぬうちに記述しておきたいです.時系列がいいかな.

ちなみに,以下に書くことはあくまで一人の人間の試行錯誤の例で,英語上達を保障するもではありません.
世の中には色々な考え方を持った方がいらっしゃると思いますので,私の考えを不快に思う人がいらしたら,申し訳ありません.


まず,おいらは「これさえやれば~」「楽して~」「聞き流すだけで~」系統のシリーズが

大嫌いです

最近石川遼君を使って,「聞き流すだけで口から英語が飛び出す」の教材宣伝がいたるところにありますが,あれ見るたびに不快です.(遼君にとやかく言うつもりはありません.彼は彼なりに努力をしていると思うので,尊敬に値します.むしろこんなくだらない宣伝に引っ張り出されてる被害者ではないでしょうか.)
そもそも「聞く」ことによって「話せる」ようになるってどんなつながり?素振りしてればピッチングがうまくなるってことと変わらない気がするのですが.(学者ではないので詳しくありませんが,相関が完全に無いとは言い切れないかもしれません.しかし的外れなのではないかなと,私は考えています.)

もし実際にそんな「楽してシリーズ」モノが期待通りの効果を持っていたら,日本はおろか世界中で大ヒット,文科省だって教育に取り入れること必至です.
しかし未だかつてそんなものはありません.なぜ?

そもそも語学なんて楽して身につけられるほど生易しいものではないと思うのです.
スポーツみたいなものではないでしょうか.

「これさえやれば一週間後にはレギュラーだ!」なんて本があったって信用しますか?
みんなスポーツは継続が命だって分かっているはずです.

なのにどうして「これだけやれば一週間で英語がペラペラ」等の甘い言葉には軽く釣られるのでしょう.

この二つの例は本質的には変わらないはずだと私は考えています.その信念の元勉強した私の学習記録をさくっと.

------------ 2007年(学部三年) -----------------
英語なんて全く興味なしでした.
何となく留学に憧れる.当時TOEIC470 TOEFL420 (後者は下から2%に入るという,奇跡的に低い点数だったらしい)

で,バイトで稼いだ金を全部はたいてカナダの語学学校へ行き,失望.交換留学をガチで決意.

9月: TOEIC 590
帰国直後にTOEICを受ける.なぜか前より点数が上がってる.

10月~12月:
とりあえず良く分からんがやるか!と,TOEICのリスニング教材をひたすら毎日やった.
寝る前には10分でも必ずやった.問題文を聴いた瞬間に答えが分かるまで同じ教材をやり続けた.

------------ 2008年(まだ学部三年) -----------------
1月: TOEIC 720
まぁよくわからんが700越え.しかしTOEIC 720なんて何も出来やしません.そのくせ何か英語が出来た気になってる一番あほな時期.今思えば本当に恥ずかしい.

2月:
でもリスニングが苦手なのは意識してたそこでこの本に出会う.英語耳.
寝る前に必ず10分~20分はCDを聞きながら音読練習をした.

3月: TOEIC 745
東北大学がトフルゼミナール講師を招いてTOEFL集中講座を実施.これに参加する.
周りのレベルの高さに絶望.TOEICのスコアも上がらず自分のちっぽけさを再確認.
引き続きTOEICリスニング教材をやりまくり,英語耳も毎日やった.
ここでさらにであった教材がこれ.えいご道場.ディクテーションソフト.めっちゃ厳しいソフトです.ここから毎日ディクテーション生活が始まる.始めは一時間近くこの勉強に時間を割いていた…

続く

行列積計算高速化作戦@Sweden

今スウェーデン王立工科大という,国内最強の理系大学でサマースクールを受けています.
"Introduction to High-Performance Computing"
というテーマでコードの最適化や並列化についてお勉強中.

さて,現在明日締め切りのプログラミングコンテストに向けてコードを作成中.

NxNの行列の積計算をするプログラムを高速化せよとのこと.プログラム自体は非常~~~に単純なのですが,この最適化を考えると実に奥が深い.

何も考えずに書くとこうでしょう.
void MulMat0(double result[],
const double matA[], const double matB[], const int size)
{
double sum;
for(int j=0; j < size; j++)
for(int i=0; i < size; i++) {
sum=0;
for(int k=0; k < size; k++)
sum += matA[i*size+k]*matB[j+k*size];
result[i*size+j] = sum;
}
}

2次元配列にしてないから分かりにくいけど,良くある記述ミス.キャッシュヒット率が低下し,実はこれは良くない.

キャッシュヒットを考慮すると,
void MulMat1(double result[],
const double matA[], const double matB[], const int size)
{
double sum;
for(int i=0; i < size; i++)
for(int j=0; j < size; j++) {
sum=0;
for(int k=0; k < size; k++)
sum += matA[i*size+k]*matB[j+k*size];
result[i*size+j] = sum;
}
}

ええ,i とj ひっくり返しただけです.これだけでメモリアクセスのオーバーヘッドが大幅に削減して相当早くなります.

お次はVectorize. キャッシュヒットと条件分岐判定回数の低減,SIMD命令セットの利用を意識すると,
void MulMat2(double result[],
const double matA[], const double matB[], const int size)
{
double sum[4], temp;
for(int k=0; k < size; k++) {
for(int i=0; i < size; i+=4) {
sum[0] = matA[    i*size+k];
sum[1] = matA[(i+1)*size+k];
sum[2] = matA[(i+2)*size+k];
sum[3] = matA[(i+3)*size+k];
for(int j=0; j < size; j++) {
temp = matB[k*size+j];
result[    i*size+j] += sum[0]*temp;
result[(i+1)*size+j] += sum[1]*temp;
result[(i+2)*size+j] += sum[2]*temp;
result[(i+3)*size+j] += sum[3]*temp;
}
}
}
}

こいつはさらに速い.前述MulMatの3倍速くなった.4倍にならないのはメモリオーバーヘッドのせいでしょう.あと,resultはあらかじめ初期化しておく必要がある.あと,この時点でハードコーディングになるので,4の倍数の行列同士の計算しか出来なくなってます.

さてさて,お次は更なる効率化.ブロッキングです.キャッシュに残っているデータが必要となる要素の計算を優先し,断片的な解から順に加算していく.ブロッキングのサイズが適切であれば,同じデータをメモリから繰り返し呼び出す回数が少なくなります.条件分岐判定の回数は増えますが,メモリオーバーヘッドに比べればカスみたいなものなので,超速くなります.
void MulMat3(double result[],
const double matA[], const double matB[], const int size)
{
double partSum;
static int block = 4; // depends on a system
for(int i=0; i < size; i++) {
for(int j=0; j < size; j++) {
partSum = 0;
for(int k=0; k < block; k++) {
partSum += matA[i*size+k]*matB[k*size+j];
}
result[i*size+j] += partSum;
}
}
}


今度はMulMat2とMulMat3を合体させましょう.
void MulMat5(double result[],
const double matA[], const double matB[], const int size)
{
double temp, partSum[4];
for(int i0=0; i0 < size; i0+=BLOCK) {
for(int j0=0; j0 < size; j0+=BLOCK) {
for(int k0=0; k0 < size; k0+=BLOCK) {
for(int i=i0; i < i0+BLOCK; i++) {
for(int j=j0; j < j0+BLOCK; j+=4) {
partSum[0]=0;
partSum[1]=0;
partSum[2]=0;
partSum[3]=0;
for(int k=k0; k < k0+BLOCK; k++) {
temp = matA[i*size+k];
partSum[0] += temp*matB[k*size+j  ];
partSum[1] += temp*matB[k*size+j+1];
partSum[2] += temp*matB[k*size+j+2];
partSum[3] += temp*matB[k*size+j+3];
}
result[i*size+j] += partSum[0];
result[i*size+j+1] += partSum[1];
result[i*size+j+2] += partSum[2];
result[i*size+j+3] += partSum[3];
}
}
}
}
}
}


さぁ,無駄なアドレスの計算も無くしましょう.先頭アドレスをストアして自分でアドレスを指定.これでさらに早くなります.
void MulMat7(double result[],
const double matA[], const double matB[], const int size)
{
double temp, partSum[4], *ptemp;
const double *ptempc;
int k;
for(int i0=0; i0 < size; i0+=BLOCK) {
for(int j0=0; j0 < size; j0+=BLOCK) {
for(int k0=0; k0 < size; k0+=BLOCK) {
for(int i=i0; i < i0+BLOCK; i++) {
for(int j=j0; j < j0+BLOCK; j+=4) {
partSum[0]=0;
*(double *)(partSum+1)=0;
*(double *)(partSum+2)=0;
*(double *)(partSum+3)=0;
ptempc = &matB[k0*size+j];
for(k=k0; k < k0+BLOCK; k++) {
temp = matA[i*size+k];
//ptempc = &matB[k*size+j];
*partSum += temp*(*ptempc);
*(double *)(partSum+1) += temp*(*(double *)(ptempc+1));
*(double *)(partSum+2) += temp*(*(double *)(ptempc+2));
*(double *)(partSum+3) += temp*(*(double *)(ptempc+3));
ptempc = (double *)(ptempc + size);
}
ptemp = &result[i*size+j];
*ptemp += *partSum;
*(double *)(ptemp+1) += *(double *)(partSum+1);
*(double *)(ptemp+2) += *(double *)(partSum+2);
*(double *)(ptemp+3) += *(double *)(partSum+3);
}
}
}
}
}
}


さーさー,お待ちかね(?)の並列化です.めんどいのでOpenMPの2行でさくっと.Visual Sutudio なら2008で動作確認済み.プロジェクトのプロパティ-言語でOpenMPを有効にして,をインクルード.詳細はググってみてください.
void MulMat9(double result[],
const double matA[], const double matB[], const int size)
{
double temp, partSum[4], *ptemp;
const double *ptempc;
int i, j, k;
#pragma omp parallel shared(matA, matB, result)
for(int j0=0; j0 < size; j0+=BLOCK) {
for(int k0=0; k0 < size; k0+=BLOCK) {
#pragma omp for private(i, j, k, partSum, temp, ptemp, ptempc)
for(i=0; i < size; i++) {
for(j=j0; j < j0+BLOCK; j+=4) {
partSum[0]=0;
*(double *)(partSum+1)=0;
*(double *)(partSum+2)=0;
*(double *)(partSum+3)=0;
ptempc = &matB[k0*size+j];
for(k=k0; k < k0+BLOCK; k++) {
temp = matA[i*size+k];
//ptempc = &matB[k*size+j];
*partSum += temp*(*ptempc);
*(double *)(partSum+1) += temp*(*(double *)(ptempc+1));
*(double *)(partSum+2) += temp*(*(double *)(ptempc+2));
*(double *)(partSum+3) += temp*(*(double *)(ptempc+3));
ptempc = (double *)(ptempc + size);
}
ptemp = &result[i*size+j];
*ptemp += *partSum;
*(double *)(ptemp+1) += *(double *)(partSum+1);
*(double *)(ptemp+2) += *(double *)(partSum+2);
*(double *)(ptemp+3) += *(double *)(partSum+3);
}
}
}
}
}

読みづらいことこの上ない.
ちなみにBLOCKのサイズはプロセッサによって変わります.僕はめんどいので適当に32にしたら結構速くなったので,これでいいや,てな感じです.

ついでに,一番最初の処理にOpenMpによる並列化処理を施したものも追加.
void MulMatP(double result[],
const double matA[], const double matB[], const int size)
{
double sum;
int i, j, k;
#pragma omp parallel for private(i, j, k, sum) shared(matA, matB, result)
for(i=0; i < size; i++)
for(j=0; jsum=0;
for(k=0; ksum += matA[i*size+k]*matB[j+k*size];
result[i*size+j] = sum;
}
}


いよいよ測定結果です.以下の通り.
エンジニアのたまご
ありゃ~キャッシュ考慮とか単純OpenMP実装あたりが思い通りの結果じゃない!!!
でもとりあえずベクタライズ×ブロッキング×アドレス計算最適化×OpenMPが最強で良かった.

てなわけで学校のLinuxでまわしても動かないorz
もうめんどいから出すのやめたwこんなプログラムで勝てるわけないし,てかハードコーディング禁止だしw

あとサマースクールも2日ですね.終わるとなると寂しいものです.

2010年8月24日火曜日

よし,簡易自分サイトが出来たぞ

自分のWEBサイトを作りたいなー

と思っていましたが,今からHTMLいじってうんたらなんて正直やってらんない

ということでPenn State Lifeで使ってたアメブロを流用.

ちょっと明るいデザインに.


これでもう少しマニアックな話が出来るようになったぞw わくわく♪