特集
» 2008年02月21日 13時00分 UPDATE

Validation Case Study:マルチコアCPUを活用したファイル圧縮 (1/3)

マルチコアに対応しているmgzipとpbzip2を使えば、ファイルの圧縮/復元処理にマルチコアの真の実力を解放させることができる。ここでは、実際にそれぞれの処理に要する時間を計測してみた。

[Ben Martin,Open Tech Press]
SourceForge.JP Magazine

 デスクトップコンピュータに搭載されているCPUのコアは2個から4個、やがては8個へと増加の一途をたどっている。それに応じてソフトウェアが計算量の大きな処理を並列処理する能力の重要性も増している。圧縮関連のツールでは、mgzippbzip2がマルチコアに対応しており、前者は圧縮処理に、後者は圧縮とその復元処理にマルチコアを活用できる。

 どちらの場合も、圧縮ファイルの復元は、それぞれの標準ツールで可能だ。つまり、pbzip2の圧縮ファイルにはbzip2を、mgzipの圧縮ファイルにはgunzipを使う。Fedora 8の場合、pbzip2のパッケージが標準リポジトリーにあり「yum install pbzip2」でインストール可能。一方、mgzipは、ほとんどのディストリビューションでパッケージがなく、ソースからインストールする必要がある。

 しかも、コンパイルでエラーが発生する。zlibヘッダにはgz_headerが定義されているが、mgzip.cでも同じ変数が正当なgzipアーカイブの16進値を保持するために使われているからだ。

$ make

gcc -g -O2 -c -o mgzip.o mgzip.c

mgzip.c:40: error: 'gz_header' redeclared as different kind of symbol

/usr/include/zlib.h:124: error: previous declaration of 'gz_header' was here

mgzip.c: In function 'compress_infile_to_outfile':

mgzip.c:530: warning: cast to pointer from integer of different size


 解決は簡単。gz_header変数にプレフィックスをつけ、それに合わせてこの変数への参照を修正すればよい。参照はmgzip.cの中に数カ所にある。プレフィックスは、gz_header以外で適正なCの識別子であれば何でもよい。例えば、mgzip_gz_headerなどとする。

       1|2|3 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

ピックアップコンテンツ

- PR -

注目のテーマ

マーケット解説

- PR -