「できない」とはどういうことか(2)

 毎年年末この時期は卒業研究における論文部分の追い込みをかけている。本研究室の場合,7月には中間発表代わりにオープンキャンパスで来場者に卒研の報告をしてもらい,11月に〆,12月は論文書きに勤しみ,1月にA4用紙1枚に概要を執筆して発表練習を3回行い,2月中旬の卒業研究発表会に臨む,というスケジュールを組んでいる。今の職場に来て13年になるが,この形になったのはここ4~5年ぐらいである。学生間の意欲・学力・コミュ力の著しい乖離が進み,教師が尻を叩くだけでは何もできない・進まないダメ学生が少数ではあるけれど一定数出現するようになり,具体的なお手本とともにやるべきことを小まめに提示するこの形態になったのである。

 今「ダメ学生」と書いたが,それはつまりワシ自身がそういうダメ学生をダメのままにしている「ダメ教師」であることにも問題がある。それはそうなんだが,これでも着任以来,周りの優秀なる同僚の方々の指導法を参考にして改良を繰り返し,ダメ度は低下しているハズなのである。一応言い訳しておくけど,ワシの研究室は今のところストレートに4年で卒業した学生は全員進路が決まっている(一人留学したのがいたけど)のだから,第一希望の学生がほぼゼロの不人気研究室にしては大分マシな方なのである。まぁ人気がないということ自体がダメ教師であることを物語っている訳だが,「口うるさくてプログラミング学習を強要する短気な教師」という評判があるおかげで,それなりに覚悟してやってくる連中が多いのは良いことである。就職率が良いのもダメ教師の苦言をやり過ごす耐性が付くという効用が大きいのかもしれない。

 ワシの職場は小規模ド田舎大学の割には理工系ということもあって,全ての研究室でかなり真面目に卒業研究をさせている。ウチの場合,ま,理工学部の先生からは「卒業「制作」なんですね」と言われる程度の内容だけど,1年間かけてチマチマやらせるから,真面目に取り組めばそれなりのボリュームのあるソフトウェアにはなるのである。反面,学力的にワシの専門である数値計算のアカデミックな内容をやらせることは大方の学生には無理なので,ダメ学生の卒研に箔付けするためにワシが無理やりその手の内容を押し込んでやったりすることはある。予備知識の欠片もないダメ学生にそれをやらせようとなると最後は修羅場になったりするが,まぁ今のところ卒研発表でダメ出しされることもなく済んでいるから,努力は一応報われていると思うことにする。

 ・・・とまぁ,12年間色んな学生を見てきたが,大方の学生,不人気研究室でも7~8割は苦労しつつも普通に自力で卒業研究をこなしている。レベル的にこちらが妥協するようになったということを差し引いても,就職活動としっかり両立させて内定を取得し卒業していくのだから,教育の効果って大きいなとつくづく感じる。もちろんそれは学生個人の内在的な能力によるものであって,ダメ教師の指導のたまものでは決してない。

 で,少数のダメ学生だが,これをつぶさに見ているとダメな理由が段々わかってきて面白い。大学学部時代の某教員は「ダメ学生は味があって面白い」と言っていたが,その理由が最近分かってきた。こと,この温暖で機械産業に恵まれた静岡の地で育った連中は概してノホホンと高校時代を送ってきたため,「学習」というものを根本的に勘違いしているのである。彼らの多くは「学習」=「作業」だと思っているようで,作業に直結している「思考」がまるっきり抜けているのだ。
 一例をあげると,プログラミングの場合,お手本となるソースプログラムを打ち込むことはできても,そこで使われているテクニックを咀嚼して応用することがまるっきりできない。for文にしろif文にしろ,エッセンスを取り出して他の事例に適用する,ということを「考えもしない」のである。
 「学生なんて所詮そんなもんでしょ?」という指摘は正しいし,ワシもかつてはダメ学生だったから分かるのであるが,この場合,「考えもしない」の次元が違うのだ。やる気がなくて理解力が足りなくて出来ないのではなく,ソースプログラムの打ち込み「作業」そのものが彼らにとっての学習であって,作業を通じて行う「思考」,即ちスキルの習得がまるっきり行われていないのである。せいぜいキーボードの打ち込み練習と,穴埋め問題への脊髄反射的解答でしかないのだ。
 不真面目な学生だから? いや,不真面目なヤンキーなら作業そのものを忌避するのだが,ダメ学生の多くはそうではない。かなり真面目で彼らなりに努力しているのだ。しかしその努力は額に汗して行われる「作業」であって,「学習」とは言えないものなのだ。この事実を理解したワシは愕然としつつも,やらせるべきは「学習」なのだと気づき,卒研は大部分いや8割程度はお手本に依拠しつつも,残り2割は「学習の成果」になるように方向転換したのである。

 卒業研究で,ダメ学生もようやく自分の課題と1対1で向き合うことになり,否が応でも考えるようになる。あまつさえ,就職活動においても卒研内容を聞かれたりするから,どの程度自分が理解しているかも含めて説明をしなければならない。ここにきてようやく「学習」が始まるのである。だから,卒研を課していなかったら彼らは一生「学習」とは無縁だったのかなぁと考えてしまうのである。

 それにしても卒研まで学習しなくていいなんて,それ以前の講義では何をやっていたのか・・・と思うのだが,それについてはまた別稿で考えることにしたい。

「できない」とはどういうことか?(1)

 日々「できない」と格闘しているのがワシの現在の状況である。

 「できない」とはどういうことか? 齢40にもなれば「できない」ことだらけであることは悟っており,その中から「できない」を克服して,あるいは回避して,「できる」ことだけをやって人生過ごしていくことになる。

 「できない」は自分のことだけではない。ワシの場合,教師という仕事柄,学生の「できない」にも日々お付き合いしているのである。その結果,「できない」学生との付き合いを通じて,絶望の谷と歓喜の山の間を乱気流にもまれながらキリキリ舞いさせられている訳である。で,そーゆー状況の中で20年以上もお付き合いしてると,割とそういうのにも慣れてきて肩の力が抜けてきている。

 つーことで,自分の「できない」と,学生の「できない」の両方を割と客観視して見られるようになったかなぁ,と思う今日この頃であるので,折に触れてその諸々の「できない」を綴っていこうと思っているのである。

 つづく・・・かな?

5/31(金) 駿府・晴

 朝方に雨が降ったようだが,出勤時には曇り空,職場についた時には良い天気。暑い日でございました。
 暑い暑いと言いつつ,出張前に確保しておいたGTX780カードを購入
zotac780.JPG
gt620_gtx780.JPG
今ンとこ一番マシなマシンにぶっこんでみる。
inserted_gtx780card.JPG
 Scientific Linux x86_64 6.4の場合,CUDA toolkit 5.5RCをドライバ込みでインストールした後に,もう一回,NVIDIA提供の最新ドライバを入れ直す必要がある。そうしないと,OpenGLライブラリ等が入らないようなのである。二度手間でめんどくさい。
 つーことで,手持ちのTesla C2070,GTX680SLIと今回のGTX780との比較を,cublasとmagma 1.3.0を使って行ってみる。行列ベクトル積と行列積の結果は下記の通り。
sdgemm.png
 う~む,単精度とはいえ3TFってのは凄いな・・・しかもこれ,約9万円のカードである。なんなんだったんだ,かつてPentium3マシンを使ってMPIクラスタを作った苦労はと愚痴の一つも言いたくなる。しかしTeslaってあん摩し早くないな。性能は安定しているところはさすがと思うが,大枚はたいたのにもう廉価版に負けちゃうってのは,ICT業界ではよくあることだけど諸行無常を感じさせる。
 直接法での結果も載せておこう。
direct_method.png
 やっぱり倍精度計算ではイマイチで,実用的かつ高精度な計算をしたければ高いカードを買うべきだという当然の結論になるなぁ。
 9万円のカードで遊んだので寝ます。

Benchmarking on AMD FX-8350(2)

 つーことで,前回に引き続き,FX-8350のベンチマークである。今回は倍精度浮動小数点演算の行列積計算でGflops値を計測。詳細はIntelの解説でも読んでくれたまえ。環境は前回同様,Intel Core i7-3930マシンとFX-8350マシンを用いる。環境は

  • Scientific Linux 6.3 x86_64 (Kernel 2.6.32-279)
  • Intel icc 13.0.1
  • Intel Math Kernel 11.0.1

である。比較検討のため,Intel Math KernelのDGEMMルーチンを用いた場合と,単純な三重ループを用いた場合のGflops値を載せる。
matrix_multiplication.png
 DGEMMの場合,i7-3930が25.5Gflops,FX-3850が21.3Gflopsと大体2割引きぐらい。三重ループの場合は変動が激しいので一概には言えないが,次元数が大きくなると5割引きぐらいで落ち着く。もちろん,1 threadでの計算なので,並列化するとまた違ってくるのだろうが,整数演算同様,価格の割にはがんばってるなぁというのが正直な感想である。
 最近は大規模な線型計算をGPGPUするのが普通になりつつあるので,GTXあたりを乗っけてCPUはフォロー計算程度にする,ということなら高いIntel CPUを使わずにAMDで頑張る,というのもコストダウンのためにはいいことかも。
 さて,並列計算させたらどうなるのか? というあたりはまた年明けに~。

Benchmarking on AMD FX-8350(1)

 AMD主催の勉強会に出席してきたのである。
DSC_1578.JPG
 何でもFX-8350とM/B+弁当をくれるという。で,先週の水曜日,いそいそと東京駅傍の森地上げ屋ビルに引越したてのAMD日本支社に出かけていたという次第である。

 タダでハードを提供してやる代わりに↑これを埋め込んだ記事を書かないと逆さ貼り付けの上,市中引き回しになるとのことである。
 つーことでさっそく組み立てて水枕を組み込んだのである。これが先週末までのお話。
DSC_1585.JPG
DSC_1597.png
 まずはてっとり早く,手持ちのパーツをくみ上げて,16GBのRAMに32GBのUSB 2.0メモリを突っ込んでScientific Linux 6.3 x86_64をインストールした。ブート時にFirmware Bugと表示されるんで肝を冷やしたが,動作そのものには影響がないようである。あとでBIOS updatesしてみよう。

[Firmware Bug]: cpu 0, invalid threshold interrupt offset 0 for bank 4, block 0 (MSR00000413=0xc010000001000000)
[Firmware Bug]: cpu 0, invalid threshold interrupt offset 0 for bank 4, block 1 (MSRC0000408=0xc010000001000000)
[Firmware Bug]: cpu 0, invalid threshold interrupt offset 0 for bank 4, block 2 (MSRC0000409=0xc010000001000000)

 さて,ワシの目的はもちろん多倍長計算のベンチマークテストである。倍精度FPについてはあとでLAPACKベンチを行って確認する予定である。
 いつもの通り,MPFRのベンチマークをやってみる。比較用としてワシの環境下では最速のCore i7-3930Kの実行結果を使ってみるとこんな感じ。
mpfr-bench-fx8350vsCorei7-3930K.png
 AMDの方は,Core i7じゃなくてi5対抗の製品と考えてほしいと言っていたが,結構いいところまで行っているように感じる。勿論i7のほうが高速で,100桁~10000桁計算ではFXの0.97~1.24倍高速になっており,概ね1.1倍といったところ。しかしまぁ価格を見ると(kakaku.com参照)

FX-8350 ¥17,270~¥20,050
Core i7-3930K ¥42,600~¥60,636

ってなもんだから,i7を欲しがる人には,少なくともGMPのMNPカーネルの速度に関してはFXは十分お買い得といえるのではないかな。まぁ,これは整数演算ベースのベンチマークなので,倍精度FPをぶん回したい人に向いているかどうかはまだ不明。
 とりあえず今日の報告はこの辺で。次はマルチスレッド並列性能について比較してみよう。これも結構期待できそうな数値が出ているから,一応,8 coresを謳うだけのことはあるようだ。