6章AccelerateによるGPUプログラミング

読者のコンピュータの中で最も強力なプロセッサは、おそらくCPUではないでしょう。現代のGPU(Graphics Processing Unit)は、多くの場合、汎用CPUの10から100倍の演算能力を持っています。しかし、GPUはCPUとは大きく異なる野獣であり、普通のHaskellのプログラムをそのまま動かすことはできません。GPUは大量の並列処理装置で構成されていて、それぞれはCPUの1コアよりもはるかに非力です。そのため、GPUの能力を引き出すには、高い並列性を持つ仕事が必要になります。さらに、GPUのすべてのプロセッサは、完全に同一のコードを足並みそろえて実行する必要があるので、配列の各要素に同じ操作を実行するようなデータ並列のタスクにのみ適しています。

近年ではGPUはグラフィック特有のものよりも、より汎用の並列処理タスクを処理するのに適すよう変わってきました。しかしながら、GPUは未だCPUとは異なった形で実装されています。異なった命令セットを使うからです。GPUのコードをコンパイルするには、特別なコンパイラが必要であり、通常ソースコードは制限されたC言語のサブセットのような言語で書かれます。広く使われている言語は、NVidiaのCUDAとOpenCLの2つです。これらの言語は極めて低水準で、いつどこでCPUのメモリとGPUのメモリの間でデータを移動させるかなど、GPUの動作の詳細をたくさん与えてやる必要があります。

GPUの膨大な計算能力を、CUDAやOpenCLのコードを書くことなく、Haskellから利用したいのは明らかです。Accelerateというライブラリがそれを可能にします。AccelerateはGPUプログラミングのためのEDSL(Embedded ...

Get Haskellによる並列・並行プログラミング now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.