2015-06-18 31 views
1

正如你可以知道你是否試過鹵化物選擇(x,y,z);類似於C++上的三元運算符,其中x是條件y,如果爲真,z爲假。想象一下,y只是返回0,z是一個非常昂貴的函數,它可能有意義跳過評估z其中x是假的,不幸Halide評估這兩個術語,即使我設置了select(x,很可能(y), Z);或者至少它發生如果我使用compile_to_file(.h + .lib)鹵化物'選擇'而不評估兩個參數

任何想法呢?

謝謝!

回答

0

likely固有的影響僅限於環剝,而不適用於任何可能使用select的地方。也就是說,如果條件與出現的函數定義的座標緊密相關(如在圖像的邊界條件中,其中select在函數的x和y座標上被預測) 。它確實不是將任意select表達式轉換爲完全分支if/else語句。

您可以在the tests for the intrinsic中看到一些示例。

如果您分享實際運行的代碼,將更容易討論爲什麼循環剝離和likely內在因素在您的特定情況下適用或不適用。