Компиляция Halide AOT

#arguments #timing #halide

#аргументы #время #halide

Вопрос:

Я пытаюсь использовать Halide для вычисления трафарета, который является частью кода C . Я использую буферы, которые указывают на мои структуры данных, определенные в C . Я хочу засечь время выполнения моего кода, поэтому я пытаюсь использовать компиляцию AOT, чтобы я мог засечь время только выполнения, а не время компиляции. Итак, есть ли какой-либо способ использовать буферы при объявлении вектора аргумента типа для входных данных при использовании компиляции AOT? Если нет, есть ли какой-либо другой способ просто определить время выполнения при использовании Halide?

Ответ №1:

Вы можете использовать буферы в AOT-скомпилированном коде. Если вы поместите их в вектор аргументов, они станут аргументами сгенерированной функции. Если вы их не учитываете, они внедряются в сгенерированный объектный файл в виде постоянных массивов. Вот руководство по компиляции AOT:

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

Комментарии:

1. Я следую этому руководству. Мне интересно, если я использую буферы в качестве аргументов для компиляции AOT, как мне указать размер? Когда я использую realize, я передаю размер, над которым буду работать, и когда используются входные буферы (как в руководстве), вы устанавливаете экстент. Как это работает с буферами для кода AOT? Спасибо, Эндрю

Ответ №2:

Метод «compile_jit» может быть вызван в конвейере, чтобы вызвать компиляцию. Затем ту же функцию можно вызвать с помощью методов «реализовать» или «оценить» и синхронизировать. Это отделяет время выполнения от времени компиляции при использовании JIT. AOT, вероятно, предпочтительнее, если вы все равно собираетесь использовать его в своем приложении, но метод compile_jit полезен при работе с JIT для тестов или простых тестов.

(Есть несколько других проблем, связанных с отделением передачи буфера хоста / графического процессора от циклов синхронизации, а также с обеспечением того, чтобы выполнение GPU не было асинхронным по отношению к циклам синхронизации. Освещение этого вопроса немного сложнее, и я не думаю, что здесь это уместно.)