KernelTable::KernelTable(const Converter& converter) : converter(converter), declaration(c_ast::CCodeFragment::createNew( converter.getFragmentManager(), converter.getCNodeManager()->create<c_ast::OpaqueCode>("extern irt_opencl_kernel_implementation *" KERNEL_TABLE_NAME "[];"))) { addDependency(declaration); runtime::ContextHandlingFragmentPtr ctx = runtime::ContextHandlingFragment::get(converter); // add the dataReq. table as well ctx->addInitExpression("\tirt_opencl_init_context(%s, " KERNEL_TABLE_NAME ");\n"); ctx->addCleanupExpression("\tirt_opencl_cleanup_context(%s);\n"); }
KernelTablePtr KernelTable::get(const Converter& converter) { static string ENTRY_NAME = "KernelTable"; // look up the entry within the fragment manager auto manager = converter.getFragmentManager(); auto res = manager->getFragment(ENTRY_NAME); if(!res) { // create new instance KernelTablePtr table = manager->create<KernelTable>(boost::ref(converter)); manager->bindFragment(ENTRY_NAME, table); res = table; } return static_pointer_cast<KernelTable>(res); }