2017-03-22 11 views
0

私はハロゲン化物が.htmlのファイルにコンパイルする方法を出力するcamera_pipe_generator.cppの一番下に次の行を追加しようとしましたが、私は私が間違ってやっているかわからないんだけど:視覚化する方法カメラパイプラインをハライドする/ハライドのコンパイル方法のHTML出力を生成する方法はありますか?

processed.compile_to_lowered_stmt("camera_pipe_debugging_trial.html", {}, HTML); 

私は私の第二のだと思います議論は間違っていますが、私はここで何を渡すべきですか?

スケジュールを視覚化する方法がありますか? This postは、ハライドが存在するための視覚化装置を示唆しているようです。それを使用する上で利用可能なリソースはありますか?

ありがとうございました!

編集:私は、次のようなエラーが生じたこと、

../../tools/gengen.sh -c c++ -lcurses -l ../../lib/libHalide.a -o tmp/ -e html -s camera_pipe_generator.cpp target=host 

しかし、コマンドを実行しているしようとしました:私はマックOSX 10.12.3上で実行に関連するかもしれないと思う

Undefined symbols for architecture x86_64: 
    "_del_curterm", referenced from: 
     llvm::sys::Process::FileDescriptorHasColors(int) in libHalide.a(llvm_460_Process.cpp.o) 
    "_set_curterm", referenced from: 
     llvm::sys::Process::FileDescriptorHasColors(int) in libHalide.a(llvm_460_Process.cpp.o) 
    "_setupterm", referenced from: 
     llvm::sys::Process::FileDescriptorHasColors(int) in libHalide.a(llvm_460_Process.cpp.o) 
    "_tigetnum", referenced from: 
     llvm::sys::Process::FileDescriptorHasColors(int) in libHalide.a(llvm_460_Process.cpp.o) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

最終編集:オプション '-lcurses'をgengen.shファイルに追加しました。

+0

ハロゲン化物を可視化に関するご質問については、所定の位置にあるメカニズムは、チュートリアルのサイトに表示されたスケジューリング動画のように、メモリにアクセスする方法のMPEGムービーを作成します。あなたが上に投稿したリンクで指摘されているように、ビジュアライザーの仕組みはあまり使い慣れていませんが、うまく機能しています。そのビジュアライザーがどのように動作するか、HTML出力がうまくいくか見てみたいですか? – AhiyaHiya

+0

ありがとう、私はビジュアライザーがどのように動作するか見ることに興味があります!私の目的は、私はスケジュールの選択肢を作ることができる方法への洞察を得るためにしようとしていたので、私はビジュアライザが動作する方法を学ぶことは本当に便利だと思います。 – user3554661

答えて

4

、MPEGファイルに以下をごハロゲンコードを視覚化するためには必要とされています:

  1. ハロゲンフィルタHalideTracを構築し、実行するAOTバイナリ
  2. Bashシェルスクリプトを行使する
  3. ソースコードをバイナリAOTコンパイルしますeViz
  4. ポイント4に関しては、同じフォルダ

における上記の資産のすべて、私はこれが変更された可能性が確信しているが、私が持っていた臨床試験のために、これは私が働いて物事を得ることができた唯一の方法でした;その最後の点で彼らの意見を共有できる人は、そうすることを歓迎します。

1:

http://halide-lang.org/tutorials/tutorial_lesson_10_aot_compilation_generate.html 

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

namespace 
{ 
auto input = Halide::ImageParam(Halide::type_of<uint8_t>(), 2, std::string{"input_image"}); 
auto offset = Halide::Param<uint8_t>{"offset"}; 
} // anonymous namespace 

auto create_filter() -> Halide::Func 
{ 
    auto x = Halide::Var{"x"}; 
    auto y = Halide::Var{"y"}; 

    auto brighten = Halide::Func{"filter_output"}; 
    brighten(x, y) = input(x, y) + offset; 

    return brighten; 
} 

auto schedule_filter(Halide::Func filter_ref) { filter_ref.vectorize(x, 16).parallel(y); } 

auto create_aot_binary() 
{ 
    auto args = std::vector<Halide::Argument>{input, offset}; 
    brighten.compile_to_file("brighten", args); 
} 

int main(int argc, const char* argv[]) 
{ 
    printf("brighten filter AOT binary generator\n"); 

    auto brighten = create_filter(); 
    schedule_filter(brighten); 
    create_aot_binary(); 

    return 0; 
} 

2:私は下記のフィルタを作成して使用可能なバイナリにコンパイルしhalide-lang.org tutorial siteに記載されている明るくフィルタを使用

バイナリAOTにコンパイルハロゲンフィルタAOTバイナリを実行するソースコード

#include "brighten.h" // header file created by aot generator in step 1 
#include <cassert> 
#include <vector> 

namespace 
{ 
constexpr auto width = 16 * 4; 
constexpr auto height = 16 * 4; 
} // anonymous namespace 

auto create_input_image() -> std::vector<uint8_t> 
{ 
    auto image = std::vector<uint8_t>(width * height, 0); 

    for (auto y = 0; y < width; y++) 
    { 
     for (auto x = 0; x < height; x++) 
     { 
      const auto val = x^(y + 1); 
      const auto index = y * height + x; 
      image[index]  = val; 
     } 
    } 

    return image; 
} 

auto create_buffer_t_with_data(const std::vector<uint8_t>& image) -> buffer_t 
{ 
    auto buff = buffer_t{0}; 
    buff.host = image.data(); 

    buff.stride[0] = 1; 
    buff.stride[1] = width; 

    buff.extent[0] = width; 
    buff.extent[1] = height; 

    buff.elem_size = 1; 
} 

int main(int argc, const char* argv[]) 
{ 
    printf("brighten filter exercise\n"); 

    auto input_image = create_input_image(); 
    assert(input_image.size() != 0); 
    auto input_buf = create_buffer_t_with_data(input_image); 

    auto output_image = std::vector<uint8_t>(width * height, 0); 
    assert(output_image.size() != 0); 
    auto output_buf = create_buffer_t_with_data(output_image); 

    const auto offset = 1; 
    auto error = brighten(&input_buf, offset, &output_buf); 
    (void)error; 

    return 0; 
} 
  1. HalideTraceVizの構築:3. Bashシェルスクリプトを構築し、今

    HalideTraceVizを実行するために、ここで私はbashシェル・スクリプトは、あります。cppのコード

  2. 1つのディレクトリ
  3. へのバイナリがHalideTraceVizアプリ
#!/bin/bash 

set -e 
set -u 

function build_binaries() 
{ 
    printf "${FUNCNAME[0]}\n" 

    printf "Building HalideTraceViz\n" 
    xcodebuild -project visualize_brighten.xcodeproj -scheme HalideTraceViz CONFIGURATION_BUILD_DIR=build/Debug -configuration "Debug" clean build 

    printf "Building generate_brighten_aot\n" 
    xcodebuild -project visualize_brighten.xcodeproj -scheme generate_brighten_aot CONFIGURATION_BUILD_DIR=build/Debug -configuration "Debug" clean build 

    printf "Generating AOT in order to build exercise app\n" 
    cd build/Debug 
    HL_TRACE=3 ./generate_brighten_aot 
    cd $CURRENT_PATH 

    printf "Building app to exercise brighten filter\n" 
    xcodebuild -project visualize_brighten.xcodeproj -scheme exercise_brighten_aot CONFIGURATION_BUILD_DIR=build/Debug -configuration "Debug" clean build 

    cd $CURRENT_PATH 
} 

function copy_binaries() 
{ 
    printf "${FUNCNAME[0]}\n" 

    if [[ -d $CURRENT_PATH/halide_visualizer ]]; then 
     rm -Rv $CURRENT_PATH/halide_visualizer 
    fi 
    mkdir $CURRENT_PATH/halide_visualizer 

    cp -Rv $CURRENT_PATH/build/Debug $CURRENT_PATH/halide_visualizer/Debug 
} 

function visualize_function() 
{ 
    printf "${FUNCNAME[0]}\n" 

    local BLANK=0 
    local DIMENSIONS=1 
    local ZOOM=8 
    local COST=4 

    local STRIDE0="1 0" 
    local STRIDE1="0 1" 

    local FFMPEG_BIN_PATH="YOU_HAVE_TO_DOWNLOAD_THIS_BIN_AND_SET_THE_PATH_HERE" 
    cd $CURRENT_PATH/halide_visualizer/Debug 

    echo "About to start visualizing brighten filter" 
    HL_TRACE=3 ./generate_brighten_aot && \ 
    HL_TRACE_FILE=/dev/stdout ./exercise_brighten_aot | \ 
    $CURRENT_PATH/build/Debug/HalideTraceViz -s 1024 516 -t 1 -d 100 \ 
    -f brighten:input_image 0 255 $BLANK $ZOOM $COST 0 0 $STRIDE0 $STRIDE1 |\ 
    $FFMPEG_BIN_PATH/ffmpeg -r 30 -f rawvideo -pix_fmt bgra -s 1024X516 -i - -y -pix_fmt yuv420p $CURRENT_PATH/movies/brighten_schedule.mp4 

    cd $CURRENT_PATH 
} 

main() 
{ 
    printf "${FUNCNAME[0]}\n" 
    CURRENT_PATH=$PWD 

    build_binaries 
    copy_binaries 
    visualize_function 

    printf "All done\n" 
} 

printf "Starting ${0##*/}\n" 
main 

にデータを渡すために使用されている特殊なパラメータを持つアプリケーションを呼び出してコピー

  • AOT発生器とフィルタエクササイザアプリを構築注意すべきことのカップル:

    1. 私はプロジェクトをコンパイルするためにXcodeを使用しましたが、明らかに任意のt 001あなたはHalideTraceVizは「ハライド//UTIL」にそれ自身のcmakeのファイルが付属しています
    2. に慣れています。そのフォルダはHalide git repoの一部です
    3. bashシェルスクリプトコードでは、開発環境で動作するようにフォルダパスを調整する必要があります
    4. 上記のコードはすべて今作成されたばかりです私はそれがそのまま動作することを保証することはできません:)

    これはうまくいけば、これを開始するのに役立ちます。ご不明な点がございましたら、お知らせください。

  • 2

    桐蔭アプリケーション/ camera_pipeディレクトリ、次のコマンドラインを/tmp/camera_pipe.htmlにHTML stmtはファイルを生成します。

    ../../tools/gengen.sh -c c++ -l ../../lib/libHalide.a -o /tmp/ -e html -s camera_pipe_generator.cpp target=host 
    
    +0

    ありがとう!上記の編集を参照してください)、私はそれを修正する方法を知っていますか?私は-lcursesを追加しましたが、それは問題を解決しませんでした。 – user3554661

    関連する問題