KirIn 落書き帳

素人がプログラミング, FPGA, LSIをお勉強しているメモ書きです。間違いがあればご指導していただけたら幸いです。

Halide Tutorial 01

x+yの加算関数と、画像のx座標とy座標のindexを加算するテストを作成するチュートリアルリポジトリの中のtutorialのコードにはわかりやすいコメントがいっぱい乗っているが、見返しやすいように最低限動く部分を抜き出してみた。 演算を定義してFuncに登録して解像度を指定する。 Hardware依存の部分の記述は今後のチュートリアルかな?

#include "Halide.h"
#include <stdio.h>

int main(int argc, char **argv) {

    Halide::Func gradient;

    Halide::Var x, y;

    Halide::Expr e = x + y;
    gradient(x, y) = e;

    Halide::Buffer<int32_t> output = gradient.realize(800, 600);

    // Let's check everything worked, and we got the output we were
    // expecting:
    for (int j = 0; j < output.height(); j++) {
        for (int i = 0; i < output.width(); i++) {
            // We can access a pixel of an Buffer object using similar
            // syntax to defining and using functions.
            if (output(i, j) != i + j) {
                printf("Something went wrong!\n"
                       "Pixel %d, %d was supposed to be %d, but instead it's %d\n",
                       i, j, i+j, output(i, j));
                return -1;
            }
        }
    }

    printf("Success!\n");

    return 0;
}
g++ lesson_01*.cpp -g -I ../include -L ../bin -lHalide -lpthread -ldl -o lesson_01 -std=c++11
LD_LIBRARY_PATH=../bin ./lesson_01