2010年2月26日金曜日

OpenCLのセミナー

Check
CUDA&ATI Stream&OpenCL GPUコンピューティングセミナー

『OpenCL入門』 の筆者であるフィックスターズ社協力の下、OpenCLのセミナーがおこなわれるようだ。

開催日は3月19日(金)ということで、この週は就活でちょうど東京にいる予定。もう少ししたら予定も立つだろうから、機を見て参加するかどうか決めよう。

参加費11000円はちと学生には厳しいが、かなり勉強になりそうな予感。そう考えれば安いぐらいだ。

日時: 3月19日(金)16~19時
参加費: 11000円
会場: アスキーメディアワークス社内第1会議室(新宿)

OpenCLはじめました

Check
大阪・東京と移動が多い…。ようやく、じっくりとCLを触れるようになったので実験。

参考文献はインプレスジャパンの『OpenCL入門 マルチコアCPU・GPUのための並列プログラミング

 
128個の配列に入った実数を2倍するだけのプログラム。

以下『OpenCL入門』で印象に残った部分覚え書き。
  1. OpenCLは、マルチコアCPUやGPUなど異なるアーキテクチャを持つ環境(ヘテロジニアス)に適した並列プログラミングのためのフレームワークである。
  2. OpenCLプログラミングは、GPUなどの演算機上で動作するカーネルとそのカーネルを制御するホストの2種類のプログラムを記述する。カーネルはOpenCL C言語というCライクな専用言語で書き、ホスト側はいつもどおりC/C++での記述となる。

2010年2月12日金曜日

C++でnullポインタをdeleteしても安全

Check
タイトルの通りです。
意外と知らない人が多いので書いてみた。C++の規約レベルで安全は保障されているので大丈夫。
(中略)if the value of the operand of delete is the null pointer the operation has no effect.
ただし、(中略)と太字強調は筆者による。
//冗長なdelete
if(ptr)
{
    delete ptr;
}

//楽ちんなdelete
delete ptr;
上記のコードはどちらも安全。delete[]についても同様。
VC++のoperator deleteの中身を見てみたら、内部でnullチェックを行っているようだ。

slaxでレイトレーサ

Check
自作のレイトレーサをslaxに移植して「もらった」。学校の先生が空いた時間を使ってやってくださったようだ。
これにより、企業への作品提出にOSごと送りつけるという、面白いことができるわけだ(迷惑かな?)。

ただ、VC++とG++の違いを意識しなくてはならなくなった。具体的にはインラインアセンブラの構文や一部の関数が異なり、現時点では_MSC_VERマクロの有無で切り分けるようにしている。
float Vec::length() const
{
    float len = x*x+y*y+z*z;
#ifdef _MSC_VER
    __asm
    {
        fld    len
        fsqrt
        fstp   len
    }
#else
    len = sqrt(len);
#endif
    return len;
}
速度重視のため、アセンブラ部分はかなりの部分をベタ書きのハードコーディングにしていたが、インライン関数に置き換えるなどしないとメンテしづらいことがわかった。

wxWidgetsはソースコードレベルでの互換性を保障しているわけだが、実際には結構な部分に手を加えなければならなかった。今後は、移植を前提とした書き方に慣れる必要があるだろう。

C#やJavaなどのVM上で動く言語が主流になるのも頷ける。

2010年2月4日木曜日

GUIでレイトレーサ

Check
面接練習やら、企業への作品提出やらでちと更新が滞り気味。作品制作はぼちぼち進んでいるというった具合で、ようやくwxWidgetsの扱い方に慣れてきた。
 
[Render->Start]を選択すると、今まで作ってきたレイトレーサが画面に描画してくれるという仕組み。こうやって形にすると、いろいろ追加したいことが出てくる。とりあえず、メタセコイアオブジェクトの読み込みとレンダリングは入れておきたい。さらにオブジェクトの設定をGUI側でできるようになりたい。

現在レンダリング速度が情けないこと(4~500ms)になっているので、事前処理として空間分割を行うことで、レンダリング時間の短縮を狙う。さらに、ここからOpenCLによるGPGPUを使用した並列レンダリング(?)にチャレンジ。ここからはハードウェアのパワーを借りようというわけだ。