C++

カーネルをなんとかして関数テンプレートにしたい

はてなブログに移行しました.そして最初の記事です.最近 Xeon Phi なるものを触ったりしていますが,かなりとても書きづらいというか pragma ベースで書くのは (OpenMP で楽に並列化できるレベルなら良いですが) 決して楽ではないと僕は感じています.なぜ…

for のループカウンタがいじれて辛い問題

C++

ぶんちょうさんが Twitter / yutopp: forループで for(int i=0; ...と おっしゃっていたので.boost::for_each(boost::irange(begin, end), [](int i) { ...; }); な書き方は良いんですが,個人的にめんどくさいので for みたいに書けた方が良い.ただループ…

並列化の入門的な資料 (研究室向け)

研究室の大先輩が某所の*1某プロジェクトに入るそうなので,これまで並列化とか高速計算とかあまりやっていないけど,これからやらないとまずいってことだったので,僕が勉強会で教えていました.昨日のうちに slideshare にアップロードしていましたけど言…

Boost.勉強会 #11 で発表してきた

Boost.勉強会 #11 東京 - boostjp茨城の山奥に行ったりとか,書類書いてたりとかして1週間も経ってしまいましたが書きます."CilkPlus, TBB, OpenMP 〜 並列プログラミングを支える技術" という大層なタイトルで発表してましたが,つまるところこの辺のライ…

CilkPlus について

C++

コード書くの疲れたので休憩も兼ねて書きます.知っている人も多いと思いますが,CilkPlus は並列処理を容易にするため,Intel が自社のコンパイラに用意している C/C++ 用の言語拡張です. 元々は MIT で作られていた C 言語用の拡張だったとかなんだとか.…

PLplot でコマンドライン引数にデータファイルを指定する方法

最近 TeX に載せるグラフを書くために Numbers とか使って EPS に変換したりとかしてたのですが, よくある2段組み用に使うと汚くてかなり見づらい.今日とうとう諦めて PLplot を使って描画プログラムを書くことにしました.PLplot Home Page - MainPLplot は …

Intel C++ Compiler で C++ 標準ライブラリを使うときに気をつけたいこと

C++

2ヶ月以上ぶりです.最近 Intel C++ Compiler (icpc) を使う機会が増えたのですが, GCC で書いたプログラムを他のコンピュータ (自分でシステム管理ができないタイプ) でコンパイル/実行しようとしたときに躓いたのでメモ.Intel C++ Compiler Linux 版は GCC …

C++ Advent Calendar 2012 「18日 : Cer に知って欲しい C++」

C++

この記事は, C++ Advent Calendar 2012 (C++ Advent Calendar 2012 - PARTAKE) の18日目です.温いネタをやりたいので C 言語を使っている人 (Cer) に C++ の知って欲しい/今すぐ使える機能を Tips 的に書いていこうと思います.対象は特に設けなくていい気が…

Boost.MPI に MVAPICH2 を用いる

Boost.MPI は MPICH や OpenMPI では Default Configuration が良い感じに走って using mpi するだけで問題ないのですが, MVAPICH2 はコンパイラの名前が異なっているため, そのままでは動きません./tools/build/v2/user-config.jam に以下のように書きます.…

ある変数がメソッドを呼び出せるかで SFINAE

C++

auto func(...) -> decltype(...) を使えば, 渡された変数がメソッドを持つか持たないかで SFINAE とかできる. #include <iostream> struct memory { std::string to_string() const { return "is memory."; } }; struct device { std::string to_string() const { ret</iostream>…

カーネル関数を分離して C++11 コードをビルド.

nvcc でないとビルドできないのはカーネル関数なので, ここと通常の C++ コードを分離してそれぞれビルドしたオブジェクトをリンクすれば, 普通に C++11 を使ったコードが(カーネル関数以外で)書けるようになる.後, CUDA を使うために必要なライブラリとか, …

わんくま横浜勉強会に参加したら発表してきた話.

わんくま同盟昨日行われたわんくま横浜, nyaocat さんが発表するとのことでふらっと参加するかーと思ったら, 当日 nyaocat さんが風邪で病欠になっており, たまたま居合わせた僕があおいさんに見つかってしまい代理発表させられるすることになりました.別に…

gettimeofday よりも clock_gettime よりも boost.chrono.Clock

実行時間を図るとき、posix 系列なら gettimeofday で実行時間を測っていた。だいたいこんな感じ。 #include <cstdio> #include <sys/time.h> double second() { struct timeval t; gettimeofday(&t, NULL); return t.tv_sec + t.tv_usec * 1e-6; } int main(int argc, char** ar</sys/time.h></cstdio>…

Boost.勉強会 #10 に参加しました

Boost.勉強会 #10 東京 - boostjpもう二日経ったけど書く。色々あったけど、最後に書くとして、各発表の感想。 Boost ライブラリ一周の旅 1.45.0 〜 1.50.0 C++Now! 2012 参加レポート local function については、「あれ、auto でラムダ式を束縛すれば良い…

Boost.勉強会 #9 つくばで発表してきた。

家に帰宅して早速書いてます。Boost.勉強会 #9 つくば - boostjpBoost.Multiprecision について僕が調べてみたことを全部書きました。Boost.Multiprecision (SlideShare)当日の発表では、結構早く進んでしまったので章の区切りごとに質問時間をとってみたの…

今週末は Boost.勉強会で発表してきます

Boost.勉強会 #9 つくば : ATND今週末になりました Boost.勉強会 #9 つくば です。 今回はこのブログでも書いた Boost.Multiprecision について、もっとまともに調べたことを話します。 使い方とか、分かったこととか、ML 読んでの内容とか。GMP, MPFR とか…

Boost.Multiprecision を調べてみた

Faith and Brave - C++で遊ぼう<2012年4月6日に調査>Boost.Multiprecision が、なんとなく良さげなライブラリに見えてきたので、落として調べてみました。ただの調査メモなので、使い方的な入門は書いてないです。 gcc で使いたい どうもテスト環境は Wind…

Boost.ProgramOptions 備忘録

ちょっとコマンドラインでぽちぽちやる必要がでてきて、解析するのがめんどくさいので Boost.ProgramOptions でも使おうと思います。このライブラリはビルドしないと使えない(ヘッダオンリで利用できない)ので、そこは注意して下さい。名前空間は長すぎて泣…

闇鍋プログラミング勉強会を行いました。

昨日、東京の某所某大学で闇鍋プログラミング勉強会を行いました。当日、闇の軍団の力か、東京では強風が吹き荒れ、JR各線が運転見合わせや徐行運転などで大幅にダイヤが乱れ、30分遅れた状態に加えて参加者がこれなくなりキャンセル者が発生という自体に陥…

CUDA プログラミング入門みたいなのが NVIDIA Japan から出ていた。

NVIDIA JAPAN - YouTube真面目に全部は見ていませんが、どこかの会社の人が担当してビデオを撮っているらしく、エディタを叩いてプログラムを作っていく様はまるでライブコーディングでした。基礎的な部分もある程度しっかり紹介しているらしく、これが後数…

gcc 4.5をビルド

C++

CUDA 4.1でgcc 4.6がビルドできると思ったらただの勘違いよろしくgcc 4.5までしか対応していないとのことでしたので4.5をビルドしなおしました。この間のgcc 4.6をビルドしたのとそこまで変わりません。変わったのは、gccのディレクトリ内に適当なディレクト…

CUDA 4.1でGCC 4.6が使えると言ったな、アレは嘘だ!(多分)

タイトルどおりです。つい2週間前にやったときにはエラーもなくビルドできたはずなのですが、今になってエラーになりました。どうしてかはよく分かりませんが・・・。GCC 4.5はサポートされているようなので、そちらはばんばん使いましょう。

gcc 4.6.2とOpenMPIとBoost.1.49.0をインストールする

ただのメモ書きです。Boost.1.49.0はBoost.MPIも使えるようにしておく。 CentOS 6.2 Core i7 3GHz (多分) 12GB RAM (多分) gcc 4.6.2のビルド 今回は /usr/shareの中にgcc-4.6というディレクトリを掘ってそこにインストール。まず必要な3つのライブラリをイ…

予告)C++の勉強会しますか

1徹していて若干気分がアレです。それはともかく、前にアキラ先生から「どっか小規模な勉強会に使える会場ないか」みたいな話があったので、調べてみると僕が通っている学部のキャンパスはどうとでもなりそうということだったのを思い出しまして。「せっかく…

CUDAでBoostを使ってみたかったんです

よくよく考えると、最近Boostをほとんどつかってないなーと思いました。ちゃんと言うと使いどころが出てこなかったんだと思います。 最近はCUDAをさわりつつ、という感じだったのでBoost.MPIとか使えると嬉しいなと思っています。なので少しずつBoost.MPIの…

Texture Memory使いたかったから勘弁してください

この記事書いてる途中にOpera for Ubuntu11.10が2度クラッシュしてデータ消えたのでもうUbuntuで記事書いてるときにOperaは使わないと心に決めました。もう書くのめんどくさくなってきたのでさくっと書きます。CUDAにはTexture MemoryがあってTexture Unitか…

Effective C++やC++11やテンプレートを教えてみた。

C++

某研究室の院生の人に飲み会の席で冗談混じりに「教えて」とか言われたので、試しにやってみました。CやJavaを学んだ+テンプレートは型Tをfloatやdoubleに置き換えて使っている程度ということだったので、まあEffective C++とかC++11とかテンプレートのテク…

メモ:OpenGL Interoperability の話

長いので Interop にして話す。OpenGLとの相互運用のこと。Direct3Dとも可能だが、Direct3Dはいかんせん初期化が面倒なので使いたくないので無視。CUDA C Programming Guideの3.2.11辺りにGraphics Interoperabilityのページがある*1のでそれと、SDKのサンプ…

メモ:neocomplcacheでC++のインクルード補完

なぜかすごい躓いたのでとりあえずメモ。 .vimrcでg:neocomplcache_include_paths.cppに設定する方法もあるようだが、何かうまくいかないのでとりあえずpathに追加する形で。 " ~/local/includeにboostのインクルードディレクトリが置いてある set path+=$HO…

メモ:CUDAをWindows + Visual Studio 2010で使う

以下のページを見たりして、色々設定してビルドできるようにしたのですが、VisualStudioでビルドする意味ってあんまりないな、と思ったりします。既存のVSプロジェクトにCUDAコードを追加する方法 - PukiWiki for PBCG Lab CUDAを使う:tech.ckme.co.jp例え…

LuaJITがDirectXとともに使うと問答無用で落ちる

前々から凄い意味が分からなかったんですが、コンソールでエラー内容を見れるようにしてようやく分かりました。DirectX側でFPUの演算速度が落とされていたからだそうです。空想具現化プログラミング [Lua] Luaの数値型の精度の問題ここによると、FPUの演算速…

DxLibからDirect3D9のデバイスを取得する

ものすごく面倒でしたがメモ。 LPDIRECT3DDEVICE9を取得したい 上のを読むと、ライブラリだけでは無理で、ソースファイルに添付されるヘッダがないと取得できないらしい。 というわけで、ダウンロードサイトからライブラリとソースコードを取ってくる。 DX…

MinGWのgccでboost.threadを使う私的メモ

MinGW使って色々やろうと思ったらboost.threadをスタティックリンクできなくて涙目になったのでメモ。 boost.threadのdetailの中に入ってるconfig.hppを弄る方法もあるようなのだが、普通にBOOST_THREAD_USE_LIBを定義しておけばビルドできるそうなのでg++の…

Luaから疑似クラスを受け取ってC++で実行する

前回の記事の疑似クラス版。 luabind::objectはもちろんテーブルを受け取れるので疑似クラスも扱えます。テーブル内の関数や変数を見つけるのはoperator[]で可能です。 #include <lua.hpp> #include <lualib.h> #include <luabind/luabind.hpp> int main() { ::lua_State* L = ::lua_open(); ::luaL_o</luabind/luabind.hpp></lualib.h></lua.hpp>…

Luaから無名関数を貰ってC++側で実行する

もしかしたらできるんじゃないの?と思ったらやはりできたのでメモしておきます。 Luaさんに処理の一部分を書いて貰いたい場合、名前が必要な通常の関数はめんどいです。その名前が無きゃ呼び出すのめんどそうです。後名前が干渉してどうこうとかありそうで…

Boost.ipcの有効利用(?)

というレベルではないですが Boost.Property_treeで暗号化したiniファイルを読んでみる - 名古屋313の日記 で暗号化を行うのに一度バッファを作って取るのが面倒だなあ、と思ったのでこれはBoost.ipcのメモリマップドファイルの出番ではないかと思いちょ…

Boost.勉強会# 4に行ってきました

先週の土曜日の話だからまだ大丈夫ですよね。という訳で行ってきました。結構早めについたのでガラガラかなーと思ったらid:nyaocatさんがすでに居ました。早い。 まあ確かにがらがらでしたよね。10時なってましたけどまず発表者の大半が居ない…だと?でもTwi…

Cinderやばい(複数の意味で)

boost.ネタ帳を見ていたらCinderというのがあって気になってググったら結構面白そうなアーティスティック制作系のライブラリのようです。インタラクティブ性も含んでいたりします。入門は以下。なんですがこれMacの話です。 クリエイティブなC++ライブラリ "…

Luabind備忘録

現在Luabindを用いて部のゲームプログラムにLuaを持ち込んでいますが、クラスをバインドすることも多いです。で、クラスのメンバ関数のバインドコードがオーバーロードされているとき非常にめんどくさくて投げたくなるのは仕方がない。 struct drawable { vo…

Managed Memory Segmentsで動的多態する場合の留意事項

boost.ipcのManaged Memory Segmentsで動的多態を演じたい場合、destroy(_ptr)を呼び出す際、作成時の型を指定する必要があります。つまり抽象クラスの型を指定して、抽象クラスのポインタを渡して、削除することはできません。 namespace ipc = boost::inte…

destroy_ptrでハマる

いや、まさかこうなるとは思ってなかったのでメモ。Managed Memory Segmentsはconstructしたオブジェクトをdestroyする必要があります。これはconstruct方法によっていろいろ選べます。例えばnamed instanceとして作成した場合、destroyを使って名前を指定し…

Managed Memory Segments 小ネタ幾つか

今日は特にネタがなかったので、Managed Memory Segmentsが提供してる機能をいくつか書いておきます。とりあえずManaged Memory Segments上のお話なので前提条件を書きます。変数名はmm_segmentsで、オブジェクトは自動で削除されます。ちなみに、ドキュメン…

Boost.interprocess 解説&備忘録

ただの記事リストです。01:boost.interprocessさん凄いです - krustf の雑記 02:しばらくboost.interprocessネタで書いていこう。 - krustf の雑記 03: 04:vectorstreamの話 - krustf の雑記 05:bufferstreamの話 - krustf の雑記 06:STLもmanaged上な…

いやいやManaged Heap Memoryの方が

Managed Heap MemoryがBoost.interprocess Document P.90に書いてあります。これはstatic buffer領域を必要とせず、予めヒープ上のメモリを確保して利用する形だそうです。使い方はManaged Heap Memoryと同じで構築方法が異なります。 例えば、自前でヒープ…

Managed External Bufferは便利かも?

久しぶりに更新。Boost.interprocessの話です。またもやドキュメントパラパラ見てたら結構使えそうなやつが出てきたのでメモ。 Managed External Buffer "様々な状況でSimpleなオブジェクト、STLと同じようなコンテナや文字列、 あとは何かしらのバッファが…

XAPOFXで出来合いのエフェクトを使う

たまにはXAudio2とその関係のお話でもします。 XAPO? XAPOFX? というか今までXAPOが何か、という話を真面目にしてなかったような気がするのでそこから話します。XAPOとはXAudio2と連携して利用するオーディオ処理オブジェクトを作成する手段を提供するAPI…

multi_indexなども使えて便利

ついつい見落としてましたが、interprocessはmulti_indexなどのinterprocess外ですがBoostのライブラリとして提供している一部のコンテナもmanaged memory segmentsを使って作成できるようです。ドキュメントに書いてあるのはmulti_indexとunordered_mapの2…

プロセス間共有用のnamed mutex

interprocessには"named mutex"という名前付きMutex Objectを作成して複数のプロセス間で排他制御を行える機構があります。recursiveなMutexなどありますが、多分interprocessとして特徴的な機能だと思いますので紹介。作り方と最終的な削除方法が面倒ですが…

STLもmanaged上ならば使用可能

[注意] この記事は間違っている可能性が高いですできるのかなーと思っていたんですが、managed上であればsegment_managerを使用したアロケータを作成すればSTLコンテナをそのまま利用できるようです。(じゃあなんで同じようなコンテナがboost.interprocess内…

bufferstreamの話

前回のvectorstreamと同じで、interprocessのstreamsのもう1つ、bufferstreamの話。 bufferstream? "buffer"については皆さんが普段思ってる通りで良いと思います。何かしらのデータを溜めておくための領域。bufferstreamは固定サイズバッファにデータを読…