Boost.Rangeでdropを実装してみた

なぜかBoost.Range.Adaptorsにdropがなかったので作ってみた。slicedでdropを書けなくはないんですが、長さがわからないrangeに適用できないのが問題です。実際はtakeを先に作ったんですが、dropの方が短かったので…。 boost::copy(input | taco::drop(5), o…

std::chronoによる処理時間測定

C++

処理時間の測定は、clockやgettimeofdayを使う事が多いと思いますが、あまりC++っぽくありません。そこで、C++0xからstd名前空間に入ったstd::chronoを使ってみようと思います。std::chrono::system_clock::now()で現在の時刻(time_point)が取れるので、それ…

Boost.GILでブレセンハムのアルゴリズム

Boost.GILで線を引きたくなったので作ってみた。ある点 a から点 b まで線を引くパターンで、b.x >= a.x かつ b.y >= a.y かつ b.x - a.x >= b.y - a.yのパターンのみ実装しています。それに合わないケースはrotated_viewやtransposed_viewで視点を変更して…

Boost.GILによるpng生成

libpngってC++ friendlyじゃないよね、って呟いていたら、id:faith_and_braveさんに「そこでBoost.GILですよ」と言われたので、作ってみた。 #include <utility> #include <boost/gil/gil_all.hpp> #include <boost/gil/extension/io/png_io.hpp> int main() { namespace gil = boost::gil; gil::point2<ptrdiff_t> dim(400, 400); gil::gray</ptrdiff_t></boost/gil/extension/io/png_io.hpp></boost/gil/gil_all.hpp></utility>…

std::asyncによる並列for_each

C++

C++ではOpenMPよりも、std algorithmが並列に動いた方が便利だよね。ということで作りました。元ネタはhttps://twitter.com/cpp_akira/status/16195866927です。 #ifdef _OPENMP inline size_t concurrency_omp() { size_t n; #pragma omp parallel { n = om…

CUDAでFunctorを使う 捕捉

CUDAでFunctorを使う - fjnlの生存記録のような何かに対する捕捉です。当初、CUDAはデバイスコードへのパラメータをshared memory経由で渡していました。しかし、Compute Capability 2.0*1からはconstant memory経由で渡されるように変更されています。share…

CUDAでFunctorを使う

CUDAの.cuファイルはC++として解釈されるので、templateといった記法やfunctorといったデザインをデバイスコード上でも使うことができます。nvcc 3.0で動作を確認しました。もう2.xの環境が手元になかったので、2.xで使えるかはわかりません。 struct add { …