ネタつつき52−並列的にFizzBuzzを実装して遊ぶ♪2009-10-16 Fri 13:21
今日お昼休みにFizzBuzzで遊びました♪それが面白かったので記事としてUPします。
FizzBuzzというのは言葉遊びで、プログラマ採用試験になるケースがあるそうです(詳しくは ウイキペディアを参照)最近これが流行っていますので私もやってみたというわけです。 ひとまず素直に直列アルゴリズムを実装すると・・・
※用意した文字列を画面に出力すると時間がかかるので省略しています。
いちいちListインタフェースを使っているのは、なるべくコンテナを抽象化し柔軟にしたかったからです。お遊びにこんなことする必要はないのとも思うのですがひとまず思いついたので素直に実装しました。 次に並列アルゴリズムを実装しました♪
※20分ぐらいで作ったものだから動作保証はしないで注意。
この2つのプログラムを実行すると・・・ 直列アルゴリズム= 580275249ナノ秒(数回のうち悪い値を使用) 並列アルゴリズム= 10668348ナノ秒(数回のうち良い値を使用) なんと処理効率52.4倍! 嘘っぽい数字ですね。多分ちゃんと測定できていないのだと思います(笑) もしくは処理が間違っているかも(笑) |
この記事のコメント質問があります。
直列処理 1. 直列アルゴリズム、直列処理とはそもそもどのようなものを言うのでしょうか? 2. countにfinalを付けないのは何か深い理由があるのでしょうか? 3. Listに型パラメータを指定しないのは何故でしょうか? 4. Listを使う理由として、柔軟にしたかったとありますが、具体的にどこが柔軟になるのでしょうか? 5. numbersは初期化後使っていないので、Arrays.asList(new String[count])の方がいいのではないでしょうか? 6. flagやflag1という名前の変数名を使っているのは何故でしょうか? 7. if-else if-elseを使わないのは何故でしょうか? 8. List.setを使っているせいで、ランダムアクセス出来ないListでの効率が悪いように思いますが、そんなことはないのでしょうか? 9. 用意した文字列を画面に出すと時間がかかるとありますが、計測後に先頭100要素だけ出力、という方法を取らなかったのは何故ですか? 並列処理 1. 一回でも動作の確認を取りましたか? それと最後に、処理効率の話ですが、52.4倍とあります。 インドリさんの使っているPCは、64コアマシンでも使っているのでしょうか? とてもうらやましく思います。
2009-10-17 Sat 21:28 | URL | zozo #u2mjjqPU[ 内容変更]
> 質問があります。
> > 直列処理 > > 1. 直列アルゴリズム、直列処理とはそもそもどのようなものを言うのでしょうか? 単一プロセッサを前提とした従来のアルゴリズムや処理の事です。 > 2. countにfinalを付けないのは何か深い理由があるのでしょうか? ありません。 これは、問題を見てすぐ見て思いついた事を戯れで実装したものです。 なんせ、お昼休憩の20分間で作ったものですから。 > 3. Listに型パラメータを指定しないのは何故でしょうか? いい加減に作っているからです。 > 4. Listを使う理由として、柔軟にしたかったとありますが、具体的にどこが柔軟になるのでしょうか? インタフェースを扱う事によりコンテナが変更しやすくなります。 > 5. numbersは初期化後使っていないので、Arrays.asList(new String[count])の方がいいのではないでしょうか? そうかもね。 > 6. flagやflag1という名前の変数名を使っているのは何故でしょうか? 理由なんてありません。 戯れに実装したものですから・・・ > 7. if-else if-elseを使わないのは何故でしょうか? 好みの問題です。 > 8. List.setを使っているせいで、ランダムアクセス出来ないListでの効率が悪いように思いますが、そんなことはないのでしょうか? ランダムアクセスする必要性がありません。 > 9. 用意した文字列を画面に出すと時間がかかるとありますが、計測後に先頭100要素だけ出力、という方法を取らなかったのは何故ですか? そんな事をせずともデバッガで見れば済む話だからです。 > 並列処理 > > 1. 一回でも動作の確認を取りましたか? > ひとまずデバッガで止めて適切な文字列がセットされているのを見ました。 > それと最後に、処理効率の話ですが、52.4倍とあります。 > インドリさんの使っているPCは、64コアマシンでも使っているのでしょうか? > とてもうらやましく思います。 2コアですが、何故か52倍と出ています。 予想では1.6倍ぐらいだったので、52倍が出た時はびっくりしました。 そして、大受けしました。 それで、この記事を書いたのです。 それがこの記事の主旨です。 この記事を一言で言うと「52倍なんてありえねー」です。
2009-10-17 Sat 22:51 | URL | インドリ #-[ 内容変更]
お手元の最新版とブログ上のコードが違っていませんか?
startIndex と endIndex が初期値 0 のままでされないため、 これだと 0 から 0 の範囲のFizzBuzzスレッドを 多数生成し、最後剰余とコメントがついているスレッドで 0 から 2000000 の範囲を計算することになってしまいます。
2009-10-18 Sun 12:26 | URL | 通りすがり #-[ 内容変更]
> お手元の最新版とブログ上のコードが違っていませんか?
> startIndex と endIndex が初期値 0 のままでされないため、 > これだと 0 から 0 の範囲のFizzBuzzスレッドを > 多数生成し、最後剰余とコメントがついているスレッドで > 0 から 2000000 の範囲を計算することになってしまいます。 あれ?確かにUPしているプログラム足りませんね(笑) 有難う。追加しておきます。
2009-10-18 Sun 15:40 | URL | インドリ #-[ 内容変更]
|
コメントの投稿 |
||
|
||
管理者だけに閲覧 | ||
|
この記事のトラックバック |
| 無差別に技術をついばむ鳥 |
|