C++ 用のベクトル・行列ライブラリを探してみました.
文法の美しさでは Eigen がよかった.すごいかっちょいいソースが書けます.ヘッダーファイルだけというのもお手軽.
http://eigen.tuxfamily.org/
でも,CUDA で並列計算したいときは ArrayFire がいい感じ.ソースファイルは共通のまま,g++ のリンカーオプションを取り替えるだけで,CPU用とGPU用をコンパイルできます.
http://arrayfire.org/
Ubuntu 14.04 へのインストール
1.ダウンロード
http://arrayfire.com/download/
2.準備
※本家の説明ではパッケージ名 libglfw3 が誤植で glfw3 になってた.
sudo apt-get install libfreeimage-dev libatlas3gf-base libfftw3-dev cmake sudo apt-add-repository ppa:keithw/glfw3 sudo apt-get update sudo apt-get install libglfw3
3.インストール
sudo sh ArrayFire-*_Linux_x86_64.sh --exclude-subdir --prefix=/usr/local
4.コンパイル
ソースコードの例:
#include <arrayfire.h> // Generate random data, sum and print the result. int main(void) { // Generate 10,000 random values af::array a = af::randu(10000); // Sum the values and copy the result to the CPU: double sum = af::sum<float>(a); printf("sum: %g\n", sum); return 0; }
Makefileの例: ※$(CC)の前は,スペースじゃなくてタブにします.
#-lafcpu, -lafcuda, or -laf for the CPU, CUDA, and unified backends LIBS=-lafcpu LIB_PATHS=-L/usr/local/lib INCLUDES=-I/usr/local/include CC=g++ $(COMPILER_OPTIONS) COMPILER_OPTIONS=-std=c++11 -g all: main.cpp Makefile $(CC) main.cpp -o test $(INCLUDES) $(LIBS) $(LIB_PATHS)