summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-30 16:58:28 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-30 16:58:28 +0200
commit636abd840ef43ff5bca30f963d6d1cf28f016cf7 (patch)
tree40a80b47076e4c9840ea6449072c7574cd29da2b
parent75c402b68c0092663916eb25c2270ca853437fcc (diff)
Trying to fix chrono issues
-rw-r--r--default.nix8
-rw-r--r--modules/remote-hip/.nix/derivation.nix10
-rw-r--r--modules/remote-hip/SConstruct9
-rw-r--r--modules/remote-hip/c++/SConscript24
-rw-r--r--modules/remote-hip/c++/common.hpp5
-rw-r--r--modules/remote-hip/c++/device.hpp2
-rw-r--r--modules/remote-hip/c++/remote.hpp29
-rw-r--r--modules/remote-hip/c++/transfer.hpp26
-rw-r--r--modules/remote-hip/examples/SConscript14
-rw-r--r--modules/remote-hip/examples/hip_device_info.cpp11
10 files changed, 90 insertions, 48 deletions
diff --git a/default.nix b/default.nix
index 6dc6c17..944a2d7 100644
--- a/default.nix
+++ b/default.nix
@@ -117,6 +117,14 @@ in rec {
build_benchmarks = "true";
};
+ remote-hip = pkgs.callPackage modules/remote-hip/.nix/derivation.nix {
+ inherit version;
+ inherit forstio;
+ inherit clang-tools;
+
+ build_examples = "true";
+ };
+
window = pkgs.callPackage modules/window/.nix/derivation.nix {
inherit version;
inherit forstio;
diff --git a/modules/remote-hip/.nix/derivation.nix b/modules/remote-hip/.nix/derivation.nix
index 18d31c7..af99c43 100644
--- a/modules/remote-hip/.nix/derivation.nix
+++ b/modules/remote-hip/.nix/derivation.nix
@@ -1,5 +1,4 @@
{ lib
-, stdenv
, scons
, clang-tools
, version
@@ -13,7 +12,7 @@
let
-in stdenv.mkDerivation {
+in rocmPackages.llvm.rocmClangStdenv.mkDerivation {
pname = "forstio-remote-hip";
inherit version;
src = ./..;
@@ -22,7 +21,8 @@ in stdenv.mkDerivation {
nativeBuildInputs = [
clang-tools
- scons
+ scons
+ rocmPackages.clr
];
buildInputs = [
@@ -33,11 +33,11 @@ in stdenv.mkDerivation {
];
buildPhase = ''
- scons build_benchmarks=${build_benchmarks} build_examples=${build_examples}
+ HIP_ROOT_DIR=${rocmPackages.clr} scons build_benchmarks=${build_benchmarks} build_examples=${build_examples}
'';
installPhase = ''
- scons prefix=$out build_benchmarks=${build_benchmarks} build_examples=${build_examples} install
+ HIP_ROOT_DIR=${rocmPackages.clr} scons prefix=$out build_benchmarks=${build_benchmarks} build_examples=${build_examples} install
'';
doCheck = false;
diff --git a/modules/remote-hip/SConstruct b/modules/remote-hip/SConstruct
index 83b1f3a..75057c9 100644
--- a/modules/remote-hip/SConstruct
+++ b/modules/remote-hip/SConstruct
@@ -59,11 +59,14 @@ env_vars.Add(
env=Environment(ENV=os.environ, variables=env_vars, CPPPATH=[],
CPPDEFINES=['SAW_UNIX'],
- CXXFLAGS=['-std=c++20','-g','-Wall','-Wextra'],
+ CXXFLAGS=[
+ '-std=c++20',
+ '-g','-Wall','-Wextra'],
LIBS=['forstio-core'
,'forstio-codec'
,'forstio-async'
,'forstio-remote'
+ ,'amdhip64'
]
);
env.__class__.add_source_files = add_kel_source_files
@@ -77,8 +80,8 @@ env.targets = [];
Export('env')
SConscript('c++/SConscript')
-SConscript('tests/SConscript')
-#SConscript('examples/SConscript')
+#SConscript('tests/SConscript')
+SConscript('examples/SConscript')
#SConscript('benchmarks/SConscript')
env.Alias('cdb', env.cdb);
diff --git a/modules/remote-hip/c++/SConscript b/modules/remote-hip/c++/SConscript
index 29b7ca4..69f56da 100644
--- a/modules/remote-hip/c++/SConscript
+++ b/modules/remote-hip/c++/SConscript
@@ -10,29 +10,29 @@ Import('env')
dir_path = Dir('.').abspath
# Environment for base library
-dev_sycl_env = env.Clone();
+dev_hip_env = env.Clone();
-dev_sycl_env.sources = sorted(glob.glob(dir_path + "/*.cpp"))
-dev_sycl_env.headers = sorted(glob.glob(dir_path + "/*.hpp"))
+dev_hip_env.sources = sorted(glob.glob(dir_path + "/*.cpp"))
+dev_hip_env.headers = sorted(glob.glob(dir_path + "/*.hpp"))
-env.sources += dev_sycl_env.sources;
-env.headers += dev_sycl_env.headers;
+env.sources += dev_hip_env.sources;
+env.headers += dev_hip_env.headers;
## Shared lib
objects_shared = []
-dev_sycl_env.add_source_files(objects_shared, dev_sycl_env.sources, shared=True);
-env.library_shared = dev_sycl_env.SharedLibrary('#build/forstio-remote-sycl', [objects_shared]);
+dev_hip_env.add_source_files(objects_shared, dev_hip_env.sources, shared=True);
+env.library_shared = dev_hip_env.SharedLibrary('#build/forstio-remote-hip', [objects_shared]);
## Static lib
objects_static = []
-dev_sycl_env.add_source_files(objects_static, dev_sycl_env.sources, shared=False);
-env.library_static = dev_sycl_env.StaticLibrary('#build/forstio-remote-sycl', [objects_static]);
+dev_hip_env.add_source_files(objects_static, dev_hip_env.sources, shared=False);
+env.library_static = dev_hip_env.StaticLibrary('#build/forstio-remote-hip', [objects_static]);
# Set Alias
-env.Alias('library_remote_sycl', [env.library_shared, env.library_static]);
+env.Alias('library_remote_hip', [env.library_shared, env.library_static]);
-env.targets += ['library_remote_sycl'];
+env.targets += ['library_remote_hip'];
# Install
env.Install('$prefix/lib/', [env.library_shared, env.library_static]);
-env.Install('$prefix/include/forstio/remote/sycl/', [dev_sycl_env.headers]);
+env.Install('$prefix/include/forstio/remote/hip/', [dev_hip_env.headers]);
diff --git a/modules/remote-hip/c++/common.hpp b/modules/remote-hip/c++/common.hpp
index cf1ca93..d2dda5c 100644
--- a/modules/remote-hip/c++/common.hpp
+++ b/modules/remote-hip/c++/common.hpp
@@ -1,8 +1,9 @@
#pragma once
#include <forstio/remote/remote.hpp>
-#include <forstio/codec/data.hpp>
-#include <forstio/codec/id_map.hpp>
+
+#define __HIP_PLATFORM_AMD__
+#include <hip/hip_runtime.h>
namespace saw {
namespace rmt {
diff --git a/modules/remote-hip/c++/device.hpp b/modules/remote-hip/c++/device.hpp
index 97204f0..227ed1b 100644
--- a/modules/remote-hip/c++/device.hpp
+++ b/modules/remote-hip/c++/device.hpp
@@ -7,7 +7,7 @@ namespace saw {
* Represents a remote Sycl device.
*/
template<>
-class device<rmt::Sycl> final {
+class device<rmt::Hip> final {
private:
public:
device() = default;
diff --git a/modules/remote-hip/c++/remote.hpp b/modules/remote-hip/c++/remote.hpp
index 5bb41cf..ce4c248 100644
--- a/modules/remote-hip/c++/remote.hpp
+++ b/modules/remote-hip/c++/remote.hpp
@@ -63,6 +63,35 @@ public:
}
/**
+ * Info
+ */
+ std::string get_info() const {
+ std::stringstream sstr;
+ int dev_count;
+ hipGetDeviceCount(&dev_count);
+ for(int i = 0; i < dev_count; ++i){
+ hipSetDevice(i);
+
+ hipDeviceProp_t props{};
+ hipGetDeviceProperties(&props, i);
+
+ sstr << "Name: " << props.name << '\n';
+ /*
+ sstr << "totalGlobalMem: " << props.totalGlobalMem << " GiB\n";
+ sstr << "sharedMemPerBlock: " << props.sharedMemPerBlock << " KiB\n";
+ sstr << "regsPerBlock: " << props.regsPerBlock << '\n';
+ sstr << "warpSize: " << props.warpSize << '\n';
+ sstr << "maxThreadsPerBlock: " << props.maxThreadsPerBlock << '\n';
+ sstr << "maxThreadsDim: " << "(" << props.maxThreadsDim[0] << ", " << props.maxThreadsDim[1] << ", " << props.maxThreadsDim[2] << ")\n";
+ sstr << "maxGridSize: " << "(" << props.maxGridSize[0] << ", " << props.maxGridSize[1] << ", " << props.maxGridSize[2] << ")\n";
+ sstr << "clockRate: " << props.clockRate << " Mhz\n";
+ */
+ }
+
+ return sstr.str();
+ }
+
+ /**
* Parse address, but don't resolve it.
*/
error_or<own<remote_address<rmt::Hip>>> parse_address(uint64_t dev_id = 0u){
diff --git a/modules/remote-hip/c++/transfer.hpp b/modules/remote-hip/c++/transfer.hpp
index 1fd97e8..a81f657 100644
--- a/modules/remote-hip/c++/transfer.hpp
+++ b/modules/remote-hip/c++/transfer.hpp
@@ -22,22 +22,7 @@ public:
{}
error_or<void> send(const data<Schema,Encoding>& dat, id<Schema> store_id){
- auto eo_val = device_->template copy_to_device(dat);
- if(eo_val.is_error()){
- auto& err = eo_val.get_error();
- return std::move(err);
- }
- auto& val = eo_val.get_value();
-
- try {
- auto insert_res = values_.emplace(std::make_pair(store_id.get_value(), std::move(val)));
- if(!insert_res.second){
- return make_error<err::already_exists>();
- }
- }catch(const std::exception&){
- return make_error<err::out_of_memory>();
- }
- return make_void();
+ return make_error<err::not_implemented>();
}
error_or<void> allocate(const data<typename meta_schema<Schema>::MetaSchema, Encoding>& dat, id<Schema> store_id){
@@ -89,6 +74,8 @@ public:
*/
template<typename Sch>
error_or<void> send(const data<Sch, Encoding>& dat, id<Sch> store_id){
+ return make_error<err::not_implemented>();
+ /*
auto& vals = std::get<std::unordered_map<uint64_t, data<Sch,encode::Hip<Encoding>>>>(values_);
auto eoval = device_->template copy_to_device<Sch, Encoding>(dat);
if(eoval.is_error()){
@@ -105,10 +92,13 @@ public:
return make_error<err::out_of_memory>();
}
return void_t{};
+ */
}
template<typename Sch>
error_or<void> allocate(const data<typename meta_schema<Sch>::MetaSchema, Encoding>& dat, id<Sch> store_id){
+ return make_error<err::not_implemented>();
+ /*
auto& vals = std::get<std::unordered_map<uint64_t, data<Sch,encode::Hip<Encoding>>>>(values_);
auto eoval = device_->template allocate_on_device<Sch, Encoding>(dat);
if(eoval.is_error()){
@@ -125,6 +115,7 @@ public:
return make_error<err::out_of_memory>();
}
return void_t{};
+ */
}
/**
@@ -139,8 +130,7 @@ public:
}
auto& dat = find_res->second;
- auto eoval = device_->template copy_to_host<Sch, Encoding>(dat);
- return eoval;
+ return make_error<err::not_implemented>();
}
/**
diff --git a/modules/remote-hip/examples/SConscript b/modules/remote-hip/examples/SConscript
index 5966b1b..cb9eb65 100644
--- a/modules/remote-hip/examples/SConscript
+++ b/modules/remote-hip/examples/SConscript
@@ -13,9 +13,9 @@ dir_path = Dir('.').abspath
examples_env = env.Clone();
-examples_sycl_env = examples_env.Clone();
-examples_sycl_env['CXX'] = 'acpp';
-examples_sycl_env['CXXFLAGS'] += ['-O2'];
+examples_hip_env = examples_env.Clone();
+examples_hip_env['CXX'] = 'hipcc';
+examples_hip_env['CXXFLAGS'] += ['-O2'];
examples_env.sources = sorted(glob.glob(dir_path + "/*.cpp"))
examples_env.headers = sorted(glob.glob(dir_path + "/*.hpp"))
@@ -23,14 +23,14 @@ examples_env.headers = sorted(glob.glob(dir_path + "/*.hpp"))
env.sources += examples_env.sources;
env.headers += examples_env.headers;
-#sycl_objects = [];
-#examples_sycl_env.add_source_files(sycl_objects, ['sycl_basic_kernel.cpp'], shared=True);
+hip_objects = [];
+#examples_hip_env.add_source_files(hip_objects, ['hip_basic_kernel.cpp'], shared=True);
#objects_static = []
-#examples_env.sycl_basic = examples_env.Program('#bin/sycl_basic', ['sycl_basic.cpp', env.library_static, sycl_objects]);
+examples_env.hip_info = examples_hip_env.Program('#bin/hip_device_info', ['hip_device_info.cpp', env.library_static, hip_objects]);
# Set Alias
-env.examples = [examples_env.sycl_basic];
+env.examples = [examples_env.hip_info];
env.Alias('examples', env.examples);
if env["build_examples"]:
diff --git a/modules/remote-hip/examples/hip_device_info.cpp b/modules/remote-hip/examples/hip_device_info.cpp
index ade4548..ed62e93 100644
--- a/modules/remote-hip/examples/hip_device_info.cpp
+++ b/modules/remote-hip/examples/hip_device_info.cpp
@@ -1,3 +1,14 @@
+#include "../c++/remote.hpp"
+#include "../c++/transfer.hpp"
+
+#include <iostream>
+
int main(){
+ using namespace saw;
+
+ remote<rmt::Hip> rmt;
+
+ std::cout<<"Remote Info:\n"<<rmt.get_info()<<std::endl;
+
return 0;
}