今は自分しか踏んでないカウンタ
Counter: ?,
today: ?,
yesterday: ?
おいでませ~ HandBrake for cudaの館へ
元ネタブログ http://miff.blog.so-net.ne.jp/tag/articles/GPGPU
何がしたいか?
HandBrakeをCUDA化する。GPUでDVDを速くエンコしたい。以上。
これでわ、どうにも分かりにくいので簡単に説明すると、HandBrakeというソフトがあります。
- handbrakeとは
http://handbrake.fr/
http://ja.wikipedia.org/wiki/HandBrake
DVDをMPEG4の各フォーマットに変えられるので、嬉しい人は嬉しいはず。ほとんどの人がH.264で圧縮して、大きなメディアに溜め込んで使われているんでしょうね。それとか、PSP用とかiPod用にも変換できるので、貧乏な人はこれを使うしかない。ま、他人のことはいざ知らず。たぶん、GPL。ちょっと前までHandBreakだと思ってた。
- CUDAとは
CUDAというのは、NVIDIAが提供するGPGPU (General Purpose GPU)。GPUってのは、3D映像(現時点で流行りつつあるメガネをかけたりするもの以前のでも)の計算をして表示しているところ。普通はGPUでCPUでやる計算をしたりすることは稀なんだけど、なんか最近3D使わなくても動いちゃってるので、ハードウェアリソースやらがもったいなくねぇ?ということになってました。放っといても熱くなって一部を除いてファンが必需品なぐらいなので、動いてるんだったら画像の出力以外の仕事もしましょう、と、なったんだと思います(後付けか計画的なのかは分からないけれど)。
んで、CUDAですが、下記を読むのが速いかも。使っているのはC for CUDAなのですが、CUDAでいいんじゃないかな、たぶん。
http://ja.wikipedia.org/wiki/CUDA
またかよ、な、wikipediaですが、大抵の場合、コンパクトにまとまっていますし。オーバースペックになりがちなグラフィックボードをゲームとかの使用以外でも有効に使いましょう、ということですね。
- HandBrake for CUDAとは
HandBrakeをGPUで動かそうという目論見。見果てぬ夢。多分、速度が現行のHandBrakeを越えたらお役御免。今のところ、x264部分のCUDA化を組込む感じなんですが、それ以外はCUDA化するつもりはないデス。
これまでのダラダラとした開発進捗
様子見。
- 2008年頃か、それより前(たぶん)、GPGPUというのを何となく知る
- 2009年始め頃、NVIDIAとAMDのGPGPUのSDKを使ってみる。
- AMDがいろいろキモイことが判明。あんまりSDK使いたくないなと思った。
- NVIDIAのSDKをそれなりにいぢくる。そんなに難しくなかった。というかC言語の機能限定版。
- これならHandBrakeのCUDA化って難しくないんじゃねえの?
- そういや、その頃、AppleがOpenCLを打ち出したんだっけ。
- 腐れマカーなので、OpenCLを使おうとしたがやめた。
自分のMacBookはグラフィックチップがGeforceじゃなかったのでMacでの開発は頓挫(そもそもエミュレーションモードとかは信じてない)。 - 自作なPCでGeforceは元から持ってて、WindowsかLinuxでCUDAをやるのがしんどくなさげ。
- HandBrakeのソースをざらっと見て、WindowsがCygwinを使ってて、CUDAのSDKが使えないのが判明。
- 消去法で、Linux(Ubuntu)上でHandBrake for CUDAを開発決定。
実装。
- dtc8x8の部分だけCUDAに移植してみた。makefileを引きずり回してなんとか動作。
- でも、超遅い(10倍以上かかる)。
理由は、データの頻繁な転送、全く並列化せずシングルスレッドで動作、部分的過ぎる移植に伴うもの
- x264部分の全体をCUDA化着手。
- とりあえず、ソースをNVCCでコンパイルできるまでにしたい(動作そっちのけで)
- Makefileを根本的に改造
- とりあえず、x264に関わる関数を__device__指定にする。あと、グローバル変数とかも同様。
- staticもエラーが出たのでコメントアウト。
- 使われている標準関数をマクロで置換してワーニングとエラーを黙らせる(大抵、文字列操作かメモリ操作)
♥2010年6月現在、いまここ↑♥