From cf435b77f97523c42453f8043d833198916b1688 Mon Sep 17 00:00:00 2001 From: Rliop913 <87229271+Rliop913@users.noreply.github.com> Date: Thu, 29 Feb 2024 18:56:25 +0900 Subject: [PATCH] cl kernel embedder upload --- CL_C_kernel_files/KERNEL_Embedder.py | 76 ++++++++++++++++++++++++++++ CL_C_kernel_files/OpenclCTemplate.cl | 19 +++++++ CL_C_kernel_files/cl_embedded.h | 24 +++++++++ 3 files changed, 119 insertions(+) create mode 100644 CL_C_kernel_files/KERNEL_Embedder.py create mode 100644 CL_C_kernel_files/OpenclCTemplate.cl create mode 100644 CL_C_kernel_files/cl_embedded.h diff --git a/CL_C_kernel_files/KERNEL_Embedder.py b/CL_C_kernel_files/KERNEL_Embedder.py new file mode 100644 index 0000000..8673818 --- /dev/null +++ b/CL_C_kernel_files/KERNEL_Embedder.py @@ -0,0 +1,76 @@ +import os + + + + + +def embed_head(entry_name:str)->str: + + head:str=""" +#pragma once +#include +class cl_embed { + public: + """ + return head + + +def embed_tail(entry_name:str)->str: + return entry_name + "\n};" + + +def get_all_kernels(embed_:str)->str: + + for i in os.listdir("./"): + if i.endswith(".cl"): + + clfile=open("./"+i, "r",encoding="utf-8") + #read_and_embed(clfile, embed_) + embed_ = read_and_embed(clfile, embed_) + clfile.close() + + return embed_tail(embed_) + pass + + +def get_title(text:str)->str: + void_loc = text.find("void ") + 5 + arg_loc = text.find("(") + + return text[void_loc:arg_loc] + +def add_title(title:str, main_text:str)->str: + return "std::string "+title+" = \n"+main_text + "\t;\n" + +def read_and_embed(file, got_str:str)->str: + main_text:str="" + title:str = "" + for i in file.readlines(): + line:str=i[:-1] + if line.find("//-ne")!=-1 or line.find("//No_Embed")!=-1 or line.find("printf")!=-1: + + pass + else: + if line.find("__kernel")!=-1: + title = get_title(line) + line="\t\""+line+"\\n\""+"\n" + main_text+=line + + + + + return got_str + add_title(title, main_text) + + + + + +embed_string:str="" +embed_string = embed_head(embed_string) + +out_file=open("./cl_embedded.h","w", encoding="utf-8") +out_file.write(get_all_kernels(embed_string)) +out_file.close() + + + diff --git a/CL_C_kernel_files/OpenclCTemplate.cl b/CL_C_kernel_files/OpenclCTemplate.cl new file mode 100644 index 0000000..8303783 --- /dev/null +++ b/CL_C_kernel_files/OpenclCTemplate.cl @@ -0,0 +1,19 @@ +//No_Embed <-----This reservation word will allow you to ignore the line when embedded. +//or +//-ne + + + +void feel_free_to_make_functions()//but you can't use recursive function +{ + return; +} + +//Kernel entry point, equals to main() function +__kernel void sample_entry_code(__global int* from_main_code) +{ + int myid = get_global_id(0); + printf("test %d sample",from_main_code[myid]);//also printf will be ignored in embedded + feel_free_to_make_functions(); + printf("this line will be ignored after embedding");//-ne +} diff --git a/CL_C_kernel_files/cl_embedded.h b/CL_C_kernel_files/cl_embedded.h new file mode 100644 index 0000000..6f51170 --- /dev/null +++ b/CL_C_kernel_files/cl_embedded.h @@ -0,0 +1,24 @@ + +#pragma once +#include +class cl_embed { + public: + std::string sample_entry_code = + "//or\n" + "\n" + "\n" + "\n" + "void feel_free_to_make_functions()//but you can't use recursive function\n" + "{\n" + " return;\n" + "}\n" + "\n" + "//Kernel entry point, equals to main() function\n" + "__kernel void sample_entry_code(__global int* from_main_code)\n" + "{\n" + " int myid = get_global_id(0);\n" + " feel_free_to_make_functions();\n" + "}\n" + ; + +}; \ No newline at end of file