Как кодовые наборы Poplar могут включать код из других заголовочных файлов?

#ipu #poplar

#ipu #poplar

Вопрос:

Возможно ли, чтобы кодовые наборы ссылались на код в других файлах, таких как заголовочные файлы?

Если у меня есть файл кодового набора

     //FileA.cpp
    #include "FileB.h"
    class SomeCustomVertex : public Vertex { 
    public:
       bool compute() {
          int a = SomeConstantDefinedInFileB; 
       }
    ... 
    }
 

и какой-либо другой файл «codelet»

     //FileB.h
    const int SomeConstantDefineInFileB = 42;
 

и в программе host graph:

 graph.addCodelets({"codelets/FileA.cpp", "codelets/FileB.h"});
 

Я получаю ошибку компиляции из popc :

 fatal error: 'FileB.h' file not found
#include "FileB.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
terminate called after throwing an instance of 'poplar::graph_program_compilation_error'
  what():  Codelet compilation failed (see compiler output for details)
 

Ответ №1:

Я понял это.

Graph::addCodelets имеет параметр StringRef compileFlags = "" , который вы можете использовать для ввода параметров компилятора.

popc --help показывает параметр

 -I arg                        Add directory to include search path
 

Итак, когда я использую graph.addCodelets({"codelets/FileA.cpp"}, "-I codelets"); в хост-программе и мои кодовые наборы находятся в подкаталоге ‘codelets’, это работает. Нет необходимости явно указывать файлы «.h» в аргументах.

Кстати, также хороший способ обеспечить оптимизацию компилятора ( -O3 ) для пользовательских кодовых наборов.

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

1. Для справки соответствующая часть документации addCodelets находится здесь .