本記事は C++ Advent Calendar 2013 9日目として書かれました。 はじめに お久しぶりです。 @fjnli です。 そういえば、去年はC++関係のAdvent Calendarを書いていませんでした。 最近C++をあまり触っておらず、BoostとかC++14とかのフォローがあまりできて…
はじめに 本記事は Ariel Advent Calendar 2011 : ATND の11日目です。12日にオーバーランしてますが、11日目です。ごめんなさい。 ぷろぐらみんぐ言語ありえる まずは定番のHello worldをありえるで書いてみましょう。 ありえるありありえるありありえるあ…
はじめに 本記事は partake.in 7日目です。 stable_vector Boost 1.48からBoost.ContainerというSTL互換のコンテナライブラリが採用されました。基本的にはboost::container::vectorやboost::container::stringといったSTL互換のクラスが提供されていますが…
始めに 本記事は C++11 Advent Calendar 2011 : ATND の6日目です。 std::thread C++11時代のthreadの基本は std::thread です。おもむろに #include をしましょう。std::threadはコンストラクタで渡された関数オブジェクトを別スレッドで実行します。 #incl…
手作業だとめんどくさいし、間違えそうだということでlibclangを使ってみました。こんなファイルstub.cを用意して、 #include <mpi.h> mpi_extractorに食わせると、MPI関数の名前、返り値の型、引数の型がCSVで出力されます。 $ ./mpi_extractor stub.c MPI_Abort,i</mpi.h>…
Linux環境下でのBoost.Asioは、標準でepoll_reactorを使用します(AsioではIO多重化を行うクラスをreactorと呼んでいます)。しかしながら、epollは登録できるfile descriptorの種類がselectよりも狭いという仕様上の問題があります。例えばファイル(regular f…
夏休みはもう終ってしまいましたが、bjamはたまーに使っています。 C++のソースコードをコンパイルするだけなら、bjamは最短なのではないでしょうか。 …と思いましたがmake最短ですね…。 boost使いたいです 3日目に書いた方法でboostを使ってもいいのですが…
0xの使い方やライブラリ回りは、プロのbjammerことid:Flast先生に教えてもらいました。 複数のソースから1つの実行ファイルを作りたい 単に依存関係を並べればいいようです。Jamroot: exe a : a.cpp b.cpp ;$ $BOOST_ROOT/bjam release ...found 13 targets.…
1日目と同日公開ですが、2日目です。はい。デフォルトのvariantがdebugなので、ぼーっとしてると遅いバイナリを作ってしまいそうで怖いですね。3日目に続くかは謎です。 variantオプション bjamはデフォルトでdebugモードでビルドされます。ビルドモードを変…
bjamが欲しいので、まずはboostをダウンロードして展開し、bjamをビルドします。そして、boostを展開したディレクトリをBOOST_ROOT環境変数に定義しておきます。BOOT_ROOTはbjamの動作上も必要です。 $ export BOOST_ROOT=/path/to/boost $ cd $BOOST_ROOT $…
僕はかなりはまったのですが、ZeroMQのcontextはfork(2)で複製できません。以下のようなコードを書くと死にます。forkする前にcontextを破棄するか、preforkしておく必要があります。URLを忘れたのですが、MLでもpreforkしておいてよみたいな流れだったので…
phoenix::letの中で、引数(_1, _2, arg0, arg1系)は参照できず、コンパイルエラーになります。になって、引数がどっかにいってしまう。">*1この挙動はとても不便ですが、仕様としてこうなのか、実装がバグっていてこうなっているのかはわかりません。 void f…
Boost.ArchiveのMessagePackバックエンドに用いた実装です。まだ試作段階ですが、Boost付属のSerialization用テストは一通り合格しているので、とりあえず動くと思います。ソースコードはgithubにあります。なお、ビルドツールはwafを使用しているため、ビル…
clang のコンパイラではなく、ライブラリの方で遊んでみた。使用した clang(+LLVM) のバージョンは Subversion レポジトリより取得した r127064 。ちょっと古いが気にしない。clangのライブラリの方のドキュメントが見つけられなかったので、主にclang tutor…
Boost.勉強会 #4 : ATND で発表してきました。資料は Boost.勉強会#4 Boost.Proto にあります。他の方の発表資料については、id:thincaさんがいい感じにまとめてくれています。感謝。さて、僕はBoost.Protoネタで発表をしてきたわけですが、前半後半と分けた…
register __m128* tmp asm ("xmm0"); asm volatile ( "pxor %[tmp], %[tmp]" : [tmp] "+x" (tmp) ); なんだかまわりくどいですね…。このコードは、 pxor %xmm0, %xmm0 に展開されます。
IntelのOptimization Manualの2.2.5.1 Efficient Handling of Alignment Hazardsによると、Nehalem系CPUからMOVDQUの性能が向上したとあるので、実験してみました。4パターンのmovを実行して速度差を見ます。alignedはアクセス先のアドレスが16バイトアライ…
最初に このエントリは C++ Advent Calendar jp 2010 : ATND 16日目の記事です. Boost.Protoぺろぺろ Boost.ProtoとはBoostに含まれているExpression Template(ET)のためのライブラリです.Xpressiveや,Spirit,Phoenix v3のベースとなっています.このエ…
CUDA Toolkit 3.2から,CURANDという疑似乱数ジェネレータライブラリが導入されました.GPUによる乱数の生成を行えるライブラリです.CURANDは,2つのAPIカテゴリから構成されています. Host API ホストからの使用を目的としたAPI群.Device APIの上に構築…
CUDA Toolkit 3.2から,CURANDという疑似乱数ジェネレータライブラリが導入されました.GPUによる乱数の生成を行えるライブラリです.CURANDは,2つのAPIカテゴリから構成されています. Host API ホストからの使用を目的としたAPI群.Device APIの上に構築…
Blogは一ヶ月overぶりです。生きてます。最近のUbuntuでは、/etc/fstabのパーティションの指定にUUIDを使うようになっています。そのため、従来の/dev/sda1といった指定でたびたび発生していた問題が解消されています。例えば、HDDが増えた時にsdaがsdbにな…
CUDA Toolkit 3.1からデバイスからprintfを発行できるようになりました.ただし,Device Capability 2.0以降のデバイスでなければサポートされていないので,GTX480といったいわゆるFermiアーキテクチャのカードが必要です. #include <stdio.h> __global__ void test</stdio.h>…
Boost.Spiritは元々が*1がパーサージェネレータであったこともあり、Qiが一番有名であると思いますが、Boost.Spirit一家にはKarmaという次男坊(?)がいます。Spirit.KarmaはSpirit.Qiの逆で、データから文字列を生成するコンビネータ郡です。Performance of N…
$ bjam toolset=gcc のようにして実行をすると、システムデフォルトのgcc, g++が使われます。しかしながら、複数のgccのバージョンを切り替えてビルドやテストを行いたいケースもあります。autoconfによるビルドを採用しているソフトウエアならば、一般的に…
ちょっと気になる所があったので, std::tuple (C++0x) boost::tuple boost::fusion::vector について大きさを調べてみました.fusion::vectorはタプルというよりも,タプル+αという感じですが….コンパイラによっても差が出そうだなーと思いつつも,VCがす…
最近のIntel CPUにはAES-NIと呼ばれるAES暗号化を加速させるための専用命令群が実装されています。対応CPUは、32nmプロセスで製造されたi7, i5となっています。いろいろややこしいので、詳しくはIntelのサイトかwikipediaなどを参照してください。最終的には…
BFだとJITしやすいので作ってみた。簡単な最適化をしています。add/sub [rdi], immの直後にcmp [rdi], 0が来るのは無駄でしかないので、そこの最適化ぐらいはしてみたいですね。http://gist.github.com/518146ソースコードは400行ほどあるのでgist上に置いて…
LanguageDef と TokenParser と ExpressionParser を使ってみたかったので。。。空白の扱いについて、ごちゃごちゃ書く必要がなくて楽でいいですね。 module Main (main) where import Text.ParserCombinators.Parsec as Parsec import qualified Text.Parse…
cairoの描画フロントエンドとしてSDLを使ってみた。ちょっと画面に表示させるだけなのにCocoaだのなんだのを使うのが面倒だったので…。見た感じ、cairo image surfaceとSDL surfaceを比較すると、cairoの方がピクセルフォーマットに対する許容度が低かったの…
Motivation GTX480に代表されるGF100およびGTX460などのGF104にはL1, L2キャッシュが搭載され、メモリアクセスに関する制限が緩和されました。何も考えずに書くとGT200系では性能が出なかった場合でも、十分な性能が発揮されることがあります。そこで、定数…