fullseye

GPU 穴埋め 第 3 便 — HALCON OpenCL 48 件と required 名簿の採否 — 2026-11-02

tools/gen_gpu_fill3_report.py が実測ログ(docs/perf/logs/fill3_*.json)と実装台帳から生成する。数字を手で書かない。採用規則は parity 差 < 5e-3(torch CPU と GPU の両方)かつ実寸倍率 >= 5.0x。

HALCON OpenCL 48 件

HALCON 名 Fullseye op parity 差 CPU/GPU 寸法 CPU s GPU s 倍率 採否 理由
abs_diff_image abs_diff_image 1.5e-07 / 1.5e-07 2048² x50 3.6 1.3 2.9x 不採用 実寸 2.9x(閾値 5.0x 未満)
abs_image abs_image 3.0e-08 / 3.0e-08 2048² x50 1.5 0.883 1.7x 不採用 実寸 1.7x(閾値 5.0x 未満)
acos_image acos_image 6.7e-08 / 6.3e-08 2048² x50 2.8 0.899 3.1x 不採用 実寸 3.1x(閾値 5.0x 未満)
add_image add_image 2.0e-07 / 2.0e-07 2048² x50 3.4 1.3 2.6x 不採用 実寸 2.6x(閾値 5.0x 未満)
affine_trans_image affine_trans_image 4.1e-07 / 3.8e-07 2048² x50 14.9 0.992 15.0x 採用 実寸 15.0x
affine_trans_image affine_warp 4.1e-07 / 3.8e-07 2048² x50 14.8 0.976 15.1x 採用 実寸 15.1x
affine_trans_image_size affine_trans_image_size 4.1e-07 / 3.8e-07 2048² x50 14.3 1.0 14.3x 採用 実寸 14.3x
asin_image asin_image 9.8e-08 / 1.3e-07 2048² x50 2.7 0.972 2.8x 不採用 実寸 2.8x(閾値 5.0x 未満)
atan_image atan_image 5.6e-08 / 7.2e-08 2048² x50 2.4 0.891 2.6x 不採用 実寸 2.6x(閾値 5.0x 未満)
cfa_to_rgb cfa_to_rgb — / — 2048² x50 4.3 — — 不採用 包み: 本体は cv2.cvtColor の Bayer 補間(8 bit 経由)
convol_image convol_image@9x9 2.5e-07 / 2.5e-07 2048² x50 6.5 0.966 6.7x 採用 実寸 6.7x
convol_image convol_image@31x31 6.6e-07 / 6.6e-07 2048² x50 85.8 0.907 94.6x 採用 実寸 94.6x
derivate_gauss derivate_gauss 1.1e-06 / 1.1e-06 2048² x50 10.1 1.3 8.0x 採用 実寸 8.0x
div_image div_image 1.5e-07 / 1.5e-07 2048² x50 3.1 1.3 2.5x 不採用 実寸 2.5x(閾値 5.0x 未満)
edges_sub_pix edges_sub_pix — / — — — — — 不採用 出力が可変長の輪郭点列(画素一致の parity が定義できない。前段の勾配だけ GPU にしても点列化が CPU に残る)
exp_image exp_image 9.8e-08 / 9.9e-08 2048² x50 2.4 0.903 2.7x 不採用 実寸 2.7x(閾値 5.0x 未満)
gamma_image gamma_image 9.6e-08 / 9.6e-08 2048² x50 2.6 1.1 2.5x 不採用 実寸 2.5x(閾値 5.0x 未満)
linear_trans_color linear_trans_color 1.0e-07 / 1.0e-07 2048² x50 5.9 2.7 2.2x 不採用 実寸 2.2x(閾値 5.0x 未満)
lines_gauss lines_gauss — / — — — — — 不採用 出力が可変長の輪郭点列。別名の sk_frangi / sk_hessian / sk_meijering は scikit-image の包み
log_image log_image 9.3e-08 / 1.1e-07 2048² x50 2.3 0.914 2.5x 不採用 実寸 2.5x(閾値 5.0x 未満)
lut_trans f2_lut_trans 3.0e-08 / 3.0e-08 2048² x50 7.9 0.983 8.0x 採用 実寸 8.0x
max_image max_image 3.0e-08 / 3.0e-08 2048² x50 1.7 1.2 1.4x 不採用 実寸 1.4x(閾値 5.0x 未満)
median_rect median_rect 3.0e-08 / 3.0e-08 2048² x50 70.1 2.1 33.3x 採用 実寸 33.3x
min_image min_image 3.0e-08 / 3.0e-08 2048² x50 1.9 1.3 1.4x 不採用 実寸 1.4x(閾値 5.0x 未満)
mirror_image mirror_image 3.0e-08 / 3.0e-08 2048² x50 0.570 0.910 0.6x 不採用 実寸 0.6x(閾値 5.0x 未満)
mult_image mult_image 1.5e-07 / 1.5e-07 2048² x50 3.5 1.4 2.5x 不採用 実寸 2.5x(閾値 5.0x 未満)
polar_trans_image_ext polar_trans_image_ext — / — 2048² x50 2.1 — — 不採用 包み: 本体は cv2.warpPolar(polar_trans_image と同じ)
polar_trans_image_inv polar_trans_image_inv — / — 2048² x50 8.9 — — 不採用 包み: 本体は cv2.warpPolar + WARP_INVERSE_MAP
principal_comp principal_comp 9.9e-08 / 9.9e-08 2048² x50 21.5 3.1 6.9x 採用 実寸 6.9x
rgb1_to_gray rgb1_to_gray 5.4e-08 / 5.4e-08 2048² x50 5.5 1.7 3.2x 不採用 実寸 3.2x(閾値 5.0x 未満)
rgb3_to_gray rgb3_to_gray 5.4e-08 / 5.4e-08 2048² x50 5.3 1.7 3.2x 不採用 実寸 3.2x(閾値 5.0x 未満)
rotate_image rotate_image 3.7e-07 / 4.0e-07 2048² x50 14.4 1.1 13.6x 採用 実寸 13.6x
rotate_image rotate_img 3.7e-07 / 4.0e-07 2048² x50 14.4 0.992 14.5x 採用 実寸 14.5x
sin_image sin_image 2.1e-07 / 2.1e-07 2048² x50 3.8 0.911 4.2x 不採用 実寸 4.2x(閾値 5.0x 未満)
sqrt_image sqrt_image 5.0e-08 / 5.0e-08 2048² x50 1.6 0.985 1.6x 不採用 実寸 1.6x(閾値 5.0x 未満)
sub_image sub_image 1.4e-07 / 1.4e-07 2048² x50 3.1 1.4 2.1x 不採用 実寸 2.1x(閾値 5.0x 未満)
tan_image tan_image 4.1e-07 / 3.8e-07 2048² x50 5.4 1.0 5.1x 採用 実寸 5.1x
texture_laws texture_laws 1.8e-06 / 1.8e-06 2048² x50 11.4 1.1 10.2x 採用 実寸 10.2x
trans_from_rgb trans_from_rgb — / — 2048² x50 7.3 — — 不採用 包み: 本体は cv2.cvtColor(8 bit、Lab/XYZ は OpenCV の固定小数点表)
trans_to_rgb trans_to_rgb — / — 2048² x50 7.9 — — 不採用 包み: 本体は cv2.cvtColor(HSV2RGB、8 bit)
zoom_image_factor rescale_img 4.2e-07 / 3.7e-07 2048² x50 3.0 0.923 3.3x 不採用 実寸 3.3x(閾値 5.0x 未満)
zoom_image_factor zoom_image_factor 3.8e-07 / 3.9e-07 2048² x50 15.4 1.000 15.4x 採用 実寸 15.4x
zoom_image_size zoom_image_size 1.2e-07 / 1.2e-07 2048² x50 4.5 0.900 5.0x 不採用 実寸 5.0x(閾値 5.0x 未満)
convert_image_type it_convert_image_type 3.0e-08 / 7.4e-08 2048² x50 4.0 0.932 4.3x 不採用 実寸 4.3x(閾値 5.0x 未満)
crop_domain it_crop_domain 3.0e-08 / 3.0e-08 2048² x50 3.3 1.0 3.3x 不採用 実寸 3.3x(閾値 5.0x 未満)
crop_part it_crop_part 1.2e-06 / 1.2e-06 2048² x50 9.0 0.885 10.2x 採用 実寸 10.2x
crop_rectangle1 it_crop_rectangle1 5.9e-07 / 6.0e-07 2048² x50 7.9 0.898 8.8x 採用 実寸 8.8x
polar_trans_image polar_trans_image — / — 2048² x50 2.1 — — 不採用 包み: 本体は cv2.warpPolar(座標を 1/32 画素へ丸める固定小数点)
gray_closing_shape gray_closing_shape 3.0e-08 / 3.0e-08 2048² x50 3.8 0.929 4.1x 不採用 実寸 4.1x(閾値 5.0x 未満)
gray_dilation_shape gray_dilation_shape 3.0e-08 / 3.0e-08 2048² x50 1.9 0.899 2.2x 不採用 実寸 2.2x(閾値 5.0x 未満)
gray_erosion_shape gray_erosion_shape 3.0e-08 / 3.0e-08 2048² x50 2.2 0.949 2.3x 不採用 実寸 2.3x(閾値 5.0x 未満)
gray_opening_shape gray_opening_shape 3.0e-08 / 3.0e-08 2048² x50 3.5 0.907 3.9x 不採用 実寸 3.9x(閾値 5.0x 未満)

required 名簿(計測した 17 件)

op parity 差 CPU/GPU(相対) 入力 CPU s GPU s 倍率 採否 理由
radon_transform 1.4e-08 / 1.4e-08 1024² 180 views 69.6 0.232 299.3x 採用 実寸 299.3x
radon_volume 1.9e-08 / 1.9e-08 8 x 512² 180 views 168.0 0.471 356.4x 採用 実寸 356.4x
backproject_sinogram 1.8e-08 / 1.8e-08 1024² 180 views 9.6 0.037 259.1x 採用 実寸 259.1x
filtered_backprojection 2.6e-08 / 2.6e-08 1024² 180 views 9.5 0.039 244.2x 採用 実寸 244.2x
fbp_volume 2.6e-08 / 2.6e-08 8 x 512² 180 views 23.4 0.086 271.7x 採用 実寸 271.7x
sart_reconstruct 5.6e-08 / 5.6e-08 256² 180 views 3 sweeps 22.5 0.907 24.8x 採用 実寸 24.8x
piv_cross_correlate 5.5e-16 / 7.3e-16 2048² win32 ov0.5 1.8 0.024 74.3x 採用 実寸 74.3x
piv_multipass 8.2e-16 / 6.4e-16 2048² win64/32 2.8 0.048 57.9x 採用 実寸 57.9x
piv_ensemble_correlate 1.8e-15 / 2.0e-15 16 x 1024² win32 1.7 0.036 47.4x 採用 実寸 47.4x
plane_sweep_depth 1.1e-15 / 1.1e-15 1024² 64 depths win5 13.6 0.080 169.8x 採用 実寸 169.8x
joint_bilateral 1.1e-06 / 1.1e-06 2048² sigma 3 70.9 1.4 50.6x 採用 実寸 50.6x
temporal_bilateral 1.9e-07 / 1.9e-07 60 x 1024² window 5 14.4 0.512 28.1x 採用 実寸 28.1x
voxel_grid_downsample 0.0e+00 / 5.9e-16 1e7 points 30.9 0.081 379.3x 採用 実寸 379.3x
occupancy_grid 0.0e+00 / 0.0e+00 1e7 points 256³ 1.2 0.035 33.8x 採用 実寸 33.8x
photometric_stereo 1.5e-07 / 1.8e-07 12 x 2048² 0.530 0.159 3.3x 不採用 実寸 3.3x(閾値 5.0x 未満)
points_to_voxel 0.0e+00 / 0.0e+00 1e7 points 256³ 1.6 0.798 2.0x 不採用 実寸 2.0x(閾値 5.0x 未満)
scene_flow_lk 0.0e+00 / 2.1e-05 128³ 16.7 0.060 278.3x 採用 実寸 278.3x

required 名簿(計算核を書かなかった 31 件)

op 理由
render_optscene_gi 未着手: 入出力が table のシーン記述で、放射度の反復と可視判定が Python 分岐に絡む。parity の基準場面の設計から要る
render_transport 未着手: 投影パターン積は pointwise だが、入口が光輸送行列 table。実寸の行列の用意が要る
transport_matrix_radiosity 未着手: 密行列の解法(GPU 向き)だが実寸の場面定義が未定
render_optscene 未着手: 入力がシーン記述で、材質ごとの分岐が多い。基準場面の設計から要る
gs_render 未着手: gsplatnp は numpy の深度順合成で、torch 版 gsplat_torch は別 API・別入力。parity の対応づけが未確認
gs_render_fn 未着手: gs_render の閉包を返す op(gs_render と同時でないと意味がない)
gs_from_world 計算が小さい前処理(面にガウシアンを貼る)。GPU 必須の名簿に居る根拠が弱い。名簿の見直し候補
gs_update 計算が小さい更新式(einsum 1 回)。GPU 必須の名簿に居る根拠が弱い。名簿の見直し候補
tm_sart_reconstruct 包み: 本体は skimage.transform.iradon_sart
tm_fbp_reconstruct 包み: 本体は skimage.transform.iradon
tm_radon_forward 包み: 本体は skimage.transform.radon(in-house の radon_transform は別実装で値が違う)
photometric_stereo_robust 未着手: 3 灯部分集合ごとの逐次解 + 中央値/合意。バッチ解は書けるが便の範囲外
icp_point2point_3d 未着手: 再現性のため _oz.matmul_reproducible(和の順序固定)を使う。float 和の順序が違う GPU とは設計上ぶつかる
icp_point2plane 未着手: icp_point2point_3d と同じく再現性の固定和を使う
gicp 未着手: 同じ再現性の固定和 + KD 木の最近傍
register_fpfh 未着手: KD 木の特徴一致と RANSAC の組で、乱数列まで一致させる parity が要る
register_cpd_rigid 未着手: 全点対距離の EM は GPU 向きだが便の範囲外
fuse_to_voxel 未登録のまま: 中身は points_to_voxel(第 3 便で測定)を呼ぶ。入力は any で parity の定型入力を決めていない
physarum_transport_image 未着手: 格子グラフの疎行列解。torch に scipy の疎直接法と一致する解法が無い
graph_physarum_transport 未着手: 公開 op に device 引数が無い(_run 経由の密行列解)。parity 未確認
physarum_route 未着手: _run は device を受けるが密行列解で、実寸の格子は n^2 × n^2 の密行列が VRAM を超える
graph_physarum_path 未着手: 公開 op に device 引数が無い(_run 経由の密行列解)。parity 未確認
robust_gaussian_surface 未着手: IRLS の畳み込み反復は GPU 向きだが便の範囲外
robust_spline_profile 原理的に CPU 向き: 本体は帯行列の直接解(linalg.solve_banded)の反復
focus_sweep_surface_video 未着手: 高さ推定 + 描画の複合 op。部品ごとの計測が要る
solid_angle_sweep 計算が小さい走査(Python ループ + 数式)。GPU 必須の名簿に居る根拠が弱い。名簿の見直し候補
sk_nlm 包み: 本体は skimage.restoration.denoise_nl_means(計算量は大きいので次便の自前実装候補)
cv_nlmeans 包み: 本体は cv2.fastNlMeansDenoising(8 bit、整数距離表)
bilateral_filter 包み: 本体は cv2.bilateralFilter(実測の CPU 秒は下の補足表)
cv_bilateral 包み: 本体は cv2.bilateralFilter(実測の CPU 秒は下の補足表)
optical_flow_magnitude_stream 未着手: 本体は flow.optical_flow_lk のピラミッド LK。stateful な stream の分解が要る

補足: cv2 の bilateral

op 2048² x50 CPU s
bilateral_filter 1.3
cv_bilateral 1.3

転送床(下記)の 5 倍を CPU が下回るので、仮に核を書いても 5.0x に届かない(a=0.5 の窓幅で測定)。

notes placeholder