Poplar codelets 如何包含来自其他头文件的代码?

Tho*_*ouw 5 poplar ipu

小码是否可以引用其他文件(如头文件)中的代码?

如果我有一个codelet文件

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

和其他一些“codelet”文件

    //FileB.h
    const int SomeConstantDefineInFileB = 42;
Run Code Online (Sandbox Code Playgroud)

并在主机图程序中:

graph.addCodelets({"codelets/FileA.cpp", "codelets/FileB.h"});
Run Code Online (Sandbox Code Playgroud)

我收到一个编译错误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)
Run Code Online (Sandbox Code Playgroud)

Tho*_*ouw 5

我想通了。

Graph::addCodelets有一个参数StringRef compileFlags = "",你可以用它来注入编译器选项。

popc --help 显示一个选项

-I arg                        Add directory to include search path
Run Code Online (Sandbox Code Playgroud)

因此,当我graph.addCodelets({"codelets/FileA.cpp"}, "-I codelets");在主机程序中使用并将我的小码放在“小码”子目录中时,这是有效的。无需在参数中明确列出“.h”文件。

顺便说一句,这也是确保-O3自定义小码的编译器优化 ( )的好方法。