From 636abd840ef43ff5bca30f963d6d1cf28f016cf7 Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Fri, 30 Aug 2024 16:58:28 +0200 Subject: Trying to fix chrono issues --- default.nix | 8 +++++++ modules/remote-hip/.nix/derivation.nix | 10 ++++----- modules/remote-hip/SConstruct | 9 +++++--- modules/remote-hip/c++/SConscript | 24 ++++++++++---------- modules/remote-hip/c++/common.hpp | 5 +++-- modules/remote-hip/c++/device.hpp | 2 +- modules/remote-hip/c++/remote.hpp | 29 +++++++++++++++++++++++++ modules/remote-hip/c++/transfer.hpp | 26 +++++++--------------- modules/remote-hip/examples/SConscript | 14 ++++++------ modules/remote-hip/examples/hip_device_info.cpp | 11 ++++++++++ 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 -#include -#include + +#define __HIP_PLATFORM_AMD__ +#include 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 final { +class device 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 @@ -62,6 +62,35 @@ public: return heap>(dev_id); } + /** + * 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. */ 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 send(const data& dat, id 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(); - } - }catch(const std::exception&){ - return make_error(); - } - return make_void(); + return make_error(); } error_or allocate(const data::MetaSchema, Encoding>& dat, id store_id){ @@ -89,6 +74,8 @@ public: */ template error_or send(const data& dat, id store_id){ + return make_error(); + /* auto& vals = std::get>>>(values_); auto eoval = device_->template copy_to_device(dat); if(eoval.is_error()){ @@ -105,10 +92,13 @@ public: return make_error(); } return void_t{}; + */ } template error_or allocate(const data::MetaSchema, Encoding>& dat, id store_id){ + return make_error(); + /* auto& vals = std::get>>>(values_); auto eoval = device_->template allocate_on_device(dat); if(eoval.is_error()){ @@ -125,6 +115,7 @@ public: return make_error(); } return void_t{}; + */ } /** @@ -139,8 +130,7 @@ public: } auto& dat = find_res->second; - auto eoval = device_->template copy_to_host(dat); - return eoval; + return make_error(); } /** 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 + int main(){ + using namespace saw; + + remote rmt; + + std::cout<<"Remote Info:\n"<