前回のデモのソースコード

前回公開したデモのソースコードを公開。 デバッグ用コードや見た目が地味で没にしたコードもコメント化されて残ってます。nasm -f bin -o ファイル名.bin ファイル名.asm でブートセクタ用バイナリを生成 nasm -dMSDOS -f bin -o ファイル名.com ファイル名…

OSが無くても動くデモ

前回作ったプログラムのブートセクタ版を公開します。 使用するときは自己責任でお願いします。 B8 20 7C 8E D0 BC 00 16 B8 13 00 CD 10 31 D2 B9 3F 00 51 89 CB 88 DE 88 DD B8 10 10 CD 10 59 E2 F1 B0 B6 E6 43 FC B8 20 7C 8E D8 BF 00 16 B9 00 10 60…

510bytesで何ができるか

PCの電源を入れてからOSが起動するまでをおおまかに説明すると 1, CPUが初期化されてBIOSにあるプログラムが実行される 2, BIOSは設定されたメディア(ハードディスクとかフロッピーディスク等)のブートセクタと呼ばれる最初の512bytesを読み込んでメモリに書…

ループカウンタのi,j,k

C言語系ではよく以下のようにループカウンタにi, jという名前の変数を使う。 for(int i=0; i<3; ++i) for(int j=0; j<7; ++j) { printf("%d, %d\n", i, j); } 今まで外側のループカウンタから順番にi, j, k, ...という変数名を付けていたがこのやり方には欠…

cygwinにboostインストールメモ

・前準備 boost 1.35.0ではmpiが使えるようなのでcygwinにmpich2をインストールしてみた。 Pythonが入ってないとconfigureで失敗するので入れておく。 普通にソースコードをゲットして ./configure make make install でインストールできた。 自宅に一台しか…

g++でwcharが使えない

http://d.hatena.ne.jp/gpuppur/20080420 でビルドしたgccでは boost-1.35.0をビルドするときにboost::serializeのwchar_t関連を使っているファイルでコンパイルエラーがでる。 ググったところ http://d.hatena.ne.jp/y-hamigaki/20070327 iconv.hがないとli…

cygwinにgcc-4.3.0(CとC++のみ)をインストールする

cygwinのsetup.exeでは少し古いgcc-3.4.4しかインストールできないようなので現在最新の4.3.0をインストールすることにした。 ここにやり方をメモしておく。 きちんとgccをインストールしたい方はgccのドキュメントを参照して下さい。 必要なpackageのリスト…

へんてこりんに再帰したテンプレートパターン

C++のCRTP(Curiously Recurring Template Pattern)の話。CRTPでは継承クラスの関数を使って基底クラスの関数を実装することができる。 #include <iostream> template<class T> class base { const T& get_this() const { return static_cast<const T&>(*this); } void p_impl() const { st</const></class></iostream>…

マクロの呪いでお先真っ黒

boost_1_34_0のnumeric ublasのソースコードを読んでいると std::swap_ranges (data_, data_ + (std::max) (size_, a.size_), a.data_); という感じのstd::maxやstd::minを括弧で囲んだ式をちょくちょく見かける。 それは標準のテンプレート関数なんだけど、…

sourceforgeのsubversionにimportした

以前、gpuppurのソースコードをsourceforgeのsubversionにimportしようとしたけどsshあたりでうまくいかず断念していた。 昨日再び挑戦したところ、すんなりとimportに成功した。以前使っていたcygwinのsshに不具合でもあったのだろうか。

vimの補完機能

vimには覚えきれないほど機能があるんで、ときどき http://vimdoc.sourceforge.net/ を読んで使い方をちまちま覚えてたりする。 今日はかなりいい機能を発見した。 overview->usr_24.txt Inserting quickly->*24.3* Completion 今まで知らなくて損した。 現…

Real Time Ray tracer

最近はCPU上で動作するRay tracerを開発中。 未踏が終わってしばらくした後、とりあえずoctreeを実装してみたけどあまり速くならなかった。各ノードに子ノードへのポインタを持たせないことによってメモリを節約しキャッシュ効率が少し上がるような設計にし…

データのバックアップと復元のスピード

データのバックアップを取ったり、復元するときの効率について考えてみた。 ハードディスクAから別のハードディスクBへサイズがxのデータをコピーし、その後ハードディスクBからさらに別のハードディスクCへそのデータをコピーすることについて考えてみる。 …

コード芸人!

id:Ozy:20070509>酷い日本のソフトウェア産業 近い将来、ソフトウェアの生産性が飛躍的に向上し、世の中のソフトの大半が自動的に生成、保守、管理されるようになり、単なる作業員プログラマがいなくなるときが来るかもしれません。そしてプログラマは新しい…

新しいPhysXが出るらしい

PC watchの記事にCellFactor: RevolutionのフルバージョンがAGEIAのサイトから無料で落とせるとのことが書いてあったので、久々にAGEIAのサイトに行ってみた。 日本ではPhysXを持っている人は少ないようで、さらにPhysX SDKで何か開発している人は結構少ない…

環境にやさしいプログラミング言語

プログラマーとして地球環境のことを考えると、C++やアセンブリ言語のような実行効率指向な言語がいいかもしれない。 例えば、Javaで書いたプログラムだと計算に1時間掛かるのが、C++で30分で計算できるなら電気代が半分になる。 PHPで書いたサーバプログラ…

GPUPPURのソースコードを公開

Sourceforge.jpにGPUPPURプロジェクトを登録し、GPUPPURのソースコードを公開しました。 GPUPPURプロジェクトページ: http://sourceforge.jp/projects/gpuppur/ GPUPPURのソースコードの特徴は C++で書かれている 今のところVisual C++ 2005でしかコンパイ…

特定条件下ではレイトレはGPUラスタよりも高速?

GPUPPURはGPUとPPUを活用して高速化を狙ってたのですが、PPUに必要なAPIがまだ公開されていないために結局GPU+CPUでレンダリングを行なっています。 それで実際には、多くの場合OpenGLやDirect3Dを使ったほうが高速にレンダリングできるのですが、特定の条件…

g++のエラーメッセージを読み易くする

c++言語でテンプレート関連のコンパイルエラーは非常に読みにくいです。 ですがインデントすれば結構読み易くなります。 例えば以下のようg++からのコンパイル エラーメッセージ src/gpuppur/cpu/cpu_raytracer.hpp:479: error: `void gpuppur::cpu_raytrace…

NVIDIAとATIのGLSL対応の差

今までGPUPPURをNVIDIAのグラフィックスカードだけで開発していたので、テストのためにATIのRadeonX1650Proを取り付けてテストしてみました。 GPUPPURではあまり複雑なシェーダを使ってなかったので問題無く動きましたが他のプログラムでGLSL関連のエラーが…

GPUPPURayでレイトレーシングで環境マップ

GPUPPURayを使ってレンダリングした画像のキャプチャです。 GPUPPURayではレイトレーシング法でレンダリングしているわけですが、キャプチャ画像ではレイトレーシング法によって反射を計算しているわけではなく環境マップを使って擬似的に反射を表現していま…

GPUPPURの進捗

最近日記を全然更新してませんが、GPUPPURの開発が進んでないというわけではありません。ただ、面倒なので更新してないだけですorz とりあえず今までのところできたのは、 ・レイトレーシングするGPUPPURayとラスタライジングするGPUPPURasで(いくつか制約は…

GPUPPURの配布の仕方

多くのC++のライブラリは、ライブラリファイルをプログラムにリンクし、ライブラリ内の関数やクラスを使うソースコードではライブラリのヘッダファイルをインクルードするというふうになっています。GPUPPURでもお世話になっているBoost C++ libraryはインス…

stanford bunny

GPUPPURでstanford bunnyをレンダリングしたのでそのキャプチャ画像を未踏ユースのwikiの自己紹介のページに貼りました。 stanford bunnyは約70k個の三角形からなる図形です。今のGPUPPURのGPUPPURayでレイトレーシング法でstanford bunnyをレンダリングした…

テンプレートとvirtual

しばらく、忙しかったり疲れてたりして更新してませんでした。GPUPPURのほうは予定よりも遅れていますが大きな問題も特に無く開発が進んでいます。 GPUPPURのようにDirectXを使った実装とOpenGLを使った実装の両方を使いたい場合は、普通以下のように書くと…

浮動小数点型でビット演算

人間には波があり、調子のいい日、悪い日があると思いますが、どうやら今日は調子の悪い日のようでした。それでもGPUPPURを開発し続けなければならないので、できるだけ自分の好きなことをやることにしました。そこで最適化をやることにしました。もちろんタ…

他人の書いたコードの警告を出力しない

VisualC++2005を使っているとコンパイル時に標準ライブラリ、boost library, PhysXSDK等のヘッダファイルから大量の警告が発生します。少しでもバグを無くす為に常に警告レベルを最大にしてコンパイルするようにしているのですが、他人の書いた、あまり自分…

openglの仕様書

GPUPPURでOpenGLやDirect3Dのテクスチャを同じように扱えるようなクラスを作ろうと思いどのように設計するか迷ったので、OpenGLのSpecificationsを読んでいました。ちなみに仕様書では関数や定数名の頭にあるgl*やGL_*は省略されて書いてあります。ですので…

文字コード

やっとGPUPPURUTでの泥臭いところから少し3Dに近いGPUPPURayの実装をできるかと思ったら、現実はそうはいきませんでした。 DirectX関連のエラー処理をするマクロでエラーをファイルに書き出すようにしてたので、OpenGLのエラーもエラーログに書き出すことに…

未踏ユースのブースト会議行ってきました

少し遅れて午後からの参加でしたが、いろいろ面白いとか凄い話がいろいろ聴けました。 こんな凄い人々がこれだけ集まったのは生まれ初めて見ました。やはり自分の住んでいるところが田舎だなぁと思いました。 提案内容がよくわからなかったのを具体的に知る…