FGA との連携 -- GPUを用いた高速画像処理¶
WIL の有償オプションライブラリである FGA (FAST GPU Accelerator) と連携し、 PyFIE で読み込んだ画像に対して NVIDIA 社の GPU ボードを利用した高速な画像処理を行うサンプルコードです。
FGA を Python から使用するために add_library()
関数を使用します。
ライブラリ定義ファイル pyfie_decl_fga_1.7.0.json
は ダウンロード
からダウンロードできます。
pyfie_decl_fga_1.7.0.json
は サンプルコード sample_fga.py
と同じフォルダに設置してください。
import os
import pathlib
import timeit
import pyfie
# 利便のため PyFIE 関数が返すエラーコードに応じて例外を発生させる機能を有効化
pyfie.ctrl.enable_f_err_exception(True)
# WIL 3.1のFGAライブラリバイナリへのパス
fga_lib_path = pathlib.Path(os.path.expandvars("%WIL3_1_0X64%"), "fgamt.x64.3.1.0.dll")
# Linuxの場合は別のパスを指定する
# fga_lib_path = pathlib.Path("path/to/libfga.so")
# FGAライブラリへのバインディングを追加
pyfie.add_library(fga_lib_path, "pyfie_decl_fga_1.7.0.json")
# FGA のセットアップ関数を呼ぶ
pyfie.fnFGA_setup()
# チャネル数と画像サイズ
nch = 1
width = 4096
height = 4096
# FIE画像確保
hsrc_fie = pyfie.img_uc8(width, height, nch)
hdst_fie = hsrc_fie.empty_like()
# FGA画像確保
hsrc_fga = pyfie.fnFGA_img_root_alloc(pyfie.F_IMG_UC8, nch, width, height)
hdst_fga = pyfie.fnFGA_img_root_alloc(pyfie.F_IMG_UC8, nch, width, height)
# FIE側で入力画像作成
pyfie.jaehne_testimg(hsrc_fie)
def do_averageMxN_fie(hsrc_fie, hdst_fie):
"""FIEで5×5平均化フィルタを実行する"""
pyfie.fnFIE_averageMxN(hsrc_fie, hdst_fie, 5, 5, pyfie.F_BORDER_NONE, 0)
def do_averageMxN_fga(hsrc_fie, hdst_fie, hsrc_fga, hdst_fga):
"""FGAで5×5平均化フィルタを実行する"""
# FIE画像からFGA画像へコピー
pyfie.fnFGA_img_copy(hsrc_fie, hsrc_fga)
# FGAで処理実行
pyfie.fnFGA_averageMxN(hsrc_fga, hdst_fga, 5, 5, pyfie.F_BORDER_NONE, 0)
# FGA画像からFIE画像へコピー
pyfie.fnFGA_img_copy(hdst_fga, hdst_fie)
# FIEとFGAの処理時間をそれぞれ計測して表示
num_iter = 100
exec_time_fie_ms = timeit.timeit(
"do_averageMxN_fie(hsrc_fie, hdst_fie)", number=num_iter,
globals=globals()) / num_iter * 1000
exec_time_fga_ms = timeit.timeit(
"do_averageMxN_fga(hsrc_fie, hdst_fie, hsrc_fga, hdst_fga)",
number=num_iter, globals=globals()) / num_iter * 1000
print(f"Mean execution time with FIE: {exec_time_fie_ms:.1f} milliseconds")
print(f"Mean execution time with FGA: {exec_time_fga_ms:.1f} milliseconds")
処理結果例¶
$ python sample_fga.py
Mean execution time with FIE: 42.2 milliseconds
Mean execution time with FGA: 8.4 milliseconds
備考¶
処理結果例は下記の環境下で取得しました。
WIL 3.1.0.9, FGA 1.7.0, Core i5-6500 CPU, Geforce RTX 2080 Ti GPU
FGA関数に対しても
enable_f_err_return()
,enable_f_err_exception()
の設定は影響します。FGA画像オブジェクトに対して FIE オブジェクト拡張機能 は使用できません。