Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can Poplar codelets include code from other header files?

Tags:

ipu

poplar

Is it possible for codelets to reference code in other files, like header files?

If I have a codelet file

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

and some other "codelet" file

    //FileB.h
    const int SomeConstantDefineInFileB = 42;

and in the host graph program:

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

I get a compile error from 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)
like image 907
Thorben Louw Avatar asked Jan 25 '21 15:01

Thorben Louw


1 Answers

I figured this out.

Graph::addCodelets has a parameter StringRef compileFlags = "", which you can use to inject compiler options.

popc --help shows an option

-I arg                        Add directory to include search path

So when I use graph.addCodelets({"codelets/FileA.cpp"}, "-I codelets"); in the host program, and have my codelets in 'codelets' subdirectory, this works. No need to explicitly list the ".h" files in the arguments.

Incidentally, also a good way to ensure compiler optimisation (-O3) for the custom codelets.

like image 133
Thorben Louw Avatar answered Jan 03 '23 18:01

Thorben Louw