summaryrefslogtreecommitdiff
path: root/modules/remote-sycl
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2024-06-11 16:05:47 +0200
committerClaudius "keldu" Holeksa <mail@keldu.de>2024-06-11 16:05:47 +0200
commit6831edddd22d2d8dbb73c88fb612c0bdd5b8ba19 (patch)
treed9837a9720acd66852fb374d51079f02bf33c0b0 /modules/remote-sycl
parent1ad8bc8e0b6d87d49d63105b3eac3cc8d5a06e56 (diff)
Intermediate commit while working on design issues
Diffstat (limited to 'modules/remote-sycl')
-rw-r--r--modules/remote-sycl/SConstruct2
-rw-r--r--modules/remote-sycl/c++/remote.hpp100
-rw-r--r--modules/remote-sycl/examples/SConscript2
-rw-r--r--modules/remote-sycl/examples/sycl_basic.cpp2
-rw-r--r--modules/remote-sycl/examples/sycl_basic.hpp4
-rw-r--r--modules/remote-sycl/examples/sycl_basic_kernel.cpp10
6 files changed, 108 insertions, 12 deletions
diff --git a/modules/remote-sycl/SConstruct b/modules/remote-sycl/SConstruct
index 78c27ab..96e9df9 100644
--- a/modules/remote-sycl/SConstruct
+++ b/modules/remote-sycl/SConstruct
@@ -58,7 +58,7 @@ env=Environment(ENV=os.environ, variables=env_vars, CPPPATH=[],
,'forstio-async'
,'forstio-io'
,'forstio-io_codec'
- ,'hipSYCL-rt'
+ ,'acpp-rt'
,'OpenCL'
,'omp'
]
diff --git a/modules/remote-sycl/c++/remote.hpp b/modules/remote-sycl/c++/remote.hpp
index dbbefcb..d311ca5 100644
--- a/modules/remote-sycl/c++/remote.hpp
+++ b/modules/remote-sycl/c++/remote.hpp
@@ -4,7 +4,7 @@
#include <forstio/codec/data.hpp>
#include <forstio/codec/id_map.hpp>
-#include <CL/sycl.hpp>
+#include <AdaptiveCpp/CL/sycl.hpp>
namespace saw {
namespace rmt {
@@ -37,13 +37,77 @@ public:
conveyor<data<T,Encoding>> on_receive(); /// Stopped here
};
+/**
+ *
+ */
+template<typename T, uint64_t N>
+class data<schema::Primitive<T,N>, encode::Native<rmt::Sycl>> {
+public:
+ using Schema = schema::Primitive<T,N>;
+ using NativeType = typename native_data_type<Schema>::type;
+private:
+ /**
+ *
+ */
+ NativeType val_;
+public:
+ /**
+ *
+ */
+ data(NativeType val__):
+ val_{val__}
+ {}
+
+ NativeType get(){
+ return val_;
+ }
+};
+
template<typename T, uint64_t D>
class data<schema::Array<T,D>, encode::Native<rmt::Sycl>> {
+public:
+ using Schema = schema::Array<T,D>;
private:
- cl::sycl::buffer<typename native_data_type<T>::type, D> device_data_;
+ uint64_t total_length_;
+ typename native_data_type<T>::type* device_data_;
+ // data<T>* device_data_;
+ cl::sycl::queue* queue_;
+ static_assert(is_primitive<T>::value, "Only supports primitives for now");
static_assert(D==1u, "For now we only support 1D Arrays");
public:
+ data(uint64_t size, cl::sycl::queue& q__):
+ total_length_{size},
+ device_data_{cl::sycl::malloc_device<typename native_data_type<T>::type>(size, q__)},
+ queue_{&q__}
+ {
+ if(!device_data_){
+ total_length_ = 0u;
+ }
+ }
+
+ template<typename Encoding>
+ data(const data<Schema, Encoding>& from, cl::sycl::queue& q__):
+ total_length_{from.size()},
+ device_data_{cl::sycl::malloc_device<typename native_data_type<T>::type>(from.size(), q__)},
+ queue_{&q__}
+ {
+ if(!device_data_){
+ total_length_ = 0u;
+ }
+ }
+
+ ~data(){
+ // free data
+ if(device_data_){
+ /// SYCL FREE
+ cl::sycl::free(device_data_, *queue_);
+ }
+ }
+
+ data<T,encode::Native<rmt::Sycl>>& at(uint64_t i){
+ return device_data_[i];
+ }
};
namespace impl {
@@ -59,6 +123,36 @@ struct rpc_id_map_helper<schema::Interface<Members...>, Encoding> {
};
}
/**
+ * Rpc Client class for the Sycl backend.
+ */
+template<typename Iface, typename Encoding>
+class rpc_client<Iface, Encoding, rmt::Sycl> {
+public:
+private:
+ /**
+ * Server this client is tied to
+ */
+ rpc_server<Iface, Encoding, rmt::Sycl>* srv_;
+public:
+ rpc_client(rpc_server<Iface, Encoding, rmt::Sycl>& srv):
+ srv_{&srv}
+ {}
+
+ /**
+ * Rpc call
+ */
+ template<string_literal Name, typename ClientEncoding>
+ error_or<
+ id<
+ typename schema_member_type<Name, Iface>::type::ResponseT
+ >
+ > call(data_or_id<typename schema_member_type<Name, Iface>::type::RequestT, ClientEncoding> input){
+ return make_error<err::not_implemented>("RpcClient side is not implemented");
+ }
+
+};
+
+/**
* Rpc Server class for the Sycl backend.
*/
template<typename Iface, typename Encoding>
@@ -103,6 +197,8 @@ public:
>
> call(data_or_id<typename schema_member_type<Name, Iface>::type::RequestT, Encoding> input){
+
+
/**
* First check if it's data or an id.
* If it's an id, check if it's registered within the storage and retrieve it.
diff --git a/modules/remote-sycl/examples/SConscript b/modules/remote-sycl/examples/SConscript
index 3c510eb..02e528b 100644
--- a/modules/remote-sycl/examples/SConscript
+++ b/modules/remote-sycl/examples/SConscript
@@ -14,7 +14,7 @@ examples_env = env.Clone();
examples_sycl_env = examples_env.Clone();
-examples_sycl_env['CXX'] = 'syclcc';
+examples_sycl_env['CXX'] = 'acpp';
examples_env.sources = sorted(glob.glob(dir_path + "/*.cpp"))
examples_env.headers = sorted(glob.glob(dir_path + "/*.hpp"))
diff --git a/modules/remote-sycl/examples/sycl_basic.cpp b/modules/remote-sycl/examples/sycl_basic.cpp
index 64ec1fe..3f92cdb 100644
--- a/modules/remote-sycl/examples/sycl_basic.cpp
+++ b/modules/remote-sycl/examples/sycl_basic.cpp
@@ -23,7 +23,7 @@ int main(){
saw::id<schema::UInt64> next_id{0u};
{
- auto eov = rpc_server.template call<"increment">(saw::data<schema::UInt64>{1u});
+ auto eov = rpc_server.template call<"increment">(saw::data<schema::UInt64, saw::encode::Native<saw::rmt::Sycl>>{1u});
if(eov.is_error()){
auto& err = eov.get_error();
std::cerr<<"Error: "<<err.get_category()<<" : "<<err.get_message()<<std::endl;
diff --git a/modules/remote-sycl/examples/sycl_basic.hpp b/modules/remote-sycl/examples/sycl_basic.hpp
index 0d4b5d2..c7cfadc 100644
--- a/modules/remote-sycl/examples/sycl_basic.hpp
+++ b/modules/remote-sycl/examples/sycl_basic.hpp
@@ -6,8 +6,8 @@ namespace schema {
using namespace saw::schema;
using BasicInterface = Interface<
- Member<Function<UInt64, UInt64>, "increment">
+ Member<Function<Array<UInt64>, UInt64>, "increment">
>;
}
-saw::rpc_server<schema::BasicInterface, saw::encode::Native<saw::storage::Default>, saw::rmt::Sycl> listen_basic_sycl(saw::remote<saw::rmt::Sycl>& ctx, saw::remote_address<saw::rmt::Sycl>& addr);
+saw::rpc_server<schema::BasicInterface, saw::encode::Native<saw::rmt::Sycl>, saw::rmt::Sycl> listen_basic_sycl(saw::remote<saw::rmt::Sycl>& ctx, saw::remote_address<saw::rmt::Sycl>& addr);
diff --git a/modules/remote-sycl/examples/sycl_basic_kernel.cpp b/modules/remote-sycl/examples/sycl_basic_kernel.cpp
index 18fe9b7..86e73b5 100644
--- a/modules/remote-sycl/examples/sycl_basic_kernel.cpp
+++ b/modules/remote-sycl/examples/sycl_basic_kernel.cpp
@@ -1,9 +1,9 @@
#include "sycl_basic.hpp"
-saw::rpc_server<schema::BasicInterface, saw::encode::Native<saw::storage::Default>, saw::rmt::Sycl> listen_basic_sycl(saw::remote<saw::rmt::Sycl>& ctx, saw::remote_address<saw::rmt::Sycl>& addr){
- 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> {
- uint64_t inr = in.get();
+saw::rpc_server<schema::BasicInterface, saw::encode::Native<saw::rmt::Sycl>, saw::rmt::Sycl> listen_basic_sycl(saw::remote<saw::rmt::Sycl>& ctx, saw::remote_address<saw::rmt::Sycl>& addr){
+ saw::interface<schema::BasicInterface, saw::encode::Native<saw::rmt::Sycl>, cl::sycl::queue*> iface{
+ [](saw::data<saw::schema::Array<saw::schema::UInt64>, saw::encode::Native<saw::rmt::Sycl>> in, cl::sycl::queue* q) -> saw::data<saw::schema::UInt64, saw::encode::Native<saw::rmt::Sycl>> {
+ uint64_t inr = in.size();
cl::sycl::buffer<uint64_t,1> d_inc{ &inr, 1u };
q->submit([&](cl::sycl::handler& h){
auto a_inc = d_inc.get_access<cl::sycl::access::mode::read_write>(h);
@@ -16,7 +16,7 @@ saw::rpc_server<schema::BasicInterface, saw::encode::Native<saw::storage::Defaul
return {inr};
}
};
- auto rpc_server = ctx.template listen<schema::BasicInterface, saw::encode::Native<saw::storage::Default>>(addr, std::move(iface));
+ auto rpc_server = ctx.template listen<schema::BasicInterface, saw::encode::Native<saw::rmt::Sycl>>(addr, std::move(iface));
return rpc_server;
}