aboutsummaryrefslogtreecommitdiff
path: root/compute_kernel_writer/include/ckw
diff options
context:
space:
mode:
Diffstat (limited to 'compute_kernel_writer/include/ckw')
-rw-r--r--compute_kernel_writer/include/ckw/Kernel.h12
-rw-r--r--compute_kernel_writer/include/ckw/KernelWriter.h36
2 files changed, 45 insertions, 3 deletions
diff --git a/compute_kernel_writer/include/ckw/Kernel.h b/compute_kernel_writer/include/ckw/Kernel.h
index 0cab713c48..54e7ca33fd 100644
--- a/compute_kernel_writer/include/ckw/Kernel.h
+++ b/compute_kernel_writer/include/ckw/Kernel.h
@@ -25,12 +25,17 @@
#ifndef CKW_INCLUDE_CKW_KERNEL_H
#define CKW_INCLUDE_CKW_KERNEL_H
-#include "ckw/types/TargetLanguage.h"
#include <string>
namespace ckw
{
+// Forward Declerations
+class TileInfo;
+class ITileOperand;
+
+enum class TargetLanguage;
+
/** The kernel that has been emitted by the kernel writer.
*
* It contains all the necessary information to compile and execute the kernel.
@@ -38,6 +43,8 @@ namespace ckw
class Kernel
{
public:
+ virtual ~Kernel();
+
/** Initialize a new instance of @ref Kernel class with all emitted kernel information.
*
* @param[in] language The target language of the kernel.
@@ -51,6 +58,9 @@ public:
/** Get the source code. */
const std::string &source_code() const;
+ /** Add a tile operand */
+ virtual ITileOperand &add_operand(const std::string &name, const TileInfo &tile_info) = 0;
+
private:
TargetLanguage _language;
std::string _source_code;
diff --git a/compute_kernel_writer/include/ckw/KernelWriter.h b/compute_kernel_writer/include/ckw/KernelWriter.h
index ba8a6015e6..f1635c6449 100644
--- a/compute_kernel_writer/include/ckw/KernelWriter.h
+++ b/compute_kernel_writer/include/ckw/KernelWriter.h
@@ -25,9 +25,10 @@
#ifndef CKW_INCLUDE_CKW_KERNELWRITER_H
#define CKW_INCLUDE_CKW_KERNELWRITER_H
-#include "ckw/types/TargetArchitecture.h"
-#include "ckw/types/TargetLanguage.h"
+#include "ckw/ITileOperand.h"
+
#include <memory>
+#include <set>
#include <string>
namespace ckw
@@ -35,6 +36,11 @@ namespace ckw
class Kernel;
+/** Forward Declerations */
+class TileInfo;
+enum class TargetArchitecture;
+enum class TargetLanguage;
+
/** A kernel writer.
*
* This class is used to construct a new kernel by defining arguments, declaring variable and writing code.
@@ -71,6 +77,7 @@ public:
// =============================================================================================
/** Write the line comment in debug build.
+ *
* This function does not take effect on release build.
*
* The comment must only contain one line (i.e. no newline character is allowed).
@@ -88,6 +95,31 @@ public:
* @param[in] name The name of the kernel object to be generated.
*/
virtual std::unique_ptr<Kernel> emit_kernel(const std::string &name) = 0;
+
+ /** Declare a tile given its name and tile info
+ *
+ * @param[in] name Name of the tile
+ * @param[in] tile_info Shape and data type of the tile
+ *
+ * @returns The created tile operand
+ */
+ virtual ITileOperand &declare_tile(const std::string &name, const TileInfo &tile_info) = 0;
+
+protected:
+ int32_t id_space() const;
+
+ /** Pure virtual function to be overridden by language specific subclasses to add a tile operand to the kernel */
+ virtual ITileOperand &add_operand(const std::string &name, const TileInfo &tile_info) = 0;
+
+ /** Add a tile operand to the operand list */
+ ITileOperand &add_operand(std::unique_ptr<ITileOperand> &operand_ptr);
+
+ /** Generate full variable name by prefixing it with id space */
+ std::string generate_full_name(const std::string &name) const;
+
+private:
+ int32_t _id_space{ 0 };
+ std::set<std::unique_ptr<ITileOperand>> _operands {};
};
} // namespace ckw