OpenCLメモ

OpenCLの実装メモ。

- カーネルのコンパイルエラーを見つける方法
カーネルの記述が間違っていると、clBuildProgramが失敗する。clGetProgramBuildInfoを使うと、コンパイルエラーを取得できるが、もっと便利なのは、AMD APP KernelAnalyzerを使う方法。Source Codeのところに問題のソースを貼り付け、Compileボタンを押すと、エラーがある場合はCompiler Outputのところに、エラーが出力される。

- プロファイリングの方法
Code XLを使用する。新しいプロジェクトを作成し、プロファイルを取得したいプログラムを指定する。ProfileメニューからStart Profilingを実行。GPU プロファイルにはApplication TraceとPerformance Countersの2種類がある。

これはApplicatoin Traceの実行結果:


プログラム実行中に使用したOpenCL関数や、それに掛かった時間などがグラフ表示される。

これがPerformance Countersの実行結果:


使用したカーネルや、カーネルを実行したときのworkgroup sizeもわかる。

- 雑感

やっと一通りカーネルを実行できるようになった。実行時間だけをみると、CPUの5倍程度高速であるように思われるが、前後のメモリ転送が遅いので(とりわけCPU->GPU)、結局CPUで計算した方が3倍程度高速な状態。ちなみに、CPUのプログラムはVisual C++ Express 2012で64bitバイナリでO2最適化/AVX有効の場合 ...

more…

SQLiteで日付を扱うのって悩ましい

MySQLなどとは異なり、SQLiteにはDate型が存在しない。そのため、SQLiteで日付データを扱う場合、文字列として、あるいは数値として扱うのが一般的であると思われる。

文字列の場合、'2012-09-12'のようになるが、気をつけなくてはいけないのは、'2012-9-12'などとしてはいけないことだ。つまり、月日は、2ケタに達しない場合、0を左につけなければならない。次のような実験をしてみる:


sqlite> select strftime('%Y-%m', '2012-09-12');
2012-09
sqlite> select strftime('%Y-%m', '2012-9-12');
(何も表示されない)

strftimeによって年月を得ようとしても、0が抜けていると思うように動作しない。また、strftimeで取得しなくても、例えば日付データでorder byをする場合、2ケタ化していないと、例えば09より1のほうが大きいとみなされてしまう。つまり、9月より1月のほうが後、とみなされてしまう。そのため、2ケタ化は必須の作業となる。

もう一つ、数値として日付を扱う場合を考える。この場合も、どの時刻を基準とするか、という選択肢があるが、個人的にはユリウス日を使用するのが最も良いと思う ...

more…

Haskellって

最近Haskellで趣味のプログラムを作成することが増えた。一度型のラクさに慣れてしまうと、Lisp系言語でプログラムを作るのはおっくうになってしまう。自分も歳を取ったものだ。しかも、少なくともWebアプリに限ってだが、プログラムのメモリ使用量や実行速度でもJavaに勝っていると思う。 その割には、Webで調べてみても、あまりHaskellでガチにアプリを作りました、という記事を多く見つけられない。どちらかというと、Haskellを触ってみましたという記事が多いように感じる。もちろん、探せば多少はあって、HFTシステムをHaskellで実装しました、とか。でも他の言語と比べて全般的に記事が少ないと感じる。 もっとHaskellが使われてもいいのではないのかな、と思った次第。それだけ。

more…

数学ガール読んだ

Permalink: 2012-08-12 13:43:00+09:00 by tu1978 in tags: Math

最近、数学ガール ガロア理論 (数学ガールシリーズ 5)を購入した。割と分厚かったが、読みやすかったので2週間くらいで読めた。個人的には登場人物のやりとりは不要だと思うが、内容は全般的にわかりやすく書かれていると思った。

1-9章はとてもわかりやすい。 1のn乗根、体の拡大、拡大次数、正規部分群、巡回群、3次方程式の解の公式(これはまともに学んだのは初めてだった)、作図問題といった内容が説明されている。10章でガロアの第一論文を要約しているが、自分はここは消化不良だった。著者もあとがきでこの章は悩んだところだと告白している。10章までの説明はとても詳細で、例も多かったが、10章は少しこなれていないと感じた。

ただ、全体的には著者の説明のうまさが際だっていると感じた。大学以来、数学書はとにかく読むのがつらくて、歯を食いしばって1ページ1ページゆっくり理解してゆくというイメージがあった。でも、この本はページ数を惜しまずに、少しの内容をたくさんの文章と図で説明している。いわば、「自分で数学書を読んでいるときにどう考えながら理解してゆくか」というその"声"を登場人物の会話に織り込んでいるので、すらすらと読み進められる。このラクさはうれしい。数学の内容とは別にして、こう書けば良いのか!という発見がある。

とりあえず、1-9章までで、ある程度知識が得られたので、時間があれば以前購入して以来積ん読だったガロア理論入門 (ちくま学芸文庫)を読んでみたいと思う ...

more…

Microsoft Surface

Microsoft Surfaceについてしばらく前に報道されたときには、それほど興味を持たずにいた。しかし、最近かなり気になる存在になってきた(といってもまだ発売すらされていないのだが)。

ここにきて、Office 365 CPで想像するWindows 8のコンセプトという記事を読んで、さらに期待が高まった。この記事の最後のところに出ているが、Windows 8では、これまで通りのデスクトップでの操作は継承しつつ、Metroスタイルのタッチパネル操作が新たに加わるイメージのようである。これにより、Windows PC一台だけあればiPadのようなタブレットが不要になる、という使い方を提案しているのでは?ということが書かれている。

ソフトウェアを開発する人間であれば、ノートパソコンを持ち歩くのは最近ではごく一般的であると思う。タブレットがはやっていても、やはりタブレットではノートパソコンの代替にはならない。かといって、両方持ち歩くといのも(少なくとも自分は)嫌である。

ところが、Surface一台で、例えば、電車の中ではタブレットとして使い、仕事場ではノートパソコンとして使う、ということが可能になりそうである。自分は、コーディング時には、ノートパソコンにディスプレイ+キーボード+マウスを接続した環境で作業することも多い。これがノートの代わりにSurfaceになっても構わない。本気でコーディングする環境でなければ、ひとまず使えるキーボードがあれば良い。

というわけで、SurfaceとWindows8の出来次第では、自分の利用方法ではかなり魅力的なアイテムになるのではないかと思う。発売されるのが楽しみだ。

more…

blaze-htmlでのname属性

blaze-htmlでname属性の値を設定するときに、コンパイルエラーが出てしまった。次のようなエラー。

    Couldn't match expected type H.AttributeValue'<br />                with actual type[a0]'
In the return type of a call of concat'<br /> In the second argument of($)', namely
`concat ["s", show y, "-", show m, ....]'
In the expression: A.name $ concat ["s", show y, "-", show m, ....] 

concatを使って、name属性の値になってほしい文字列を作っているのだが ...

more…

位相相関による画像位置合わせ

メモ。

平行移動している2つの画像の移動量を検出する方法について調査しいていたら、位相相関法というのが見つかった。

Phase Correlation in OpenCV

高速フーリエ変換ライブラリ FFTW ver 3 の使い方

Phase correlation

位相限定相関法に基づく高精度マシンビジョン

英語ではこのような処理を一般にimage registrationと呼ぶらしい。これを行うには、上記のように周波数領域で行う以外にも、いろいろな方法が提案されている。実際に上記のページのソースを参考にプログラムを作成してみたら、ちゃんとずれ量を検出できた。

more…

PC買った

Permalink: 2012-03-20 14:22:00+09:00 by tu1978 in tags: PC

久しぶりにWindows PCをリニューアルした。これまで2年半くらいの間、Lenovo ThinkPad X200を使用していた。スペックはCore 2 Duo 2.53GHz, HDD 500GB, Memory 4GBだった。最近のブラウザはメモリを大量に消費するし、ほかにもいろいろなソフトを同時に実行していると、さすがにスワップアウトも少し発生していた。また、全体的な遅さも感じていたので、Ivy Bridge発表直前だったが、新しいPCを買ってしまった。

購入したのは、VAIO SE (VPCSE28FJ)。これまでThinkPad一筋で来ていたが、ついに浮気をしてしまった。これまで自分で購入したThinkPadはX20, X31, T41, X200。どれも良い機械だった。結局一台も壊れなかった。今回のVAIOは15.5インチという今までで最大のマシン。でも重さは2kg以下なので、T41より軽い。メモリは4GB増設した。

以下は雑感。

  • 評判通り液晶はとてもきれい。しかも1920x1080の解像度。
  • キーボードもそんなに悪くないが、半角/全角キーがちょっと小さい。
  • パソコンの堅牢性という点ではThinkPadにはかなわない。端を持ち上げるときにThinkPadの方が堅牢に感じる。
  • 排気口がヒンジでもろにふさがれる。それほど負荷をかけていない状態 ...

more…

Haskell雑感

以前clojureで作成した自分用WebアプリをHaskell(GHC)で作ってみている。感じた点を並べてみる。

言語としての違い

ソースの単純な見た目としてはclojureの方が自分好み。Haskellの方は"$, ->, ., <-, !"といった記号が乱発され、とにかく読む気が失せる。しかも一目見ただけでは関数の適用順さえ理解しにくい。Lispライクな文法にしなかったのはHaskellの一番いけてない点だと主張したい。

case all of
[] -> res
(x:rs) -> case Data.Map.lookup (qname x) res of
Nothing -> formatByKamoku' rs $ insert (qname x) ((V.replicate 12 0) V.// [((month x)-1, cost x)]) res
Just v -> formatByKamoku' rs $ insert (qname ...

more…

HaskellのMySQLバインディングについて調査

HaskellでMySQLを使うのにどのライブラリが良いか調べた。結果としてはmysql-simpleが良さそうだ。HDBC-mysqlも試して見たが、こちらは日本語が文字化けしてしまった。ソースを見る限りちゃんとUTF8の変換を行っているように思えたのだが。とりあえず使えるものが見つかったので今日の所はここまで。

2012/2/14 追記

Mac OS Xの方でmysql-simpleをインストールしたが、コンパイル/リンクされたファイルを実行しようとしたら、libmysqlclient.18.dylibが見つからないというエラーが発生した。このファイルがあるディレクトリをDYLD_LIBRARY_PATH環境変数で指定してみたが、なぜか解決しなかったので、"Library not loaded: libmysqlclient.18.dylib"の解消方法にあった方法を使って、/usr/libにシンボリックリンクを作成して逃げた。

どうにもMac OS XはLinuxと比べて面倒に遭遇する場合が多いと感じる。

more…