Simple Science

最先端の科学をわかりやすく解説

# コンピューターサイエンス# ソフトウェア工学

進化するコンパイラ方言のためのテスト自動化

新しい方法は、変化するコンパイラ環境でのテストを自動化することを目指してる。

― 1 分で読む


コンパイラのテストが簡単にコンパイラのテストが簡単にスが効率化される。新しい方法でコンパイラのテスト生成プロセ
目次

最近、コンパイラのデザインに大きな変化があって、コードの表現と処理の方法をもっと柔軟でモジュール化できるように重点が置かれてるんだ。この変化は、マルチレベル中間表現(MLIR)というツールの開発で特に目立つよ。従来のコンパイラはコードを一つの方法で表現するけど、MLIRは開発者が特定のニーズに合わせた新しい表現を作れるようにしているんだ。

コンパイラデザインにおけるテストの課題

コンパイラが進化するにつれて、新しい機能や表現、いわゆるダイレクトが組み込まれてくるんだ。これらのダイレクトは、正しいコード実行にとって重要な独自のルールや要件を持ってる。でも、これらの新しいダイレクトのテストを作るのは超時間がかかって複雑なんだ。一般的に、ダイレクトが変更されたり新しいのが追加されたりすると、開発者は手動で新しいテストを書かなきゃいけないから、急速に変わるダイレクトに追いつくのは大変だよ。

コンパイラコードのテストへの新しいアプローチ

この問題に対処するために、新しい方法が提案されていて、進化するダイレクトのためのテストを自動的に作ることを目指しているんだ。アイデアはシンプルで、ダイレクトが変わるたびに開発者が新しいテストを書く必要がなくて、既存のテストケースから学び、それを新しいコンテキストに適応させるんだ。つまり、ゼロから始めるんじゃなくて、すでに知ってることを使って新しい状況に適用するってわけ。

この方法の仕組み

この方法は、既存のテストケースを分析してパターンを抽出することで機能するんだ。これらのパターンは、異なるダイレクトのルールや制約を尊重した新しいテストを作るための青写真を提供するんだ。既存のテストからコンテキストを使って、正しさを保つためにどこに更新や変更が必要かを特定する。それによって、新しいダイレクトのテストをする際に、開発者は時間と労力を節約できるんだ。

コンテキスト感知の変異

この新しいアプローチのハイライトの一つは、コンテキスト感知の変異を作れることなんだ。コンテキスト感知っていうのは、プログラムが変更を加えるときに周りのコードを考慮するってこと。例えば、関数が二つの引数を必要とする場合、プログラムはその引数が周りのコンテキストに実際に存在するかをチェックしてから変更を適用するんだ。これによって、エラーを引き起こす可能性のある無効なテストを作るリスクが減るんだ。

変更のパラメータ化

もう一つの重要な機能はパラメータ化で、これによってプログラムは柔軟に変更を加えられるようになるんだ。テストに特定の値をハードコーディングする代わりに、プログラムはプレースホルダーを使うことができる。変異を適用する際に、これらのプレースホルダーを周りのコンテキストからの実際の値に置き換えるんだ。このコンテキストに基づいて値を適応させる能力が、より有効なテストケースを作るのに貢献するんだ。

他の技術との比較

この新しい方法のパフォーマンスを理解するために、他の既存の技術と比較されてるよ。従来の文法ベースのファザーは、固定されたルールに頼ってテストを作る例があるけど、特定のダイレクトの要求を尊重するのが難しい場合が多いんだ。これによって多くの無効なテストケースが生まれて、コンパイラの欠陥を見つけるのには役立たないんだ。

一方で、この新しいアプローチは有効なテストケースを生成するチャンスを大幅に増やすことが示されているんだ。既存の例を活用して現在のコンテキストに適応させることによって、正確さが向上する。多くのテストにおいて、ブランチカバレッジやダイレクトカバレッジの点で他の方法を上回っていて、基盤となる構造をより良く理解して活用していることを示してる。

実証評価

この方法の効果は、各プロジェクトが独自のダイレクトを持つMLIRベースのプロジェクトを使って評価されたんだ。その結果、新しい方法は多様なテストケースを生成するだけでなく、全体的なブランチカバレッジも大幅に改善したってことが分かったよ。つまり、コードのさまざまな部分をよく探ることができて、潜在的なバグを見つけるのに役立ったんだ。

実験からの洞察

結果は期待できるけど、実験ではいくつかの制限も明らかになったんだ。例えば、コンテキストが厳しすぎると、有効なテストケースの生成が制限されてしまうことがある。正しさを確保するために十分なコンテキストを使用しつつ、テスト生成の多様性を許可するバランスを見つけることが重要なんだ。

結論

まとめると、複数のダイレクトが導入されることでコンパイラが複雑になるにつれて、これらのシステムをテストする効果的な方法を見つけることが必須になってきてる。既存のケースからテストを合成する提案された方法は、有望な解決策を提供している。コンテキストと柔軟性に重点を置いてるこのアプローチは、コンパイラデザインの分野でのテストの進め方を革命的に変える可能性があるんだ。この方法は開発者の時間を節約するだけじゃなくて、テストプロセスの信頼性を高め、最終的により良いパフォーマンスのコンパイラにつながるんだ。

コンパイラが進化し続ける中で、これらの変化に対応するテスト戦略を適応させることが重要になるだろう。この方法は、その方向への重要なステップを示していて、知能的な適応がコンパイラ開発の混沌とした世界でより良い結果を生むことができることを示しているんだ。

オリジナルソース

タイトル: Fuzzing MLIR Compilers with Custom Mutation Synthesis

概要: Compiler technologies in deep learning and domain-specific hardware acceleration are increasingly adopting extensible compiler frameworks such as Multi-Level Intermediate Representation (MLIR) to facilitate more efficient development. With MLIR, compiler developers can easily define their own custom IRs in the form of MLIR dialects. However, the diversity and rapid evolution of such custom IRs make it impractical to manually write a custom test generator for each dialect. To address this problem, we design a new test generator called SYNTHFUZZ that combines grammar-based fuzzing with custom mutation synthesis. The key essence of SYNTHFUZZ is two fold: (1) It automatically infers parameterized context-dependent custom mutations from existing test cases. (2) It then concretizes the mutation's content depending on the target context and reduces the chance of inserting invalid edits by performing k-ancestor and pre(post)fix matching. SYNTHFUZZ obviates the need to manually define custom mutation operators for each dialect. We compare SYNTHFUZZ to three baselines: Grammarinator, MLIRSmith, and NeuRI. We conduct this comprehensive comparison on four different MLIR projects. Each project defines a new set of MLIR dialects where manually writing a custom test generator would take weeks of effort. Our evaluation shows that SYNTHFUZZ on average improves MLIR dialect pair coverage by 1.75 times, which increases branch coverage by 1.22 times. Further, we show that our context dependent custom mutation increases the proportion of valid tests by up to 1.11 times, indicating that SYNTHFUZZ correctly concretizes its parameterized mutations with respect to the target context. Parameterization of the mutations reduces the fraction of tests violating the base MLIR constraints by 0.57 times, increasing the time spent fuzzing dialect-specific code.

著者: Ben Limpanukorn, Jiyuan Wang, Hong Jin Kang, Eric Zitong Zhou, Miryung Kim

最終更新: 2024-08-27 00:00:00

言語: English

ソースURL: https://arxiv.org/abs/2404.16947

ソースPDF: https://arxiv.org/pdf/2404.16947

ライセンス: https://creativecommons.org/licenses/by/4.0/

変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。

オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。

著者たちからもっと読む

類似の記事