2018-08-01から1ヶ月間の記事一覧

開発ブログの必要性

何かを開発していると、何かの目的(ランタイムパフォーマンスなど)で少しわかりにくいハックをする必要が出てくることがある。もちろんそういう場所ではコメントを入れるわけだが、長くなりすぎたり、一つのソースファイルから複数のソースファイルへ言及…

今日、外に出ると晩夏の匂いがした。湿気と、草木と、熱気の残り香。夏が終わりかけていることと、それでもまだ夏であるということが、アパートの廊下の外を見るまでもなくわかった。外を歩きながら、今年の夏が殆ど夏らしいことができないまま終わろうとし…

Expression templateとfmaについて

Fused Multiply Addという命令がある。これは、a * b + cという形の演算を1命令で処理するものだ。丸めが一度しか走らないので精度がよくなる。以前、理論値と数値計算を比較してテストするときにこいつが使われるかどうかでテストが通ったり落ちたりして困…

maveの中身について

前回、SIMDベクトルライブラリを作った話をしたが、そこでやっていることについてかいつまんで書いておく。 まず、以下のようなクラスがある。 namespace mave { template<typename T, std::size_t R, std::size_t C> class matrix; template<typename T, std::size_t N> using vector = matrix<T, N, 1>; } これについて、ごく普通の演算子</t,></typename></typename>…

SIMDベクトル・行列ライブラリを作った

TL;DR 高水準なAPIでSIMD命令を使って小さなベクトル・行列計算するためのライブラリを作った。 github.com 名前は安直だが MAtrix と VEctor からとった。 数年前にもExpression Templateを使って似たようなものを書いたことはあったが、これは的を絞った分…

boost::compressed_pairの使いドコロ

C++

使いドコロがわかりにくいと噂のboost::compressed_pairというものがある。今日はこれの具体的な使いドコロを紹介してみたい。 ところでなぜ私の使っているIMEは「つかいどころ」を「使いドコロ」と変換するのだろう。まあそんなに違和感もないのでこのまま…

追記:リテラル数値について

C++

ところで、昨日の記事で、以下のコードはコンパイルエラーになって面倒だという話をした。 template<typename T> T f(T x, T y) { return x + y; } auto z = f(1.0f, 2.0); // f(float, double) 一応追記しておくと、これはtemplateだから生じる問題とかではなくて、オー</typename>…

リテラル数値と精度について

背景 C++では1.0とか書くとdoubleとして解釈され、floatにするには1.0fなどと書かねばならないことはご承知のとおりだ。また、doubleとfloatの演算の結果はdoubleになる。 これはtemplateを使うときに若干面倒になる。例えば、以下のような関数fを実装したと…

中に入れる型を決めないままコンテナだけを決める

C++

背景 これはある実験機器から出てくる特殊なフォーマットの実験データを読むために作ったライブラリのために考えたやり方である。 そのデータは画像データとヘッダ情報から出来ており、基本的にはそれらのペアを返すことになる。だが数百KB〜数百MB程度と大…