次世代Gumstixがパワーアップ
板ガムサイズのLinuxマシンGumstixの最新シリーズ、Gumstix Overo。従来からあったGumstix Overo Earthは大きさの割に高性能なものの、BeagleBoardと比較するとやや残念な性能だった。
しかし、最近になってこのGumstix Overoに上位モデルが登場した。
まずGumstix Over WaterはプロセッサがOMAP3503からBeagleBoardと同じOMAP3530になっており、BeagleBoard同様DSPとグラフィックアクセラレータが使用できる。
Gumstix Overo Airはアプリケーションプロセッサの性能はOver Earthと変わらないが、Wi2Wi製のWiFi/Bluetooth混載チップが追加されている。板ガムサイズの基板1枚でワイヤレスネットワーク接続までこなしてしまうのは魅力的だが、おそらくFCCの認可しか受けていないので日本国内では電波を飛ばせない可能性が高い。
最上位モデルGumstix Overo FireはOvero Waterと同じOMAP3530と、Overo Airと同じWiFi/Bluetooth混載チップの両方を搭載している欲張りなひとのためのGumstix。
また合わせて新しい拡張ボードPalo43とTobiが追加された。
Palo43は基本的には従来からあった拡張ボードSummitと同じコネクタを備えつつ、DVIトランスミッタ/HDMI端子の代わりにGumstix専用液晶パネルのためのコネクタを備えている。Gumstix専用液晶パネルはOMAP3530のパワーを堪能するにはやや小さいが、映像信号ヘッダがそのまま出ているだけでそこから先は自作必須のBeagleBoard Rev.Cの液晶パネル事情と比べると敷居は低い。
TobiはSummitと同じコネクタに加えてEthernetコネクタが追加されている。おそらく基板上にUSB Ethernetコントローラが載っているものと思われる。
BeagleBoardは実はOMAP3530が持っている豊富な機能の一部しか使っていない。リファレンスマニュアルの最後の方にある接続図を見れば分かるが、多くの機能が結線されずに残されている。これをもったいないと思う人にとってGumstix OveroのプロセッサがBeagleBoardと同等になったことはうれしいニュースだ。何故ならBeagleBoard Rev.Cは合計68本の拡張ヘッダしか備えていないのに対して、Gumstix Overoは合計167ピンもの拡張コネクタが備わっており、より多くの基板上に実装しきれなかった機能をドータボードに引き出して利用することが出来るからだ。
その中でも特にCCDカメラ用コネクタが出ているのは一部用途では大きいかもしれない。
しかし、最近になってこのGumstix Overoに上位モデルが登場した。
まずGumstix Over WaterはプロセッサがOMAP3503からBeagleBoardと同じOMAP3530になっており、BeagleBoard同様DSPとグラフィックアクセラレータが使用できる。
Gumstix Overo Airはアプリケーションプロセッサの性能はOver Earthと変わらないが、Wi2Wi製のWiFi/Bluetooth混載チップが追加されている。板ガムサイズの基板1枚でワイヤレスネットワーク接続までこなしてしまうのは魅力的だが、おそらくFCCの認可しか受けていないので日本国内では電波を飛ばせない可能性が高い。
最上位モデルGumstix Overo FireはOvero Waterと同じOMAP3530と、Overo Airと同じWiFi/Bluetooth混載チップの両方を搭載している欲張りなひとのためのGumstix。
また合わせて新しい拡張ボードPalo43とTobiが追加された。
Palo43は基本的には従来からあった拡張ボードSummitと同じコネクタを備えつつ、DVIトランスミッタ/HDMI端子の代わりにGumstix専用液晶パネルのためのコネクタを備えている。Gumstix専用液晶パネルはOMAP3530のパワーを堪能するにはやや小さいが、映像信号ヘッダがそのまま出ているだけでそこから先は自作必須のBeagleBoard Rev.Cの液晶パネル事情と比べると敷居は低い。
TobiはSummitと同じコネクタに加えてEthernetコネクタが追加されている。おそらく基板上にUSB Ethernetコントローラが載っているものと思われる。
BeagleBoardは実はOMAP3530が持っている豊富な機能の一部しか使っていない。リファレンスマニュアルの最後の方にある接続図を見れば分かるが、多くの機能が結線されずに残されている。これをもったいないと思う人にとってGumstix OveroのプロセッサがBeagleBoardと同等になったことはうれしいニュースだ。何故ならBeagleBoard Rev.Cは合計68本の拡張ヘッダしか備えていないのに対して、Gumstix Overoは合計167ピンもの拡張コネクタが備わっており、より多くの基板上に実装しきれなかった機能をドータボードに引き出して利用することが出来るからだ。
その中でも特にCCDカメラ用コネクタが出ているのは一部用途では大きいかもしれない。
Xサーバのビルドがこける時は
ARM Linux上でX.orgのXサーバをビルドしていたら以下のようなエラーを吐いてこけた。
これはどうやらシステムにインストールされているMesaがDRI非対応だと起こる。
最近のX.orgのXサーバでGLXを有効にするためにはMesaのDRI対応が必須になっているらしい。
Mesa-7.xはデフォルトでDRIが有効になっており、x86 Linux上では特に何の指定もしなくてもDRI対応版がビルドされるのだが、ARM Linux上でビルドしたところ何故か明示的にDRIを有効にしてやらないとDRI非対応版がビルドされてしまった。
そもそも大抵のARM組み込み基板にはDRI経由で叩くような大掛かりなグラフィックデバイスは載っていないわけだが、形だけでもGLXに対応しておかないとKDEのようなゴツいソフトウェアが不満をもらすので、
とりあえずRADEONがあることにした。
gcc -DHAVE_CONFIG_H -I. -I../include -I../hw/xfree86/os-support -I../hw/xfree86/os-support/bus -I../hw/xfree86/common -I../hw/xfree86/dri -I../hw/xfree86/dri2 -I../mi -DHAVE_DIX_CONFIG_H -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -fno-strict-aliasing -D_BSD_SOURCE -DHAS_FCHOWN -DHAS_STICKY_DIR_BIT -I/usr/include/freetype2 -I/usr/include/pixman-1 -I/opt/x11/include -I../include -I../include -I../Xext -I../composite -I../damageext -I../xfixes -I../Xi -I../mi -I../miext/shadow -I../miext/damage -I../render -I../randr -I../fb -I/opt/x11/include -I/opt/x11/include -I/opt/x11/include -I/opt/x11/include/drm -I/opt/x11/include/X11/dri -DXFree86Server -Os -march=armv7-a -mfpu=neon -mabi=aapcs-linux -fno-math-errno -ffast-math -fforce-addr -fomit-frame-pointer -pipe -fstrength-reduce -fno-strict-aliasing -MT glxdriswrast.lo -MD -MP -MF .deps/glxdriswrast.Tpo -c glxdriswrast.c -fPIC -DPIC -o .libs/glxdriswrast.o
In file included from glxdriswrast.c:49:
glxdricommon.h:32: error: expected ':', ',', ';', '}' or '__attribute__' before '*' token
glxdricommon.h:36: warning: type defaults to 'int' in declaration of '__DRIcoreExtension'
glxdricommon.h:36: error: expected ';', ',' or ')' before '*' token
glxdricommon.h:38: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'systemTimeExtension'
glxdriswrast.c:67: error: expected ':', ',', ';', '}' or '__attribute__' before '*' token
glxdriswrast.c: In function '__glXDRIdrawableDestroy':
glxdriswrast.c:92: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
glxdriswrast.c:92: error: 'core' undeclared (first use in this function)
glxdriswrast.c:92: error: (Each undeclared identifier is reported only once
glxdriswrast.c:92: error: for each function it appears in.)
glxdriswrast.c:92: error: '__GLXDRIscreen' has no member named 'core'
glxdriswrast.c: In function '__glXDRIdrawableSwapBuffers':
glxdriswrast.c:116: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
glxdriswrast.c:116: error: 'core' undeclared (first use in this function)
glxdriswrast.c:116: error: '__GLXDRIscreen' has no member named 'core'
glxdriswrast.c: In function '__glXDRIdrawableCopySubBuffer':
glxdriswrast.c:128: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
glxdriswrast.c:128: error: 'copySubBuffer' undeclared (first use in this function)
(中略)
make[1]: *** [glxdriswrast.lo] エラー 1
make[1]: ディレクトリ `/usr/src/babel/build/xorg-server-1.5.1/glx' から出ます
make: *** [all-recursive] エラー 1
In file included from glxdriswrast.c:49:
glxdricommon.h:32: error: expected ':', ',', ';', '}' or '__attribute__' before '*' token
glxdricommon.h:36: warning: type defaults to 'int' in declaration of '__DRIcoreExtension'
glxdricommon.h:36: error: expected ';', ',' or ')' before '*' token
glxdricommon.h:38: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'systemTimeExtension'
glxdriswrast.c:67: error: expected ':', ',', ';', '}' or '__attribute__' before '*' token
glxdriswrast.c: In function '__glXDRIdrawableDestroy':
glxdriswrast.c:92: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
glxdriswrast.c:92: error: 'core' undeclared (first use in this function)
glxdriswrast.c:92: error: (Each undeclared identifier is reported only once
glxdriswrast.c:92: error: for each function it appears in.)
glxdriswrast.c:92: error: '__GLXDRIscreen' has no member named 'core'
glxdriswrast.c: In function '__glXDRIdrawableSwapBuffers':
glxdriswrast.c:116: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
glxdriswrast.c:116: error: 'core' undeclared (first use in this function)
glxdriswrast.c:116: error: '__GLXDRIscreen' has no member named 'core'
glxdriswrast.c: In function '__glXDRIdrawableCopySubBuffer':
glxdriswrast.c:128: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
glxdriswrast.c:128: error: 'copySubBuffer' undeclared (first use in this function)
(中略)
make[1]: *** [glxdriswrast.lo] エラー 1
make[1]: ディレクトリ `/usr/src/babel/build/xorg-server-1.5.1/glx' から出ます
make: *** [all-recursive] エラー 1
これはどうやらシステムにインストールされているMesaがDRI非対応だと起こる。
最近のX.orgのXサーバでGLXを有効にするためにはMesaのDRI対応が必須になっているらしい。
Mesa-7.xはデフォルトでDRIが有効になっており、x86 Linux上では特に何の指定もしなくてもDRI対応版がビルドされるのだが、ARM Linux上でビルドしたところ何故か明示的にDRIを有効にしてやらないとDRI非対応版がビルドされてしまった。
そもそも大抵のARM組み込み基板にはDRI経由で叩くような大掛かりなグラフィックデバイスは載っていないわけだが、形だけでもGLXに対応しておかないとKDEのようなゴツいソフトウェアが不満をもらすので、
$ ./configure --prefix=/opt/x11 --disable-debug --sysconfdir=/etc/x11 --localstatedir=/var --enable-shared --enable-xcb --enable-driglx-direct --with-driver=dri --with-dri-drivers=radeon
とりあえずRADEONがあることにした。
GeForceGTX260で高速フーリエ変換
以前やった高速フーリエ変換のパフォーマンス比較を、新しいグラフィックカードでやってみた。
ソースは前回GeForce8400で走らせたCUDA版と同じものを使用。
CPU: Intel Core2Duo E8400
GPU: nvidia GeForce GTX260
CUDAを使って並列処理をした場合
FFT time ( GPU ): 0.655293
IFFT time ( GPU ): 0.625507
結果: 圧倒的
素晴らしい。
良いGPUを使えば確かにCUDAは新しめのCPUを圧倒するパフォーマンスが出ることが分かった。ちなみに高速フーリエ変換はcufftというもっと洗練されたライブラリがCUDAのSDKに含まれているので、このソースのようにいちいち自分で作らなくてもすぐに出来たりする。
ソースは前回GeForce8400で走らせたCUDA版と同じものを使用。
CPU: Intel Core2Duo E8400
GPU: nvidia GeForce GTX260
CUDAを使って並列処理をした場合
FFT time ( GPU ): 0.655293
IFFT time ( GPU ): 0.625507
結果: 圧倒的
素晴らしい。
良いGPUを使えば確かにCUDAは新しめのCPUを圧倒するパフォーマンスが出ることが分かった。ちなみに高速フーリエ変換はcufftというもっと洗練されたライブラリがCUDAのSDKに含まれているので、このソースのようにいちいち自分で作らなくてもすぐに出来たりする。
次世代Gumstix
板ガムサイズのLinuxマシン、Gumstix Verdexの後継、Gumstix Overoがリリースされた。Gumstixシリーズの伝統であるコンパクトさはそのままに最新のARM Cortex A8(OMAP35xx)を搭載し、Xscaleでは苦しかった浮動小数点数を多用するソフトウェアの実行速度にも希望を持てる。そのスペックは以下の通り。
Overo本体
Texas Instruments社製ARM Cortex A8 600MHz OMAP3503プロセッサ
DDR-SDRAM 256MB
内蔵フラッシュメモリ256MB
MicroSDカードスロットx1
USBホストコントローラ
Overo本体と拡張I/OボードSummitを合わせると殆どBeagleBoardと変わらない。OMAP3503はBeagleBoardのOMAP3530と比較して、DSPが無い、アプリケーションプロセッサ組み込みのグラフィックコントローラが無い、という差がある。
Overo本体
Texas Instruments社製ARM Cortex A8 600MHz OMAP3503プロセッサ
DDR-SDRAM 256MB
内蔵フラッシュメモリ256MB
MicroSDカードスロットx1
USBホストコントローラ
Overo本体と拡張I/OボードSummitを合わせると殆どBeagleBoardと変わらない。OMAP3503はBeagleBoardのOMAP3530と比較して、DSPが無い、アプリケーションプロセッサ組み込みのグラフィックコントローラが無い、という差がある。
高速フーリエ変換
高速フーリエ変換を並列処理するとどのくらいパフォーマンスが良くなるか試してみた。
CPU: Intel Core2Duo E8400
GPU: nvidia GeForce 8400GS
CUDAを使って並列処理をした場合
FFT time ( GPU ): 6.013794
IFFT time ( GPU ): 6.255594
OpenMPを使って並列処理をした場合
FFT time ( CPU ): 2.270238
IFFT time ( CPU ): 2.610293
特にこれといって小細工をしなかった場合
FFT time ( CPU ): 3.480621
IFFT time ( CPU ): 3.864744
...さすがにグラフィックカードがローエンド過ぎたかもしれない。
CPU: Intel Core2Duo E8400
GPU: nvidia GeForce 8400GS
CUDAを使って並列処理をした場合
FFT time ( GPU ): 6.013794
IFFT time ( GPU ): 6.255594
OpenMPを使って並列処理をした場合
FFT time ( CPU ): 2.270238
IFFT time ( CPU ): 2.610293
特にこれといって小細工をしなかった場合
FFT time ( CPU ): 3.480621
IFFT time ( CPU ): 3.864744
...さすがにグラフィックカードがローエンド過ぎたかもしれない。