CUDA kernel return value shortcut

CUDA の kernel 関数からの戻り値を毎回 cudaMemcpy したくない時につかう template<class T> class CudaValue { private: T* ptr; public: CudaValue() { cudaMalloc(&ptr, sizeof(T)); } ~CudaValue() { cudaFree(ptr); } operator T() { T ret; cudaMemcpy(&ret, p</class>…

python & CUDA Integration

This template would be greatly helpful to whoever want to integrate python and cpptest.cu #include <iostream> namespace test { namespace cuda { extern "C" void hello() { std::cout << "Hello" << std::endl; } }} test.cpp #include <boost/python.hpp> #include <numpy/arrayobject.h> using name</numpy/arrayobject.h></boost/python.hpp></iostream>…

boost-python ではじめる大規模機械学習(6)- boost::multi_array のエクスポート・前編

あらすじ boost-python を使用して、Python と C 言語両方を活用する方法を説明しています。本記事では、boost::multi_array を Python 側にエクスポートする方法を解説します。 こんなものがつくりたい Python でデータを読み込み、C で計算を行い、Python …

boost-python ではじめる大規模機械学習(5)- 小休止

あらすじ boost-python を使用して、Python と C 言語両方を活用する方法を説明しています。 前記事では、SciPy の配列に C 言語からアクセスする方法を解説しました。 今回は、実装の方向性について考えます。 PyArrayObject は面倒 前回見た通り、SciPy の…

boost-python ではじめる大規模機械学習(4)- 配列アクセス

あらすじ boost-python を使用して、Python と C 言語両方を活用する方法を説明しています。 前記事では、任意の Python モジュールを C 言語から呼び出す方法を解説しました。 本記事では、SciPy の配列に C 言語からアクセスする方法を解説します。 配列オ…

boost-python ではじめる大規模機械学習(3)- Python モジュールの呼び出し

あらすじ boost-python を使用して、Python と C 言語両方を活用する方法を説明しています。 前記事では、Python・C 言語間で簡単なオブジェクトを受け渡す方法を解説しました。 本記事では、任意の Python モジュールを C 言語から呼び出す方法を解説します…

動く隠れマルコフモデル(導出編・前編)- 動く PRML シリーズ(3)

やりたいこと 動く PRML シリーズ、第3回は隠れマルコフモデル (hidden Markov model, HMM) です。混合ガウス分布 (GMM)、変分混合ガウス分布 (VB-GMM) に続き第三回です。反復繰り返し型の機械学習アルゴリズムを理解するには大きく分けて二つの方法があり…

boost-python ではじめる大規模機械学習 (2) - データの受け渡し

あらすじ boost-python を使用して、Python と C 言語両方を活用する方法を説明しています。 前記事では、C 言語で Hello world を出力する関数を作成し、これを Python から呼び出す方法を説明しました。 本記事では、ふたつの言語の間で簡単なデータを受け…

boost-python ではじめる大規模機械学習 (1)

はじめに Python は、機械学習の分野で広く使用されるスクリプト言語です。SciPy や matplotlib といった、科学計算に特化したライブラリが多数提供されているのが特徴です。 いっぽう、弱点もあります。for ループの速度が遅いこと、並列処理が苦手なことな…

Roland Jupiter-8 解説

20世紀の音楽シーンは、Wurlitzer, Rhodes を始めとする様々な電子楽器により支えられてきました。その中でも、Roland が 1981 年に発売した Jupiter-8 は日本が産み出した最高傑作のひとつに数えるべきでしょう。本記事では、そんな Jupiter-8 についてゆる…

結局、すべては基本

早起きと適正体重に勝るものなし。なのかな。

五年後の自分、とは?

「五年後の自分について説明してください。」 エントリーシートで、こう問われることがあります。 一見回答不可能なこの問題は、実は「機会をどう選別するか」という問いなのだと思うようになりました。 まず、ストレートに考えます。 五年後の自分について…

電子楽器の歴史

20 世紀の音楽を創り上げてきたあれやこれやの電子楽器が、あまり知られていないようなのでまとめてみました。 おまけとして、日本メーカー各社の最新モデルも載せました。 半世紀を通して、ハモンドやローズなど、物理的な発音システムの音をアンプで大きく…

動く変分混合ガウス分布(実装編)- 動く PRML シリーズ(2)

こちらもどうぞ - 動く変分混合ガウス分布(導出編) 実装には python, SciPy と matplotlib を使います。 テストデータには Old Faithful 間欠泉データを使います。 また、データの読み込み、プロットは混合ガウス分布の際に実装したものを再利用しますので…

動く変分混合ガウス分布(導出編)- 動く PRML シリーズ(2)

やりたいこと 動く PRML シリーズ、第2回は変分混合ガウス分布 (variational Bayesian Gaussian mixture model, VB-GMM) です。 はじめに、前回の繰り返しになりますが、反復繰り返し型の機械学習アルゴリズムを理解するためには、大きく分けて二つのステッ…

動く混合ガウス分布(実装編)- 動く PRML シリーズ(1)

こちらもどうぞ - 動く混合ガウス分布(導出編) 実装には python, SciPy と matplotlib を使います。 テストデータには Old Faithful 間欠泉データを使います。 データの読み込み Old Faithful 間欠泉データを PRML のホームページからダウンロードし、作業…

動く混合ガウス分布(導出編)- 動く PRML シリーズ(1)

はじめに 混合ガウス分布 (Gaussian Mixture Model, GMM) は、多次元の特徴量を持つデータ点の集合を機械学習により分類するための重要な手法です。特に、GMM は応用範囲が広く、様々な手法の基礎となっているため、自ら更新式を導出するなどして特性をよく…

インラインアセンブラで sprintf を呼び出す

ここで使っているのは sprintf ではなく、sprintf_s ですけど。 sprintf_s(char*, size_t, const char*, ...) をインラインアセンブラで直接呼び出そうという話。 lea 命令を使えば文字列バッファのアドレスはいくらでも読み出せるのでらくちん。 void main(…

インラインアセンブラで printf を呼び出す(その2)

ローカル変数のアドレスを動的に解決して printf を呼び出す方法。 lea (Load Effective Address) 命令で実効アドレスを読み込めば良いらしい。掛け算の最適化命令だと思ってたけど、基本的な使い方はこっちなのかな。 void main() { char hello[] = "Hello\…

インラインアセンブラで printf を呼び出す

とても簡単なことなんだけど誰も書いてないのでメモ。 char hello[] = "Hello\r\n";void main() { __asm { mov eax, offset hello; push eax; call dword ptr [printf]; pop ebx; } }DLL 内の関数を呼ぶときには関数名を dword ptr [] で括ればいいらしい。 …