実用的なJavaプログラムをGPUで実行するためにJava処理系に求められるものは

書誌事項

タイトル別名
  • How a Java runtime can execute practical Java programs on GPU

抄録

GPU は高いデータ並列性を持つアプリケーションを高効率で実行可能であり,HPC 分野で広く利用されている.しかしながら,その高い計算性能を利用するためには,GPU 上のメモリ確保やホストとのデータ転送,GPU のハードウェアを用いた独自の実行方式に基づいて GPU カーネルを記述する等,低レベル API を使う必要がある.現在,HPC 分野で GPU を使用する場合,一般的に CUDA や OpenCL 言語が使用されている.この 2 つの言語では,これらの API をプログラマが明示的に記述する必要がある.このような記述が必要であることは,GPU 非経験者にとって GPU プログラミングの敷居を高くしている理由の 1 つであると考えられる.このような記述を必要としない OpenACC が普及しはじめているが,適切な指示子を挿入する必要がある.これらの言語は C/C++/FORTRAN から利用可能である.非 HPC 分野でプログラムを記述する際には,自動メモリ管理・プログラムの安全性の確保・プラットフォーム非依存性等の,プログラムの生産性を高める特徴を持つ Java 言語が用いられることも多い.このような Java 言語の特徴を活かしたまま,GPU で実行可能なプログラムを記述することができるならば,GPU プログラミングの敷居を低くするとともに,より多くの分野で GPU が用いられることが期待される.Java 8 では,ループ内のデータ並列性を高レベルで記述可能な,Parallel Stream API が導入された.これを,ラムダ式と組み合わせると,並列実行可能なループを下記のように記述可能である.java.util.stream.IntStream.range(0, a.length).parallel().forEach(i -> { a[i] = i; });IBM Java 8 では,このような記述を Just-In-Time コンパイラが検出し,GPU で実行可能なコードと,そのコードを実行するために必要な CUDA Driver API を呼び出すコードを自動的に生成する.また,実行高速化のためのいくつかの最適化を自動的に適用する.現在の IBM Java 8 では,Parallel Stream API のいくつかのメソッドと,ラムダ式の中で Java 言語のサブセット (基本型のみ対応,など) を記述可能である.今後のバージョンでは,記述可能な言語機能を増やす予定である.このポスターでは,より大規模で実用的なアプリケーションの並列実行可能部分を GPU で実行する際に,現在の制限が持つ問題点,必要不可欠な言語仕様,望まれる最適化機能,などについて関連分野の方々と議論させていただき,ご意見をいただけると幸いである.

収録刊行物

詳細情報 詳細情報について

  • CRID
    1050011097156350080
  • NII論文ID
    170000150710
  • Web Site
    http://id.nii.ac.jp/1001/00141707/
  • 本文言語コード
    ja
  • 資料種別
    conference paper
  • データソース種別
    • IRDB
    • CiNii Articles

問題の指摘

ページトップへ