我開始使用Halide,雖然我已經掌握了其設計的基本原理,但我正在努力處理需要高效的(讀取:魔術)時間表計算。C++數組到Halide圖像(和後面)
我已經發布了使用Halide將數組從一個位置複製到另一個位置的MWE。我曾認爲這可以編譯成只有少數指令,並且運行時間不到一微秒。相反,它會產生4000行裝配,需要40ms運行!因此,顯然,我的理解存在一個重大漏洞。
- 什麼是在
Halide::Image
包裝現有數組的規範方式? - 函數
copy
應如何計劃有效地執行復制?
最小工作示例
#include <Halide.h>
using namespace Halide;
void _copy(uint8_t* in_ptr, uint8_t* out_ptr, const int M, const int N) {
Image<uint8_t> in(Buffer(UInt(8), N, M, 0, 0, in_ptr));
Image<uint8_t> out(Buffer(UInt(8), N, M, 0, 0, out_ptr));
Var x,y;
Func copy;
copy(x,y) = in(x,y);
copy.realize(out);
}
int main(void) {
uint8_t in[10000], out[10000];
_copy(in, out, 100, 100);
}
編譯標誌
clang++ -O3 -march=native -std=c++11 -Iinclude -Lbin -lHalide copy.cpp