MEP 12: デバッグ出力
- Created: 2023-01-18 11:42:43
やはりデバッグ出力は欲しい。 だがGPUでの動作なので限定的にするしか無いので、それが自然と強制できるシンタックスが望ましい。
文字列リテラルは今の所入出力のラベルでしか登場しなくてIRElem(およびType)としては存在しないので、フォーマットとかは指定出来ないようにしたい。 exprを単に出力するだけで良いか。
トップレベルスコープでだけ許可されるattributeとして実行するのがいいんじゃないか。
@debug_print(thetaImg(x, y))
これだとattributeのパースにparseExprが出てきてしまう。まぁその位いいけれど、どうやってホスト側に持っていくかを考えるのはちょっと面倒だよな。 @bounds と同様に内部変数的なのに吐く必要がある。
グローバル変数を出力するだけ、と限定してしまえば、自動で退避されるので実装は簡単。 例えば以下。
let tmp_val = thetaImg(x, y)
@debug_print(var_name="tmp_val")
ださいシンタックスだが、実装は簡単で必要なケースは全部満たせている気もする。
変数のconflict防止の所で考慮する事にすれば、グローバル変数を生成してしまえばいいか。 そう考えればexpr一般を引数に取る、でいい気がしてきたな。
パース結果はTopLevelBlockがリクエストのvectorを保持する感じにしてあれば良い気がする。
名前はどうすべきか
- Halideはprint
- JSなどはconsole.log
- CocoaはNSLog
- AndroidなどはLog.d
logが多いか。debugというのは入れない方がいいかもなぁ。 一方で文字列リテラルが使えないというのを分かるようにしておきたい気もする。
@log_expr(thetaImg(x, y))
なんか対数っぽいな。printだとどうだろう?
@print_expr(thetaImg(x, y))
これがいいかもしれん。将来expr以外に対応する時には面倒も出てくるが。出てくるまではまずはこれでいくか。