MLIRコンパイラインフラストラクチャにおけるONNXモデルの表現とリファレンスローワー
GitHubでプロジェクトを表示する onnx/onnx-mlir
このプロジェクトはonnxによってメンテナンスされています
GitHub Pagesでホストされています。テーマはorderedlistによるものです
2種類のエラーが考えられます。ユーザー入力からのエラーとコンパイラエラーです。ユーザー入力エラーには有意義なユーザーフィードバックを提供し、emitError
関数を使用する必要があります。コンパイラエラーはasserts
またはllvm_unreachable
コールを使用して報告する必要があります。実際、エラーをチェックする関数があり、「失敗」を返すことができる場合、優先される方法はemitError
を使用して失敗を返すことです。一方、その関数が失敗を返すことができない場合は、assertまたはunreachableコールを使用する必要があります。エラーを返すことは、例えばONNXモデルの取り込み中など、ユーザー入力をチェックするパスにとって重要です。
MLIRは、重大度に応じて3つの異なるコールを提供します。 emitError
、emitWarning
、および「emitRemark」。通常、エラーは適切な処理のために呼び出し関数に報告する必要があります。典型的な使用法は以下に示されています。
return op->emitError("message");
return op->emitError() << "message";
上記のコールには、演算の位置が含まれます。LogicalResult
を返します。これは、以下のように設定/テストできます。emitError
コールはfailure()
値を返すことに注意してください。
LogicalResult isEven(int i) { return (i%2 == 0) success() : failure(); }
if (succeeded(isEven(0)) && failed(isEven(1))) printf("It is all good.\n");
エラーは、演算のコンテキストの外でも報告できます。この場合、場所を指定する必要があります。警告またはリマークを報告するには、上記の例で「エラー」の代わりに「警告」または「リマーク」を置き換えるだけです。
ONNXグラフが検証されると、その後のすべての誤った状況は、適切に処理する必要があるコンパイラエラーなので、コンパイルを停止するためのアサートで報告する必要があります。使用できるコールは2つあります。
assert(condition-that-should-hold-true && "error message");
llvm_unreachable("error message");
到達不能なコールは、そのパスにダミー値の戻りステートメントがない場合、コンパイラは警告を出さないので、値を返す必要がある関数で役立ちます。それ以外の場合は、void
関数では、assertを使用しても問題ありません。
追加の関連情報は、以下に示すLLVMおよびMLIRのドキュメントにあります。