実用的プログラミング
勉強内容
Java プログラミングの最終課題が完成した学生を対象に,大量データに対する高速処理を行うためのテクニックを学ぶ.
勉強会参加者は,さまざまなプログラミング言語((ただし,C# など Microsoft Visual Studio は実効速度の比較を行うことができないため除外する.なお,参考程度に実行時間を測ることは可能.))を用いて効率のよいプログラムを書くための工夫を調べながら行っていく.
実施内容
- 最終課題で与えたデータ (データの件数 30 件) を利用して最終課題で作成したプログラムを動かす.検索語に
XML' と
retrieval' を与えたとき,検索結果が得られるまでにかかる時間を 10 回測定せよ.またその実行時間の平均値を求めよ. - データの件数を 10,000 件とした場合,実行時間の平均値はどうなるか?
- 上記,2 パタンの結果を,下記,実行結果に書き込み,自身が最速の実行時間となるまでプログラムを改善し続けよ.
- 6 月末頃を目処に,各データの最速プログラム作成者にその内容の解説を行ってもらう予定 ((教員が最速の場合は教員と参加者中最速のプログラムを作成した学生.)).
- 1,000,000 件データは choco:/home/hatano に置いてある.実行してみたい者はトライしてみよ.
データファイル
zip で圧縮されているため,利用する際は解凍した上で使用すること.これらのファイルは一行が一文書に相当する.UTF-8 によるエンコードは不評のため,10,000 件のデータについては ISO-8859-1 エンコードに変更した.
- 30 件用データ (UTF-8 によるエンコードはなし)
- 10,000 件用データ (UTF-8 によるエンコードはなし)
実行結果
データ件数 | 波多野((これはperl,これに負けたら恥だね)) | 木村((メモリ非拡張)) | 池田((C#作成,chocoにて実行)) | 伊藤 | 欅((メモリ非拡張)) |
30 | 00m00.065s | 00m00.230s | 00m00.276s | 00m00.182s | 00m00.121s |
10,000 | 01m19.178s | 02m08.708s | 02m21.730s | 00m32.971s | 00m05.985s |
1,000,000 | 48m18.701s | m._s | m._s | 04m58.983s | 02m23.439s |
@@@@ br プラグインには対応していません。適宜対応してください @@@@
データ件数 | 三宅 | 田村 | 武井 | 竹島 | 寺本 | Ojisan((名古屋の某プログラマ)) |
30 |
m._s |
00m00.177s | 00m00.189s | 00m00.320s | 00m00.182s | 00m00.191s |
10,000 |
m._s |
00m33.883s | m._s | m._s | 00m08.828s | 00m06.804s |
1,000,000 | m._s | 15m52.686s((メモリ128M拡張)) | m._s | m._s | m._s | 03m03.433s |
注意事項
- 実行時間の測定は,各自のプログラム実行環境を統一化するために,研究室の UNIX サーバ,choco.doshisha.ac.jp を使用のこと.データの件数が 10,000 件の場合も同様である.なお,時間の測定は以下のように time コマンドを用いて行う ((余裕がある場合はプログラム中に埋め込みも可.Java や Perl といった一般的なプログラミング言語にはそのような機能を持ったクラス,パッケージが存在する.)).time コマンドは指定したコマンドの呼び出しから終了までに要した時間 (real),ユーザー CPU 時間 (user),システム CPU 時間 (system) を測定するもので,実際にコマンドのコードが CPU を利用した時間はユーザー CPU 時間として表示される.実行結果には real に表示された時間を記入のこと.
$ time java searchEngine
- UNIX サーバのアカウントを持っていない場合は,計算機管理係である池田さん,欅さんまで連絡のこと.
- UNIX OS (choco.doshisha.ac.jp は CentOS 5.1 という OS を使用している) の使い方がわからない場合は,文化情報学実験・演習 IV のテキストや研究室図書を参考にすること.UNIX サーバへのログインの方法がわからない場合も同様である.
- UNIX OS で Java を実行する場合は,java/javac のコマンドがある場所に PATH を通す必要がある.java/javac のコマンドは /usr/java/bin 以下に存在するので,実行前に PATH を通しておくとプログラムの実行が容易である.
- C# でプログラミングを行った場合には,Mono を用いて実行形式を作成することで choco 上で C# のプログラムを動かすことが可能である.C# のアセンブリコードを作成するには,
$ mcs ***.cs
Compliation succeded
ちなみに,Windows 上でコンパイルしたものを mono コマンドを用いて Linux 上で実行することも可能.