簡體   English   中英

在滿足某些條件之前,如何繼續將 Halide 管道的輸出傳遞回管道?

[英]How do I keep passing the output of a Halide pipeline back into the pipeline until some condition is met?

我有一個 Halide 管道,它接收圖像,並對其應用一些過濾器。 它適用於單次傳遞。 我傳入一個圖像,然后將處理后的圖像作為輸出。 我想要做的是實現多次傳遞,即,我想繼續將輸出圖像傳遞回管道中的多個步驟,直到滿足圖像上的某些條件。 我怎么做這個鹵化物? 我能想到的唯一另一種方法是擁有一個可以在循環中調用管道的外部 C++ 方法。 我希望這是否可以在 Halide 本地實現。

代碼看起來像這樣。 我想在循環中使用輸出作為輸入,直到滿足某些條件。

int main(int argc, char **argv) {
  Buffer<uint8_t> input = Tools::load_and_convert_image("img.png");
  int W = input.width();
  int H = input.height();
  Buffer<uint8_t> output(W, H);
  // after some Funcs. res is last Func of the pipeline
  res.realize(output);
  Tools::convert_and_save_image(output, "out.png");
  return 0;
}

您可以通過將管道展開到更大的管道中來運行管道靜態次數。 如果您正在計算的內容可以表示為單個階段,您可以通過使用RDom迭代連續應用程序來動態但無條件地運行它。 但是,您不能用動態終止條件(您可能認為是while循環)來表達任何循環。 您必須在調用 C++ 代碼中執行此操作。

你提出了一個很有見地的問題。 這是語言的一個有意識的約束:它是循環邊界可判定圖靈完備之間的區別。 該語言的未來版本可能會以有針對性的方式擴展這一點,但目前它是編譯器如何推斷程序中所有邊界的基礎。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM