宇都宮大学 大学院地域創生科学研究科 工農総合科学専攻 横田・大津研究室

PearLab, Utsunomiya Univ.

Japanese/ English

GPGPUによるアプリケーションの高速化

研究概要

本プロジェクトでは、GPUを活用した並列処理に関する研究を行っています。

GPU (Graphics Processing Unit) とは、PCやワークステーション内のグラフィックボード (ビデオカード) に搭載されている画像処理用プロセッサであり、主にディスプレイに映像を表示するなどの役割を担当しています。GPUは数百~数千個の演算コアで構成され、複数のコアを活用することで、高速かつ繊細な画像処理を実現することができます。

近年、この高い演算能力を持つGPUを本来の画像処理以外の汎用的な数値計算に利用するGPGPU (General Purpose computing on GPU) が注目されています。GPGPUでは、大量のデータをCPU側のメモリからGPU側のメモリ (VRAM) に転送し、この転送されたデータをGPUで並列処理することで、CPU単体よりも高速に処理を行うことができます。

そこで、本プロジェクトでは、計算時間が膨大なアプリケーションに対してGPGPUを活用することで、計算時間の大幅な短縮を目指すための研究をしています。研究事例としては、パスワード解析や最短経路問題、ネットワークシミュレーション、計算機ホログラム設計など、さまざまな分野を対象として、GPUを用いてアプリケーションの高速化を行う研究を行っています。

CPUとGPUの違いは?

コンピュータの計算速度を向上させるために、これまで並列処理に関する研究が幅広く行われています。ここでは、CPUによる並列処理とGPUによる並列処理の違いについて簡単に説明していきます。

  • CPU ・・・ 少数精鋭

一般的なCPU単体のコア数は4~8コア程度であり、複数のコアを用いてプログラムを並列に実行することができます。例えば、並列性の高いプログラムを4コアのCPUで並列に実行する場合、1コアで逐次的に実行する場合よりも4倍高速化することができます。

また、CPUは複雑な処理を含むプログラムに対しても並列処理を行うことが可能であり、投機実行などを利用してプログラムを並列化する取り組みが行われています。CPUについてより詳しく知りたい人は、YAWARAプロジェクトやプロジェクトのページを見てみましょう。

  • GPU ・・・ 大人数体制

CPUと比較して、GPUのコアの数は数百~数千個存在します。このため、GPUを用いて大量のデータを並列に処理することで、CPU単体で処理する場合よりも高速に演算を行うことができます。(プログラム次第では、CPUで逐次的に実行する場合よりも100倍以上の高速化を実現することもできます)

一方で、GPUは1つの命令で複数のデータを処理するSIMD (Single Instruction Multiple Data) 形式で並列実行を行うため、プログラム中に分岐処理を含む場合は性能を極端に落とすことがあります。この理由に関しては、後ほど詳しく説明します。

 

GPUはなぜ分岐処理が苦手か?

先ほどGPUは分岐処理を含むプログラム場合は性能を落とすことがあると書きましたが、その理由について述べたいと思います。

例えば、命令Aまたは命令Bのどちらかを実行する分岐処理が存在するとします。CPUの各コアがこの分岐処理をそれぞれ実行する場合、各コアは分岐の条件を元に命令Aまたは命令Bのどちらかをそれぞれ実行します。

一方、GPUの場合、複数のコアがグループとなっており、このグループに対して1つの命令しか実行することができないため、命令Aと命令Bを同時に実行することができません。そのため、このような分岐処理が含まれていると、命令Aの実行が終わってから命令Bを実行する必要があるため、全体の実行時間が増加してしまうことがあります。

このように、GPUはCPUよりもコア数は圧倒的に高い一方で、プログラム次第では分岐処理が原因で実行時間が増加してしまうことがあります。このため、GPUを用いてプログラムを高速化する際、分岐処理による影響をできるだけ減らすことが速度向上の重要な鍵となります。

GPGPUの開発環境は?

GPGPUの発展に伴い、GPGPUを利用するための開発環境も整備されてきました。近年では、GPUの開発メーカーであるNVIDIA社が「CUDA」を、AMD社が「ATI Stream」を無償で提供しており、GPGPUの活用が年々広まっています。他にも、NVIDIA社とAMD社の両方のGPUが利用可能である「OpenCL」が登場しています。

これらの開発環境では、C言語をGPGPU向けに拡張したプログラミング言語を利用しているため、C言語の知識が多少あれば利用しやすい環境であるといえます。最近では、Fortranなど、C言語以外のプログラミング言語のサポートも進められており、GPGPUの適用分野が広がりつつあります。

最後に

現在、GPGPUは世界中の企業や大学、研究機関などで活用されており、さまざまな分野で計算時間が膨大なプログラムの高速化が行われています。一方で、プログラムを並列化する際、GPUの性能を活かすためには、分岐処理による性能低下などを可能な限り減らすことが重要となります。そのため、プログラムの高速化を実現するためには、GPUをより効率的に利用するための並列化手法の検討・提案が求められており、これらの研究が広く行われています。