Halide как автонастроить расписание

Я пробовал писать код в Halide уже некоторое время и всегда сам составлял расписания. Затем я прочитал эту статью: http://graphics.cs.cmu.edu/projects/halidesched/mullapudi16_halidesched.pdf. Итак, как я понимаю, есть способ составить лучший график. Как я могу это сделать?

Спасибо за ответы!

Редактировать:

Привет. Я попытался вытащить ветку и построить ее с помощью CMAKE. Но у меня проблемы с компиляцией Halide:

это ошибка в VS 2015:

4>  D:/halideAutoScheduler2/Halide.build/Release\initmod.aarch64_cpu_features_32.ll -> D:/halideAutoScheduler2/Halide.build/Release\initmod.aarch64_cpu_features_32.bc
4>  C:\Program Files (x86)\LLVM\bin\llvm-as.exe: D:/halideAutoScheduler2/Halide.build/Release\initmod.aarch64_cpu_features_32.ll:23:6: error: expected type
4>  !0 = !{!"clang version 3.6.0 (tags/RELEASE_360/final)"}
4>       ^
4>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(171,5): error MSB6006: "cmd.exe" exited with code 1.

Какие-нибудь советы?


person Marcin Kołodziejski    schedule 17.10.2016    source источник


Ответы (1)


Очень краткий ответ...

Потяните эту ветку: https://github.com/halide/Halide/tree/auto_scheduler

Возьмите кусок кода Halide и удалите все ранее существовавшее планирование. (Я обычно делаю это, используя #if 0 в настоящее время, но будет лучший способ выбора между явным планированием и автоматическим планированием при использовании генераторов. Использование операторов if с параметром в коде C++ также является хорошим способом.)

Возьмите все выходные данные Funcs и вызовите метод Func::estimate, чтобы получить приблизительные оценки для этих выходных данных. (Однако автоматический планировщик может использовать оценку как минимум, поэтому ограничения могут быть введены посредством векторизации.)

Затем убедитесь, что у вас есть Pipeline, а не Func, и вызовите метод auto_schedule. (Pipeline может быть создан из Func.) Затем Pipeline можно запустить через realize или скомпилировать через compile_to_file или подобное.

Некоторое планирование может быть смешано с автоматическим планировщиком, например, утверждение шагов и экстентов. Но если уже применено какое-либо сложное планирование, автоматический планировщик, скорее всего, подтвердит.

person Zalman Stern    schedule 17.10.2016