Intel製CPU内蔵GPU使用時にLinuxホスト上のVMWareのゲストの3Dアクセラレーションが有効化できない場合の対処

先週金曜日(2013/1/25)から猛烈な寒波が全国を襲ったらしいのですが今日辺りからやっとゆるんで,名古屋の最低気温も0度越えでした.
もう晩冬になりますね.晩冬と言えば,綺麗なプロポーションで個人的に好きなお魚であるサヨリが旬ということでぜひ楽しんでみたいです.

さて,ホストをLinuxとしてVMWare上でWindowsゲストを動かす場合などで,GPUがIntel製である(HD Graphics 3000とかである)場合に,ゲストの3Dアクセラレーションが有効にできないようです.

Continue reading

SSEとAVXで高次元ベクトルの内積計算を高速化してみた

世界最速のお魚と言えばカジキ類で,泳ぐ速度は時速100km/hを超えるとか.55ノット程になるのでこれはMk-48魚雷にも匹敵するほどです.
一方ちょっとチートな高速お魚としては,お馴染みトビウオが飛行中に最大70km/hほどに達するとか.
今日はそんな若干チートな高速化のお話(?)ということで,SSE組み込み命令について.

SSEやAVXといえばお馴染みSIMD命令で,それをプログラムから構造体と関数の形式で高移殖に記述する方法がSIMD組み込み関数(SIMD Intrinsic)なわけですが,これを使ってごく典型的なベクトルの内積計算を高速化してみました.

ベクトルの内積の高速化と言えば星の数ほどもされてる話なわけで,いまさら魚の情報なんか役に立つ気は全くしないのですが,純粋に自分でやらないとわかんない>< ということで,

  • とにかく書いてみよう
  • 効果の程はいかに?

を調べてみたくて,やってみました.
もちろん完全に最適化されたコードでもなく,この記事の内容は無保証です.

参考は主に
SSE.浮動小数点演算手動最適化は本当に効果的なのか – デー
インテル(R) Advanced Vector Extensions (インテル(R) AVX) の組み込み関数
です.

Continue reading

MATEデスクトップ環境のマルチディスプレイ設定

お魚の目にはDHAって物質がたくさん含まれてて,その神経細胞に与える影響のおかげで,魚の目を食べると頭良くなるとかって言うんだそうですね.
IQの不足を実感する今日この頃であります.

さて,Linux Mintのデスクトップ環境の一つであるMATEですが,マルチディスプレイにしたときのデスクトップ周りの設定があまりなかったのでメモ.

基本的にはさかな前線 » Xfceのマルチディスプレイ設定をXfceからMATEにした話です.

表示する位置関係の設定

2枚のディスプレイの物理的配置と論理的配置を整合させる設定.
[メニュー]→[設定]→[モニタの設定]をクリック.

で,表示されてるディスプレイをD&Dして適切に配置しなおして,適用.
ま,この設定はググれば普通にでてきてくれますw

20130125_monitor_setting

パネルの表示位置

パネル(下のバー)はデフォルトでは「0番目のディスプレイ」に表示されます.
ディスプレイの配置によっては「0番目として認識されたディスプレイ」が適切な位置にないことも普通にあるので,パネルをどのディスプレイに表示するか設定します.

[メニュー]→[システムツール]→[設定エディタ]から設定エディタを開き,下のスクショのように[apps]→[panel]→[toplevels]→[panel0]へと辿ります.
そこにあるmonitorの項目が,何番目のディスプレイにパネルを表示するかの設定なので,0から1や2など適切な番号に変えることで,意図した配置になります.

20130125_setting_editor

壁紙をディスプレイに応じて変えることはできないのか(´・ω・`)

MATEデスクトップ環境では調べた限りできないみたいですね・・・

google-glogで最低限使いたい,ただ1つの機能 〜自動スタックトレース出力〜

もう10年以上も前になりますけども,近場の漁港によく連れて行ってもらって魚釣りしていました.
ちょうどアジは西日本の日本海側が本場ということもあって,僕の地元では岸壁に立ってサビキをすると小アジがたくさん釣れました.

さて,google-glogと言えばgoogle謹製のログライブラリ.
Google Japan Blog: C++ のプログラムのデバッグを楽にする方法にて概要が紹介されていて,ドキュメントには簡単なチュートリアルがあります.基本的には使い方に難しいところは何も無いです.

お魚さん的には学部卒論のときから使っててもはや手放せないんですが,作業が切羽詰ってくるとあんまり律儀にログを出す余裕がなくなってきますw
そんな時でもただ一ついつでも使ってたのが,「落ちた時にスタックトレースを吐く機能」です.
ということで今回はそれに絞って紹介.まとまった記事を書くには今時間的余裕がない><

Continue reading

cv::SurfDescriptorExtractorの拡張ディスクリプタを無効にする

魚類というのは分類学的にどうなるのか調べてみたら,昔は「綱」だったけどそうも言えないことがわかって,今は魚類をひっくるめた分類というのはない(生物学的には意味がなくなってしまう)んだそうですね.

さて,局所特徴量のSURFと言うと64次元だよね!という認識が一般的だと思います.
実際には原著(*1)の段階から特徴量を128次元で記述する拡張ディスクリプタ(extended descriptor)についても言及されていて,OpenCVの実装ではSURF特徴記述を行うcv::SurfDescriptorExtractorにおいてデフォルトで有効となっています.

cv::SurfDescriptorExtractor extractor;
std::cout << extractor.descriptorSize() << std::endl;  //128と出力されます

本来の64次元で使うには,特徴記述処理を行う前にこれを無効にします.
SurfDescriptorExtractorのコンストラクタのextendedをfalseにすればおkなんですが,
ぐぐって見つかるリファレンスでは最新のバージョンに同期されてなくて,でもコンパイルは通るので一瞬困惑します.

コンストラクタで指定するよりは,

cv::SurfDescriptorExtractor extractor;
extractor.extended = false;
std::cout << extractor.descriptorSize() << std::endl;  //64と出力されます

とすれば,その他のコンストラクタの他のデフォルトはそのままにいけます.少し汚いですが.

*1: H.Bay et. al., “Speeded-Up Robust Features (SURF),” ECCV2006

ssh -Xでevinceが動かない場合の対処

ぶっちゃけるとわりと最近までそれほど魚食べるのは好きじゃなかったんですね.
でも魚キャラを2年かそこらくらいやってて,自分の中に変化が….
というわけでお魚食べたいです.お魚.

さて,sshのX転送は便利でよく使わしてもらってるんですが,アプリによっては特有のエラーで使えなかったり.

Ubuntu系ディストロにて標準で使えるevince(PDFのドキュメントビューア)もそんなアプリの一つで,ssh -Xで普通に実行すると次のようなエラーが出ます(ちゃんと環境変数設定してても).

% DISPLAY=localhost:10.0 evince hogehoge.pdf
(evince:xxxxx): EggSMClient-WARNING **: Failed to connect to the session manager: None of the authentication protocols specified are supported
                Cannot parse arguments: ディスプレイをオープンできません:

ぐぐると,日本語の情報はあんま見つかんなかったのですが,
My Meaningless Scribbles …: Evince would not start over SSH X-forwarding
で解決法が紹介されました.エラーメッセージだけでぐぐるとこれは見つからなかったですね.
これしてからsshで入った先で,

% sudo ln -s /etc/apparmor.d/usr.bin.evince /etc/apparmor.d/disable
% sudo /etc/init.d/apparmor restart

を実行すると,他のアプリと同様にX転送してくれるようになって(゚д゚)ウマーです.

おっと論文書いてることバレるぞ(違

sshプロキシ設定

あけましておめでとうございます.
蛇年ですね.年男ですが,今年も魚でやっていきます.

さて,ラボのLAN内の自分のマシンに学外からsshで入りたいです.
そのためには,ラボのゲートウェイを超える必要があって,多段SSHをする必要があります.

家PCから,ラボGWにsshして,そこからラボPCにssh,これを,SSHプロキシ機能で一度にやってくれる設定.
いわゆるport forwardingではなくて,ncとかも不要で原理もわかりやすく設定もラクです.

基本的にはこのあたりを参考にしてるというかそのままです.
The Weight @northeye: sshコマンドだけで多段ログインする
あとこのやり方の手がかり?は@ton1517が教えてくれました.thx!

家PC,ラボGW,ラボPCどれもLinuxです.

家PCの自分のssh設定を記述します.$HOME/.ssh/configを編集してください.

  • 家PCホスト名: HOMEPC
  • ラボGWホスト名: LABGW (外から普通にsshできる完全な名前で)
  • ラボPCホスト名: LABPC
  • ラボPCに入るときのユーザ名: labgw_name
  • ラボGWに入るときのユーザ名: labpc_name

として,

% cat ~/.ssh/config
Host LABPC
    Hostname        LABPC
    User            labpc_name
    ProxyCommand    ssh labgw_name@LABGW -W %h:%p

ホスト名はIPアドレスでもおkです.

何段階かのGWを経る必要がある場合はHostのホスト名やプロキシ先を変えながら経由するGWの分だけ線形リストのように書き足して行けるようです.

これで,家PCにて

HOMEPC% ssh LABPC

でラボPCに一気につながります.ユーザ名修飾も不要で(゚д゚)ウマーです.
また,

HOMEPC% ssh -XY LABPC

としてXの転送もできて超(゚д゚)ウマーです.

以上,2013年最初の記事は完全に自分用メモでした.

私事ですが,こうしてラボ外からでも自由に研究できるようにしないとヤバい状況です.なんという年明け.
研究という名のエクストリームスポーツ.