2011年01月05日
GCC 4.5でOpenMP
せっかく苦労して自前ビルドしたGCC 4.5なので、OpenMPを試してみました。
自前ビルドの手順は以下の記事を参考にしてください。
GCC 4.5のビルド
GCC 4.5.2リリース
サンプルプログラムは、以下のページのものを使用しました。
http://en.wikipedia.org/wiki/OpenMP
・C
ソースコード: helloworld.c
以下のようにコンパイルします。
gcc -fopenmp helloworld.c -static
または、
gcc -fopenmp helloworld.c -lgomp -lpthread
・C++
ソースコード: helloworld.cpp
以下のようにコンパイルします。
g++ -fopenmp helloworld.cpp -static
または、
g++ -fopenmp helloworld.cpp -lgomp -lpthread
a.exe ができていれば成功です。
実行すると、こんな感じになります。
Hello World from thread 1
Hello World from thread 0
There are 2 threads
CPUがAthlon X2なので、コア数を自動で取得して2並列になっています。
いろいろ使い道がありそうですが、詳しいことはよくわかりません。
GCCのバイナリを配布している、KomisarさんとかTDMさんのものでOpenMPが使えるかどうかは試していませんので、あしからず。
2011/01/08 追記
本日付の、Komisarさんの所の最新版はGCC 4.5.2で、OpenMPは使えませんでした。
http://komisar.gin.by/mingw/
TDMさんの所の最新版はGCC 4.5.1で、一応OpenMPが使えました。
http://tdm-gcc.tdragon.net/download
2010年12月17日
GCC 4.5.2リリース
GCC 4.5.2が、2010/12/16にリリースされました。
自前ビルドの手順はGCC 4.5.0と同じで、configureオプションに、
--enable-lto
を追加するだけですので、こちらの記事を参考にしてください。
GCC 4.5のビルド
私の場合、configureオプションはこのようにしています。
$ ../gcc-4.5.2/configure --prefix=/mingw --build=mingw32 --with-arch=i686 --with-tune=generic --enable-languages=c,c++,objc,obj-c++ --enable-libgomp --disable-werror --enable-threads --disable-nls --disable-win32-registry --disable-sjlj-exceptions --with-dwarf2 --enable-lto --with-system-zlib --with-host-libstdcxx=-lstdc++ --enable-libstdcxx-debug --enable-cxx-flags='-fno-function-sections -fno-data-sections' --disable-libstdcxx-pch --enable-version-specific-runtime-libs --disable-bootstrap
参考までに、ビルドスクリプトをこちらに置いておきます。
2011/03/10 追記
makeの時のフラグを、バイナリのサイズが小さくなるように修正しました。
gcc-4.5.2-build-dw2-generic-2.sh
当サイトにはバイナリは置いていませんので、自分でビルドするのが面倒という方は、こちらがおすすめです。
Komisar Mingw HowTo
http://komisar.gin.by/mingw/
2010年12月13日
GCC 4.6.0 (gcc-4.6-20101211) をビルドしてみたYO! その4
GCC 4.6.0 (gcc-4.6-20101211) をビルドしてみました。
gcc-4.6-20101204に比べて、lto-plugin.c、gdtoa.hなどが修正されました。
自前ビルドの手順はGCC 4.5.0とほとんど同じですので、こちらの記事を参考にしてください。
GCC 4.5のビルド
gcc-4.6-20101211のソースに、以下のパッチを適用してください。
libgomp-pthreads.diff
make-temp-fileパッチ
make-temp-file.diff
2011/01/05 追記
libgomp用のパッチを変更しました。
PTW32_STATIC_LIBフラグは、最新のpthreadsライブラリでは不要になったため、削除しました。
libgomp-configure.diff
$ cd gcc-4.6-20101211
$ patch -p1 < ../libgomp-configure.diff
$ patch -p1 < ../make-temp-file.diff
ソースが準備できたら、configure、make、make installします。