2009-08-01から1ヶ月間の記事一覧

gprofを使ってみた

Cで10分とか20分とか時間のかかる処理の高速化をやってみたけど、何よりまずはプロファイリングせよということで、gprofを使ってみた。gprofというツールがあることすら知らなかった。 % gcc -pg -Wall -lm -lpthread paint.cのように「-pg」を付けてコンパ…

並列化よりも、まず最適化オプション

円を塗りつぶす処理を並列化してみたけど、ぜんぜん速度向上につながらない。よく考えてみると、並列化したループは、せいぜい50〜60回のものでしかないから、スレッド生成の準備とかオーバーヘッドで相殺されてるのかも。それより、gccの最適化オプションを…

200個の円で任意の写真を近似

100個とか200個の円で320×240ドットの領域を埋めて、それらのサイズや色、位置、透明度をランダムに変えていくことでターゲットの画像に近づけるという処理。既存画像(ppm形式)をロードする関数を書いたので、実際にどんなもんかと思って数千世代とか1万世…

やや顔が見える

円で顔写真を近似する処理で、円オブジェクトのmutateを3種類に分けた。全パラメータを一度にランダムに変化させる、1つのパラメータをランダムに変化させる、1つのパラメータを微妙に変化させる、の3つ。最初のうちは色々試行錯誤させて、最後のほうは微調…

円を少し進化させてみる

バッファを埋めた塗りつぶしの円を、少しずつ変化させて目的の画像に近づけるという処理をやってみた。 int mutate_circle (circle *cir) { cir->col = rand() & 0x00ffffff; cir->alpha = rand() % 100; cir->rad = rand() % 30 + 10; return 0; } 変化させ…

circleの範囲を最適化

バッファ上で円を塗りつぶすとき、 (0...buf.y).each do |i| (0...buf.x).each do |j| if (y - i)**2 + (x -j)**2 < r**2 then buf.buf[i][j] = color end end end とやっていたけど、明らかにチェックする意味がないところまで調べているので、 upper = (y …

structって何だ

以下のコードがいかにも冗長。 if test.within_circle(x, y, i, j, r) > 0 then old = buf.buf[i][j].r buf.buf[i][j].r = (color.r * fore) + (old * back) old = buf.buf[i][j].g buf.buf[i][j].g = (color.g * fore) + (old * back) old = buf.buf[i][j].…

Cの速さにがっくり来た

Rubyで書いたグラフィックバッファ処理と同じものをCで書き直してみた。 #include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct { int height; int width; int **raw; } buf; buf *init_buf (int width, int height) { buf *b; int i, j; b = (buf *)malloc(sizeof(</time.h></stdlib.h></stdio.h>…

CでRubyを低速化

「Rubyによる情報科学入門」(久野靖著)に、グラフィックバッファの例が出てたので、その演習の一部をやってみた。Rubyの構造体(Structクラス)を2次元配列にしてバッファを確保して、ピクセル単位でRGB値をいじるという例。PPMフォーマットがえらく手軽な…

AppleLines

これを見て、AppleLinesというのをやってみた。AppleLinesの動作は、こんな感じ。 % ruby apple.rb 0 apple************************* % ruby apple.rb 5 apple************************* *apple************************ **apple*********************** **…

重複ファイルチェック

写真や動画のフォルダを整理したい。なるべくオリジナルを残そうとするあまり、 cp ./orig/photo.jpg ./flower.jpgのように、リネームしてコピーすることが多い。そんなこんなで結構めちゃくちゃに重複が多い。指定したディレクトリ以下にある同一バイナリを…

読書感想とか

あれこれ読みつつ感想をメモ。 「プログラミング言語Ruby」(まつもと ゆきひろ、David Flanagan著) 淡々とした解説で読むのがつらいと思って放置ぎみだったけど、なぜか面白く感じるようになってきた。ちらちらとRubyの中身を見ながら動作を想像するのより…

follow、被followの比率を円グラフで表示

Twitter APIで戻ってくるXMLをパーズして、それから何がしかの情報を取ってくる場合、もしかしてSAXを使うべきじゃないだろうかと思った。XPathとかって、ある階層のノードをまとめて引っ張ってきてイテレートするにはいいけど、例えばuser/nameとuser/idと…