@techreport{oai:ipsj.ixsq.nii.ac.jp:00225166, author = {佐野, 由佳 and 小林, 諒平 and 藤田, 典久 and 朴, 泰祐 and 佐藤, 三久}, issue = {22}, month = {Mar}, note = {今日の高性能計算システムでは,高い演算性能とメモリバンド幅を有する GPU (Graphic Processing Unit) が高性能計算向けアプリケーションの演算加速装置として積極的に導入されている.しかし,GPU による演算加速は,GPU が持つ数多くのコアを活用し,かつそれらが SIMD (Single Instruction Multiple Data) 的な均質な処理が行われた時に性能を発揮するように構築されているため,並列度の低い計算や条件分岐などの複雑な処理を必要とする演算,通信が頻発するアプリケーションではその演算性能を十全に発揮することはできない.そこで,その GPU にとって不適合な演算を,回路の再構成によってアプリケーションに特化した演算パイプラインやメモリシステムを柔軟に構築できる FPGA (Field-Programmable Gate Array) にオフロードする手法が注目を集めている.現在の GPU プログラミング環境では,OpenACC に代表される指示文によるユーザフレンドリーなプログラミング環境が存在するが,FPGA プログラミング環境では,指示文を利用したプログラミング環境の完成度は高いとは言えない.そのため,我々は理化学研究所計算科学研究センター (R-CCS) と筑波大学計算科学研究センター (CCS) との共同研究により,Omni OpenACC コンパイラを FPGA プログラミング環境向けに改良する研究を進めている.本研究では,コンパイラによる演算性能最適化の手法を検討する材料として,高位合成を用いた FPGA プログラミングの演算性能向上手法について評価・検討する.具体的には,OpenCL によって記述された CG (Conjugate Gradient) 法のコードに対し,パイプライン化,Loop Unrolling,複数カーネル同時実行等,演算要素数を増やすための各種手法を試す.そして,ループの Unroll 数,同時実行するカーネル数を変化させ,FLOPS 数と BRAM (Block Random Access Memory) の使用率を評価する.FPGA の高速化は基本的にパイプライン処理によって得られるが,このクロックサイクル内の演算数を増加させ,同時に BRAM 使用量への影響等を調べ,性能最適化のための方策を探る.ただし,FPGA では Loop Unrolling の深さや,使用演算器数,メモリ使用量によって動作周波数が変化し,それらの間に複雑なトレードオフが存在するため,一概に同時実行演算数を増やすことが性能向上に資するとは限らない.今回実装した Intel Stratix10 FPGA 上での CG 法のコードでは,1 つのカーネルで Loop Unrolling を 8 回行った場合に最も高性能になることが判明した.また,2 つのカーネルで Loop Unrolling を 8 回行った場合に,動作周波数との関係で性能が最高になったが,メモリ使用量が大きく増大してしまった.他アプリケーションとの同 FPGA 上への同時実装のためにはメモリ使用量を抑える必要があり,そういう場合は 2 つのカーネルで Loop Unrolling を 4 回行った場合が最も高性能になることがわかった.}, title = {FPGA高位合成における演算性能向上のための空間並列性記述に関する研究}, year = {2023} }