summaryrefslogtreecommitdiff
path: root/modules/remote-sycl/examples
diff options
context:
space:
mode:
Diffstat (limited to 'modules/remote-sycl/examples')
-rw-r--r--modules/remote-sycl/examples/SConscript31
-rw-r--r--modules/remote-sycl/examples/sycl_basic.cpp47
2 files changed, 78 insertions, 0 deletions
diff --git a/modules/remote-sycl/examples/SConscript b/modules/remote-sycl/examples/SConscript
new file mode 100644
index 0000000..7fa9429
--- /dev/null
+++ b/modules/remote-sycl/examples/SConscript
@@ -0,0 +1,31 @@
+#!/bin/false
+
+import os
+import os.path
+import glob
+
+
+Import('env')
+
+dir_path = Dir('.').abspath
+
+# Environment for base library
+examples_env = env.Clone();
+
+examples_env.sources = sorted(glob.glob(dir_path + "/*.cpp"))
+examples_env.headers = sorted(glob.glob(dir_path + "/*.hpp"))
+
+env.sources += examples_env.sources;
+env.headers += examples_env.headers;
+
+objects_static = []
+examples_env.sycl_basic = examples_env.Program('#bin/sycl_basic', ['sycl_basic.cpp', env.library_static]);
+
+# Set Alias
+env.examples = [examples_env.sycl_basic];
+env.Alias('examples', env.examples);
+
+if env["build_examples"]:
+ env.targets += ['examples'];
+ env.Install('$prefix/bin/', env.examples);
+#endif
diff --git a/modules/remote-sycl/examples/sycl_basic.cpp b/modules/remote-sycl/examples/sycl_basic.cpp
new file mode 100644
index 0000000..a180d23
--- /dev/null
+++ b/modules/remote-sycl/examples/sycl_basic.cpp
@@ -0,0 +1,47 @@
+#include "../c++/remote.hpp"
+
+namespace schema {
+using namespace saw::schema;
+
+using BasicInterface = Interface<
+ Member<Function<UInt64, UInt64>, "increment">
+>;
+}
+
+int main(){
+ saw::remote<saw::rmt::Sycl> remote_ctx;
+
+ saw::own<saw::remote_address<saw::rmt::Sycl>> rmt_addr{};
+
+ saw::event_loop loop;
+ saw::wait_scope wait{loop};
+
+ remote_ctx.resolve_address().then([&](auto addr){
+ rmt_addr = std::move(addr);
+ }).detach();
+
+ wait.poll();
+
+ if(!rmt_addr){
+ return -1;
+ }
+
+ saw::interface<schema::BasicInterface, saw::encode::Native<saw::storage::Default>, cl::sycl::queue*> iface{
+ [](saw::data<saw::schema::UInt64> in, cl::sycl::queue* q) -> saw::data<saw::schema::UInt64> {
+ return {in.get() + 1u};
+ }
+ };
+ auto rpc_server = remote_ctx.template listen<schema::BasicInterface, saw::encode::Native<saw::storage::Default>>(*rmt_addr, std::move(iface));
+
+ {
+ auto eov = rpc_server.template call<"increment">({1u});
+ if(eov.is_error()){
+ return -2;
+ }
+ auto& val = eov.get_value();
+ std::cout<<"Value: "<<val<<std::endl;
+ }
+
+
+ return 0;
+}