#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
находится здесь .