知識マップ: 画像処理の境界外アクセスをSPARKで証明する ── 2値化・平滑化・ラベリングとCとの速度比較
記事「画像処理の境界外アクセスをSPARKで証明する ── 2値化・平滑化・ラベリングとCとの速度比較」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
画像処理のコードが画像の外を読み書きしないことを、SPARKのGNATproveで証明する。2値化は画像の型と、入力と出力の範囲が等しいという事前条件で、3×3の平滑化はそれに加えて画像が空でないという事前条件で、実行時エラーがないこと(Silver)を証明できる。2値化の事後条件にはループ不変条件が要る。連結成分のラベリングは、対応表の添字と要素を同じ型にすると実行時エラーがないことを証明できるが、結果の正しさはテストで確かめた。証明できたユニットだけpragma Suppress(-gnatp)で検査を外すと、-O2ではCとほぼ同じ速さになった。-O3ではGCCの自動ベクトル化が働き、2値化と平滑化は検査を残してもCと同じ速さになった。
flowchart LR
accTitle: 画像処理の境界外アクセスをSPARKで証明する記事の知識マップ
accDescr: SPARKのSilver(実行時エラーがないこと)をGNATproveで証明するとバッファオーバーランと整数オーバーフローを防げること、その証明には事前条件が要り、事後条件にはループ不変条件が要ること、連結成分のラベリングの実行時エラーがないこともGNATproveで確かめられること、証明をpragma Suppressで検査を外すより先に行うこと、Adaの添字の検査と自動ベクトル化との関係を示す図。
spark_silver_level["Silverレベル(AoRTE)"]
spark["SPARK"]
gnatprove["GNATprove"]
buffer_overrun["バッファオーバーラン"]
integer_overflow["整数オーバーフロー"]
design_by_contract["契約による設計(Pre/Post)"]
loop_invariant["ループ不変条件(Loop Invariant)"]
connected_component_labeling["連結成分のラベリング"]
ada_range_constraint["範囲制約(range constraint)"]
ada_pragma_suppress["pragma Suppress"]
gnat["GNAT"]
auto_vectorization["自動ベクトル化"]
spark -->|"利用する"| gnatprove
spark_silver_level -->|"で確認できる"| gnatprove
spark_silver_level -->|"防止する"| buffer_overrun
spark_silver_level -->|"防止する"| integer_overflow
spark_silver_level -.->|"前提とする"| design_by_contract
design_by_contract -.->|"前提とする"| loop_invariant
connected_component_labeling -.->|"で確認できる"| gnatprove
ada_range_constraint -->|"軽減する"| buffer_overrun
ada_pragma_suppress -.->|"原因になり得る"| buffer_overrun
spark_silver_level -->|"より先に行うべき"| ada_pragma_suppress
gnat -.->|"利用する"| auto_vectorization
概念間の関係(全11件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- SPARKはGNATproveを利用します。
- Silverレベル(AoRTE)はGNATproveで確認できます。
- Silverレベル(AoRTE)はバッファオーバーランを防ぎます。
- Silverレベル(AoRTE)は整数オーバーフローを防ぎます。
- Silverレベル(AoRTE)は契約による設計(Pre/Post)を前提とします。
- 契約による設計(Pre/Post)はループ不変条件(Loop Invariant)を前提とします。
- 連結成分のラベリングはGNATproveで確認できます。
- 範囲制約(range constraint)はバッファオーバーランを軽減します。
- pragma Suppressはバッファオーバーランの原因になることがあります。
- Silverレベル(AoRTE)はpragma Suppressより先に行うべきです。
- GNATは自動ベクトル化を利用します。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。