iPX社員によるブログ

iPX社員が"社の動向"から"自身の知見や趣味"、"セミナーなどのおすすめ情報"に至るまで幅広い話題を投下していくブログ。社の雰囲気を感じ取っていただけたら幸いです。

CUDA おん Haskell

ご挨拶

ご無沙汰しております。小川でございます。
最近はICEBOXを食べる意欲も減衰するほどめっきり寒くなりました。

寒がりの私には本社のUbuntuマシン(ゆたんぽ)は有難い存在です。
今回は寒さも吹き飛ばす為にGPUをまわしましょう。

CUDAをHaskellから使う方法を調査してみました。

CUDA

CUDA(Compute Unified Device Architecture)はNVIDIAが提供する並列コンピューティングアーキテクチャです。
GPUをグラフィック以外の汎用計算に用いることで、処理速度を向上することが出来ます。

実行環境

今回は次の環境でサンプルを動かしてみました。

バージョン
Ubuntu 14.04 LTS
Haskell Stack 1.2.0
nvcc 7.0.27

Ubuntu は導入済みであるとします。

Accelerate Haskell

CUDAを利用する事も出来るライブラリがGitHubにて公開されております。
Wiki に Quick Tour などが整備されており、また accelerate-sample というサンプルも公開されている親切設計です。

github.com

github.com

基本的な構文のサンプルコードを公開されている方もいらっしゃいました。
とても参考になります。
github.com

1次元配列の要素に全てを1足す簡単なサンプルです。

import Data.Array.Accelerate ((:.)((:.))
import qualified Data.Array.Accelerate as Acc
import qualified Data.Array.Accelerate.CUDA as CUDA

someFunc :: IO ()
someFunc = do
    let xs = Acc.fromList(Acc.Z :. 10) [1..10] :: Acc.Vector Int
    print $ CUDA.run $ Acc.map (+1) (Acc.use xs)

-- Result
-- Vector (Z :. 10) [2,3,4,5,6,7,8,9,10,11]

インストール | サンプル実行手順

# Haskell Stack のインストール
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 575159689BEFB442
lsb_release -a
echo 'deb http://download.fpcomplete.com/ubuntu trusty main'|sudo tee /etc/apt/sources.list.d/fpco.list
sudo apt-get update && sudo apt-get install stack -y

# Accelerate-Example を動かすためのソフトウェアをインストール
sudo apt-get install llvm-3.5-dev
sudo apt-get install libedit-dev
sudo apt-get install freeglut3-dev
sudo apt-get install fftw3-dev

# Accelerate-Example をダウンロード
git clone https://github.com/AccelerateHS/accelerate-examples.git
cd accelerate-examples
ln -s stack-7.10.yaml stack.yaml

# ビルド | Rayサンプルを実行
stack setup --upgrade-cabal
stack build
stack exec accelerate-ray

終わりに

Welcome to HaCUDAll World.
f:id:ipx-writer:20161109205124p:plain


次の執筆時はCUDA、DeepLearningあたりを書こうと思います。
それでは良いゆたんぽライフを!