在本徵,與徵:與smalll整數指數係數明智戰俘慢
ArrayXXf a;
a = ArrayXXf::Random(1000, 10000);
做
a = a.pow(4);
大約需要在我的電腦500毫秒,而做
a = a.square().square();
需要只有約5ms。我正在編譯最近發佈的GCC。
這是預期的行爲還是我做錯了什麼?我認爲,至少對於小整數來說(例如,如果不使用成本函數,則爲< 20),那麼應該存在可以捕獲這種情況的重載。
在本徵,與徵:與smalll整數指數係數明智戰俘慢
ArrayXXf a;
a = ArrayXXf::Random(1000, 10000);
做
a = a.pow(4);
大約需要在我的電腦500毫秒,而做
a = a.square().square();
需要只有約5ms。我正在編譯最近發佈的GCC。
這是預期的行爲還是我做錯了什麼?我認爲,至少對於小整數來說(例如,如果不使用成本函數,則爲< 20),那麼應該存在可以捕獲這種情況的重載。
你可以建立一個自定義的二進制函數,它調用'__builtin_powi'(在gcc/clang) – chtz
@chtz,而第一眼看起來不錯,就像你說的不可移植。特別是如果你想使用英特爾編譯器。 – yar