programming

WTL CGridCtrl

Yahoo groupsのfilesがお亡くなりになっていて取得するのが大変だった。あまりにマイナー過ぎるものは歳月が流れるとインターネット上から取得しづらくなる…。昔ながらのWindows ProgrammingをC++でやる時にはWTLは便利なので、腕がさび付かないようにしない…

Cortex-M7

http://news.mynavi.jp/articles/2015/02/16/cortex-m7/ Cortex-M7のエリアサイズはCortex-M3の32倍、って書かれているけどなんだか差が恐ろしいな。。こりゃ回路の集積度が上がればGPUのSU数を増やせるわけだ。。データ並列性が大きいタスクってのはあるん…

WTL

久しぶりにWTLを使った。何年振りだろう。。去年買ったノートPCにはVS2013 Express for Desktopしか入れていなかったのでCommunity EditionをDownload&Install。sourceforgeからWTL90_4140_FinalをDownload。AppWizのSetup.jsが複数のバージョンのVisualStud…

x64

Core i5-4200UのPCだとx86ビルドの方がx64ビルドより処理時間が短くなるので、プログラムの種類によっては32bitコードの方が向いてるのかな?と思ったけれど、最近Core i5-4670のデスクトップPCを復帰して試してみたらx64ビルドの方が処理時間が短くなる。ど…

SIMD演算のお話

ARMのNEONは殆ど使った事が無いけれど、色々情報が参照できる。http://community.arm.com/groups/processors/blog/2010/03/17/coding-for-neon--part-1-load-and-stores http://community.arm.com/groups/processors/blog/2010/05/10/coding-for-neon--part-…

SIMDのシフト演算のお話

SSE2やAVX2のレジスタ全体をシフトする命令はコンパイル時定数しかパラメータに受けとるものしか無いので、目的の処理を書くのに困る事がよくある。XMMレジスタの場合はコンパイル時定数だけれど、128bit丸ごとを指定のバイト単位でシフトが出来る。 _mm_bsl…

CGridCtrl

CGridCtrlで、ヘッダーをクリックした時に並び替えが起きても、現在選択した列を保つにはどうしたらいいのだろうか? 調べてみたところ、派生classで virtual void OnFixedColumnClick(CCellID& cell); を overrideすれば実現出来るだろうという事が分かった…

event, delegate

http://www.codeproject.com/cpp/acfdelegate.asp C#のdelegateのようにoperator overloadでAddEventListener,RemoveEventListener的な事が出来るC++のDelegate。速度はそんなに速くないらしいけど、どうせ起きる頻度から考えると、そこそこの速さでも問題無…

tree

http://datasoftsolutions.net/tree_container_library/overview.php 最近GPLでないTreeのContainerを見つけた。結構機能も豊富。 http://www.aei.mpg.de/~peekas/tree/ 今まで検索エンジンでヒットしてたのはこっち。

Dialog

WTLでDialogのModal表示を行った場合、MFCとは勝手が違ってくる。その事をちゃんと理解してなかったので嵌って時間を浪費してしまった。ModalDialog上にCEditListBox (http://www.codeproject.com/wtl/WTL_EditListBox.asp) を置いて、入力後にエンターキー…

xbyak

x86向けのJITアセンブラとして、XBYAKというのが公開されていた。 http://homepage1.nifty.com/herumi/soft/xbyak.html今までC++で無駄に最適化をしている時に実行時最適化も出来ればもうちょっと速くなるのに…と心残りだった。sourceforgeで公開してたSoftW…

O/Rマッピング

気分的な問題なのか(慣れや鍛錬や準備の問題もあるけど)DBとのやり取りのSQL文を作るのがちょっと面倒に感じる。ターゲットがCEのせいか、寝ぼけたようにとろとろ組んでるので時間が掛かった割には画面がしょぼいし…。あと構造体の属性を文字列に変換する…

アフォ

SQLiteには基本的にutf-8の文字列を放り込む必要があるんだけれど、文字コード変換に使っていた CUnicodeF (http://kamoland.com/comp/unicode.html) がWindowsCE向けにbuild出来なかったので、WindowsAPIを使うことにした。コマンドプロンプト上でsqlite3.e…

CGridCtrl

CGridCtrlという、ListCtrl(Explorerの右側のWindowで使われている)のような表の役割を果たすMFCのCtrl Classがある。http://www.codeproject.com/miscctrl/gridctrl.asp このClassは、Windowsの標準CtrlのListCtrlを使ってOwnerDrawとかで機能を実現して…

Google Sparse Hash Map

Google Sparse Hash Mapってどんなもんなんだろう?って思ってちょっと調べてみた。 http://goog-sparsehash.sourceforge.net/ documentがSGIのSTLに合わせてあるらしいんだけど、統一されると既にSGIのSTLを知っている人にはとても嬉しいんだろうなぁ。。 …

線描画

AntiAliasingした線の描画のAlphaBlending処理でMMXを使えば速くなるかな〜とか 思ってぶらぶらうろついているうちに、以下の情報を発見。 http://aspn.activestate.com/ASPN/Mail/Message/boost/1185139 World's fastest line algorithm (EFLA) Beats Wu an…

Windowsのpathについて

Windowsのpathの区切り文字って、'\'だけど、*1 なんで英語のbackslashが\になってしまったんだろう?$が\になるならともかく…。 日本でもASCIIのままで使っていれば良いのに、とか今まで受けた恩恵を無視して タイピング…。 ファイルを扱うアプリになってく…

VC6, VS.NET

WindowsのPlatformSDKのwindef.hの中に、min, maxマクロが定義されれていて、 VC6の場合には、std::min, std::maxが無いので、VC6を対象に作られたコードは、 mix,maxマクロを使っているが多い感じがする。VS.NETではstd::min, std::maxはあるんだけれど、st…

Windows2000とSTL

VisualStudio6でbuildしたApplicationが、Windows2000の素の環境でMSVCP60.DLLが 足りない為に動かないという事があった。 Windows2000の場合、このDLLはOfficeを入れるとWindowsのsystem folderに入るようだ。 どうしてMSVCP60.DLLを必要とするprogramにな…

画像処理Library

VIGRAっていう画像処理ライブラリの存在を知った。 http://kogs-www.informatik.uni-hamburg.de/~koethe/vigra/ "Vision with Generic Algorithms"の略のようで、 C++のSTLのようなtemplateを使った方法で作られているLibraryとの事。 へたれなのでgaussian…

非効率2

GraphicsMagicのMagick++のImage::rotateで、3000*2400 48bitの画像(容量は約42MB) を処理すると、500MB近くメモリを消費してしまう。 RotateImage中のBorderImage中のFrameImageの中のSetImagePixelsの引数の、 frame_image->columns,heightが、元の画像…

非効率

GraphicsMagickのrotateはmemoryを食いすぎるし時間が掛かりすぎる。 データのサイズが膨らむと指数関数的にコストが上昇するような感じがする。。でも自前でやると細かいバグがぽこぽこ出るだろうし。。う〜ん…。。

OpenCV

画像中の線は、OpenCVのcvLineAA関数で描画してみたもの。AntiAliasはGaussianBlurでやっているとの事。WuのAlgorithmと比べて品質は良い感じ。source codeを斜め読みした限りでは、固定小数点方式っぽいし、table使ってるし bit演算で工夫してるみたいだし…

Anti Aliased Line

線の輝度のむらをPhotoshopで補正してみた。 個人的には、この方が線が滑らかに見える。

Anti Aliased Line

http://www.geocities.co.jp/SiliconValley-Sunnyvale/6769/cpp/linedrawer040705v01.zipC++で書き直してみた。D言語とは違って、固定小数点型と浮動小数点型をtemplateのparameterで切り替えるコードが苦も無く書けるのが素晴らしい。 線の傾きが負の時の事…

Anti Aliased Line

http://www.geocities.co.jp/SiliconValley-Sunnyvale/6769/dmd/graphictest040627.zip http://www2.starcat.ne.jp/~fussy/algo/algo1-2.htm を参考にして線分のClipping処理を付けた。これで用意しているバッファより大きな座標を指定しても 落ちる事が無く…

Anti Aliased Line

http://www.acm.org/jgt/papers/Nelson97/ ここのAnti Aliased Lineはすごく品質が高い。 昔sunで今はintelで働いているScott R. Nelson.という人のjournal。

Anti Aliased Line チューニング

・飽和加算の処理を最適化した。 ・ビット演算で色の切り出しと合成を行う特殊化したColor template型を作って利用した。http://www.geocities.co.jp/SiliconValley-Sunnyvale/6769/dmd/graphictest040622.cab SDL Graphics Extension (SGE) というライブラ…

Anti Aliased Line チューニング

更に以下の修正を行った。 座標計算処理の無駄を省く。 固定小数点演算を利用 6/13のに比べると約9倍くらいの速度になった。これでまぁ並くらいのスピードなんだろうか。。これ以上の最適化は個人的にもうやりたくない。。http://www.geocities.co.jp/Silico…

Anti Aliased Line チューニング

以下の2点を変更してチューニングした。 ・alpha blendingの処理をかなり端折る。 ・座標計算処理の無駄を省く。 http://www.geocities.co.jp/SiliconValley-Sunnyvale/6769/dmd/graphictest040619.cab 固定小数点演算にすればcastが減るので少しだけ速くな…

Anti Aliased Line 少しだけ高速化

色々小手先の修正を施してちょっとだけ高速になった。http://www.geocities.co.jp/SiliconValley-Sunnyvale/6769/dmd/graphictest040614.cab HotspotはPixel単位のAlpha Blendingの処理なので、 そこをSIMDで一気にやってしまうのがいいかも。

Anti Aliased Line

http://freespace.virgin.net/hugo.elias/graphics/x_wuline.htm をまるまる参考にして、AntiAliasing処理を施した線分描画処理を実装した。 D言語で組んで描画にはSDLを利用。ソースは以下。 http://www.geocities.co.jp/SiliconValley-Sunnyvale/6769/dmd/…