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 わくわく♪

2010年6月5日土曜日

アメリカを飛び立つ前日につづったものを見つけたぞ

てなわけでコピペします。

----------

明日の朝にアメリカを経ちます.その前にちょっと旅行しました.

フィラデルフィアに行きました.韓国人のお友達のうちに一泊させていただきました.

次の日は東北大からのもう一人の交換留学生と,共通のマレー人の友達とフィラデルフィアを観光しました.

フィリー結構好きです.都会なんだけどどこかのどかな感じが,ボストンちっくでよいなと.

その後4度目のNYに行きました.両親が来たので案内しました.もうあの街で迷うことはないでしょう.

でも今まで僕も見たことのなかった博物館に行って,色々と勉強にもなったし,オフブロードウェイで本場のブルーマンやSTOPMも鑑賞できました.

もうNYで見るもんないぜってくらいツメツメスケジュールにして,いっぱい歩いてもらいましたw

両親にも満足していただいて安心しました.



いやはや、留学を通して、本当に良い経験ができたと思っています.

苦しいことがなかったとは言いませんが,それはむしろ色々と考えるきっかけたくさん与えてくれました.

その分楽しいことは本当に楽しむことができました.

アメリカに留学していなかったら今の自分はいないんだろうなと思います.

・少し将来の選択肢を広げられるようになりました.

・ちょっと世界のことに興味を持つようになりました.

・ちょっと日本のことに興味を持つようになりました.

・大事な仲間ができました.

・楽しく専門の勉強ができました.

・勉強が好きだと言えるようになりました.

そして思うのは,

・ここに来る前よりは英語は扱えるようにはなりました

なんてのは追加程度でいいんだなと思っています.

留学で得られるものって,語学云々よりずっと重要なものがあると思います.

確かに新しい英語の表現とか聞いて盗んで使って,みたいなことができるのも留学の醍醐味だと思いましたし,

それは楽しんでいました。

はじめのころは毎日帰宅すると,英語疲れとストレスで頭痛がしましたが,そんなことも懐かしいですw

あ,僕は特にアメリカナイズはされてないです.むしろ来る前より静かかもしれないので,テンション低かったらすみませんw

強いて言えば,

・アメリカのレストランの,もう食えねーってくらいのあのボリュームが大好きです.

・コーラ毎日飲んでましたorz

・アメリカのステーキ大好きです(もちろんうまい店を選んで)

・アメリカのポテトチップス大好きです.

・フライドポテトが好きになりました.

・フライドチキンが好きになりました.

完全に食はアメリカナイズされてました.ハンバーガーとかホットドッグとかピザとか,全然抵抗なく食べていました.

たまに日本食も食べてましたが.帰ったら焼肉食べ放題行きたいですよ.結局肉ですが.

本物のすしが食いたい.成田空港のお茶漬けが食いたい.鶏のから揚げが食いたい.本物のてんぷらがくいたい.茶碗蒸し.本物の照り焼き.

居酒屋のやわらかい生ビールが飲みたい.やっぱ日本のビールが好きだーー!

あ,カラオケ.ステートカレッジでもできたんですが,一人一時間$10というとんでもない価格でやってました.曲も少ないし.

あんなにケチケチカラオケする経験もなかなかいいものでしたw

結局何がしたいのかわからなくなったんですが,ただの回想でしたw 少しハイになってますね,すべてが終わったから.

何はともあれ,どれもこれもいい思い出ばかりです.僕が偉そうにいえる立場でもないですが,

少しでも興味のある方,むしろ無い方こそ,思い切って外に出たら,何かいいことあるはずです.

むしろ失うものは何もないんです.

そうそうここの学費って日本の国公立の8倍くらい高いのに,差額は払わなくていいんですよ!お得ですw

とにかく,ぜひ外に一回出てみて,ぜひ何かを感じて,それをみんなに発信してください!

このブログを読んでくださった方がどれほどいるのか,なんとなく把握してはいますがw,

私の独特の長文を読んでいただいて,ありがとうございました.

くだらない内容も多々ありましたが,何か少しでも感じていただけたなら僕はうれしいです.

アメリカでこの日記を書くのも最後でしょう.ここで少し謝辞を.

家族はもちろん,友人や研究室のスタッフ,東北大とペンステートの教務と留学生課,先生方とTA方,その他スタッフには本当にお世話になりました.

奨学金の給与も経済的に大きく支えてくれました.この留学を支えてくれた,すべてのつながりに感謝します.

それでは,アメリカ編これにて終了ということで.

Good Bye!!! PennState!!!

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

ツッコミどころ満載ですが、こんなこと考えてたみたいですね。すでにアメリカ編じゃないジャンとかは無しでw

正直日本帰ってから自分の小ささを再確認してばっかなんですがwここででかいこと言ってるくせに中身ちげーじゃんって言われないような行動とります。

ま、そいじゃこれでPennStateLifeは終了となります。ではではまたどこかで!


2010年6月1日火曜日

遅くなりましたが

すみません、もうとっくに帰国してます。



5月21日に成田についてます。5月26日には仙台にきています。



向こうでもう少し書こうと思ってたら、気づいたらネット環境無くなって、気づいたら日本にいて、気づいたら仙台にいて、気づいたら普通に学校通ってます。



基本的に山にいるんで、見つけても幽霊と思わず声をかけてくださいね。



今は実家から片道1時間45分かけてきてます。



しばらくは実家から通います。



まぁでも無駄じゃないです。本読んだり、映画見たりしてるし。特に映画見てると変な目で見られてる気がするけど、まぁ気にしない。



帰国前に載せようと思ってた文書はきっとパソコンのどこかに保管してあるので、あとで上げます。



そしたらこの日記も閉じます。



それではまたー。