From 210f30ecf91e2226121db6f98bd2be9bb1187509 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Mon, 9 Sep 2024 15:56:09 -0700 Subject: [PATCH 01/16] Fix syntax error in raja-chai integration test --- tests/integration/raja-chai-tests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/raja-chai-tests.cpp b/tests/integration/raja-chai-tests.cpp index 6cabbe91..8fc7d587 100644 --- a/tests/integration/raja-chai-tests.cpp +++ b/tests/integration/raja-chai-tests.cpp @@ -139,7 +139,7 @@ CUDA_TEST(ChaiTest, MultiView) }); // accessing pointer to v2_array - float* raw_v2 = mview.data[1]; + float* raw_v2 = mview.data[1].data(); for (int i = 0; i < 10; i++) { ASSERT_FLOAT_EQ(raw_v2[i], i * 1.0f * 2.0f * 2.0f); ; From 3de341cbe25fe7616fe17dfc2fc2ac6842ea0b21 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Wed, 11 Sep 2024 13:40:22 -0700 Subject: [PATCH 02/16] Add ROCM GPU crash reproducer --- .../blueos_3_ppc64le_ib_p9/nvcc_clang.cmake | 27 + .../lc/toss_4_x86_64_ib_cray/amdclang.cmake | 19 + reproducers/CMakeLists.txt | 7 + ...ed_ptr_multiple_inheritance_reproducer.cpp | 698 ++++++++++++++++++ 4 files changed, 751 insertions(+) create mode 100644 configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake create mode 100644 configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake create mode 100644 reproducers/managed_ptr_multiple_inheritance_reproducer.cpp diff --git a/configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake b/configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake new file mode 100644 index 00000000..48f41cc5 --- /dev/null +++ b/configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake @@ -0,0 +1,27 @@ +############################################################################## +# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CARE +# project contributors. See the CARE LICENSE file for details. +# +# SPDX-License-Identifier: BSD-3-Clause +############################################################################## + +set(COMPILER_BASE "/usr/tce/packages/clang/clang-ibm-14.0.5" CACHE PATH "") +set(CMAKE_C_COMPILER "${COMPILER_BASE}/bin/clang" CACHE PATH "") +set(CMAKE_CXX_COMPILER "${COMPILER_BASE}/bin/clang++" CACHE PATH "") + +set(GCC_HOME "/usr/tce/packages/gcc/gcc-8.3.1" CACHE PATH "") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") + +set(BLT_CMAKE_IMPLICIT_LINK_DIRECTORIES_EXCLUDE "/usr/tce/packages/gcc/gcc-4.9.3/lib64/gcc/powerpc64le-unknown-linux-gnu/4.9.3;/usr/tce/packages/gcc/gcc-4.9.3/lib64" CACHE STRING "") + +set(ENABLE_CUDA ON CACHE BOOL "Enable CUDA") +set(CUDA_TOOLKIT_ROOT_DIR "/usr/tce/packages/cuda/cuda-11.8.0" CACHE PATH "Path to CUDA") +set(CMAKE_CUDA_COMPILER "${CUDA_TOOLKIT_ROOT_DIR}/bin/nvcc" CACHE PATH "") +set(CMAKE_CUDA_HOST_COMPILER "${CMAKE_CXX_COMPILER}" CACHE PATH "") +set(CMAKE_CUDA_ARCHITECTURES "70" CACHE STRING "") +set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler=--gcc-toolchain=${GCC_HOME}" CACHE STRING "") + +set(ENABLE_REPRODUCERS ON CACHE BOOL "") +set(CHAI_ENABLE_REPRODUCERS ON CACHE BOOL "") +set(ENABLE_TESTS OFF CACHE BOOL "") diff --git a/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake b/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake new file mode 100644 index 00000000..6ba2ad23 --- /dev/null +++ b/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake @@ -0,0 +1,19 @@ +############################################################################## +# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CARE +# project contributors. See the CARE LICENSE file for details. +# +# SPDX-License-Identifier: BSD-3-Clause +############################################################################## + +set(COMPILER_BASE "/usr/tce/packages/rocmcc/rocmcc-6.1.0-magic" CACHE PATH "") +set(CMAKE_C_COMPILER "${COMPILER_BASE}/bin/amdclang" CACHE PATH "") +set(CMAKE_CXX_COMPILER "${COMPILER_BASE}/bin/amdclang++" CACHE PATH "") + +set(ENABLE_HIP ON CACHE BOOL "Enable Hip") +set(ROCM_PATH "/usr/tce/packages/rocmcc/rocmcc-6.1.0-magic" CACHE PATH "") +set(CMAKE_HIP_ARCHITECTURES "gfx942:xnack+" CACHE STRING "") +set(AMDGPU_TARGETS "gfx942:xnack+" CACHE STRING "") + +set(ENABLE_REPRODUCERS ON CACHE BOOL "") +set(CHAI_ENABLE_REPRODUCERS ON CACHE BOOL "") +set(ENABLE_TESTS OFF CACHE BOOL "") diff --git a/reproducers/CMakeLists.txt b/reproducers/CMakeLists.txt index e5ec4348..43dd0e60 100644 --- a/reproducers/CMakeLists.txt +++ b/reproducers/CMakeLists.txt @@ -14,6 +14,13 @@ if (CHAI_ENABLE_HIP) list(APPEND chai_reproducer_depends blt::hip) endif () +if (CHAI_ENABLE_MANAGED_PTR) + blt_add_executable( + NAME managed_ptr_multiple_inheritance_reproducer.exe + SOURCES managed_ptr_multiple_inheritance_reproducer.cpp + DEPENDS_ON ${chai_reproducer_depends}) +endif () + if (CHAI_ENABLE_MANAGED_PTR AND CHAI_ENABLE_HIP) blt_add_executable( NAME virtual_function_simple_reproducer.exe diff --git a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp new file mode 100644 index 00000000..6730e4d8 --- /dev/null +++ b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp @@ -0,0 +1,698 @@ +////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2016-24, Lawrence Livermore National Security, LLC and CHAI +// project contributors. See the CHAI LICENSE file for details. +// +// SPDX-License-Identifier: BSD-3-Clause +////////////////////////////////////////////////////////////////////////////// +#include "chai/config.hpp" +#include "chai/managed_ptr.hpp" +#include "chai/ArrayManager.hpp" +#include "chai/ManagedArray.hpp" +#include +#include +#include + +class DataTable1D; +class DerivedTable1D; +typedef double real8 ; + +class Table ; +class SimpleTable; +class Table1D ; + +class Table { + public: + CHAI_HOST_DEVICE Table(const char *id) ; + + CHAI_HOST_DEVICE virtual ~Table() ; + + class Data { + public: + CHAI_HOST_DEVICE Data() { +#ifdef CHAI_DEVICE_COMPILE + printf("Table::Data::Data %p\n", this) ; +#endif + } + + CHAI_HOST_DEVICE virtual ~Data() {} + + private: + } ; + + class Derived { + public: + CHAI_HOST_DEVICE Derived() { +#ifdef CHAI_DEVICE_COMPILE + printf("Table::Derived::Derived %p\n", this) ; +#endif + } + + CHAI_HOST_DEVICE virtual ~Derived() {} + + /// Removing this makes the bug go away!!! + virtual int GetNumStrings() const = 0 ; + } ; + + class Compute { + public: + CHAI_HOST_DEVICE Compute() { +#ifdef CHAI_DEVICE_COMPILE + printf("Table::Compute::Compute %p\n", this) ; +#endif + } + + CHAI_HOST_DEVICE virtual ~Compute() {} + + protected: + + CHAI_HOST_DEVICE real8 BaseXFromNewX(const real8 *newX) const ; + + CHAI_HOST_DEVICE virtual real8 RootFromBaseX(real8 baseX, const real8 *vals) const = 0; + + private: + Compute(const Compute &other); + Compute &operator=(const Compute &other); + } ; + protected: + + CHAI_HOST_DEVICE int Search(real8 xin, const real8* xvals, int numX) const ; + + private: + + const char *m_id ; + + Table() ; + + Table(const Table &other); + + Table& operator =(const Table&); +}; + +class SimpleTable : public Table { + public: + CHAI_HOST_DEVICE SimpleTable(const char* id); + + CHAI_HOST_DEVICE virtual ~SimpleTable(); + + private: + SimpleTable(); + + SimpleTable(const SimpleTable& other); + + SimpleTable& operator =(const SimpleTable&); +}; + +class Table1D : public SimpleTable { + public: + CHAI_HOST_DEVICE Table1D(const char* id) ; + + CHAI_HOST_DEVICE virtual ~Table1D() ; + + CHAI_HOST_DEVICE virtual real8 Evaluate(real8 xin) const = 0 ; + + protected: + + CHAI_HOST_DEVICE Table1D() = delete; + + CHAI_HOST_DEVICE Table1D(const Table1D &other) = delete; + + CHAI_HOST_DEVICE Table1D& operator=(const Table1D &other) = delete; +} ; + +class DataTable1D : public Table1D, public Table::Data { + public: + CHAI_HOST_DEVICE DataTable1D(const int numX, + const char *id, + const real8 *x, + const real8 *fx) ; + + CHAI_HOST_DEVICE DataTable1D(const char *id, real8 value) ; + + CHAI_HOST_DEVICE virtual ~DataTable1D(); + + CHAI_HOST_DEVICE real8 Evaluate(real8 xin) const override; + + using Table1D::Evaluate ; + + CHAI_HOST_DEVICE real8 GetXAt(int pos) const; + + CHAI_HOST_DEVICE real8 GetYAt(int pos) const; + + protected: + CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const = 0 ; + + CHAI_HOST_DEVICE int SearchX(real8 xin) const ; + + const int m_numX ; + + real8 *m_x ; + + real8 *m_fx ; +} ; + +class LinearTable1D : public DataTable1D { + public: + CHAI_HOST_DEVICE LinearTable1D(const int numX, + const char *id, + const real8 *x, + const real8 *fx) ; + + CHAI_HOST_DEVICE virtual ~LinearTable1D() ; + + CHAI_HOST_DEVICE real8 innerEvaluate(real8 x) const override; + + private: + CHAI_HOST_DEVICE LinearTable1D() = delete; + CHAI_HOST_DEVICE LinearTable1D(const LinearTable1D &other) = delete; + CHAI_HOST_DEVICE LinearTable1D &operator=(const LinearTable1D &other) = delete; + + real8 *m_x0 ; + real8 *m_xd ; + real8 *m_fx0 ; + real8 *m_fxd ; +} ; + + +class DerivedTable1D : public Table1D, public Table::Data, public Table::Derived { + public: + CHAI_HOST_DEVICE DerivedTable1D(const char *id) ; + + CHAI_HOST_DEVICE virtual ~DerivedTable1D() ; + + CHAI_HOST_DEVICE real8 Evaluate(real8 xin) const override; + + virtual int GetNumStrings() const override = 0; + + protected: + + CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const = 0 ; + + private: + CHAI_HOST_DEVICE DerivedTable1D() = delete; + CHAI_HOST_DEVICE DerivedTable1D(const DerivedTable1D &other) = delete; + CHAI_HOST_DEVICE DerivedTable1D &operator=(const DerivedTable1D &other) = delete; +} ; + +class StitchTable1D : public DerivedTable1D { + public: + CHAI_HOST StitchTable1D(const char* id, + int nt, + Table1D const** tabs, + const real8* bds) ; + + CHAI_HOST_DEVICE StitchTable1D(const char* id, + int nt, + chai::managed_ptr* tabs, + const real8* bds) ; + + CHAI_HOST_DEVICE virtual ~StitchTable1D() ; + + inline int GetNumStrings() const override { return m_nTables; } + + private: + CHAI_HOST_DEVICE real8 innerEvaluate(real8 x) const override; + + CHAI_HOST_DEVICE StitchTable1D() = delete; + CHAI_HOST_DEVICE StitchTable1D(const StitchTable1D &other) = delete; + CHAI_HOST_DEVICE StitchTable1D &operator=(const StitchTable1D &other) = delete; + + int m_nTables ; + const Table1D ** m_tables = nullptr; + real8 * m_bds ; +} ; + +class ComputedTable1D : public DerivedTable1D, public Table::Compute { + public: + CHAI_HOST_DEVICE ComputedTable1D(const char* id, const Table1D * table, + real8 lb, real8 ub); + + CHAI_HOST_DEVICE virtual ~ComputedTable1D() ; + + protected: + const Table1D *m_table; + + private: + CHAI_HOST_DEVICE ComputedTable1D() = delete; + CHAI_HOST_DEVICE ComputedTable1D(const ComputedTable1D &other) = delete; + CHAI_HOST_DEVICE ComputedTable1D& operator=(const ComputedTable1D &other) = delete; +} ; + +class YofXfromRTTable1D : public ComputedTable1D { + public: + CHAI_HOST_DEVICE YofXfromRTTable1D(const char* id, Table1D const * f, + real8 theta_low, real8 theta_high) ; + + CHAI_HOST_DEVICE virtual ~YofXfromRTTable1D() ; + + inline int GetNumStrings() const override { return 1; } + + private: + CHAI_HOST_DEVICE real8 innerEvaluate(real8 x) const override; + + CHAI_HOST_DEVICE real8 RootFromBaseX(real8 baseX, const real8 *vals) const override; + + CHAI_HOST_DEVICE YofXfromRTTable1D() = delete; + CHAI_HOST_DEVICE YofXfromRTTable1D(const YofXfromRTTable1D &other) = delete; + CHAI_HOST_DEVICE YofXfromRTTable1D &operator=(const YofXfromRTTable1D &other) = delete; +} ; + +class RofTfromXYTable1D : public ComputedTable1D { + public: + CHAI_HOST_DEVICE RofTfromXYTable1D(const char* id, Table1D const * f, + real8 x_low, real8 x_high) ; + + CHAI_HOST_DEVICE virtual ~RofTfromXYTable1D() ; + + inline int GetNumStrings() const override { return 1; } + + private: + CHAI_HOST_DEVICE real8 innerEvaluate(real8 x) const override; + + CHAI_HOST_DEVICE real8 RootFromBaseX(real8 baseX, const real8 *vals) const override; + + CHAI_HOST_DEVICE RofTfromXYTable1D() = delete; + CHAI_HOST_DEVICE RofTfromXYTable1D(const RofTfromXYTable1D &other) = delete; + CHAI_HOST_DEVICE RofTfromXYTable1D &operator=(const RofTfromXYTable1D &other) = delete; +} ; + +CHAI_HOST_DEVICE Table::Table(const char *id) + : + m_id(id) +{ +#ifdef CHAI_DEVICE_COMPILE + printf("Table::Table %p\n", this) ; +#endif +} + +CHAI_HOST_DEVICE Table::~Table() +{ +#ifndef CHAI_DEVICE_COMPILE + if (m_id != nullptr) { + delete[] m_id ; + m_id = nullptr ; + } +#endif +} +CHAI_HOST_DEVICE real8 Table::Compute::BaseXFromNewX(const real8 *xin) const +{ +#ifdef CHAI_DEVICE_COMPILE + printf("Table::Compute::BaseXFromNewX %p\n", this) ; +#endif + RootFromBaseX(0.0, xin) ; + return 0.0 ; +} + +CHAI_HOST_DEVICE int Table::Search(real8 xin, const real8* xvals, int numX) const +{ + int i = 0 ; + while (i < numX - 2) { + if (xin <= xvals[i+1]) { + break ; + } + i++ ; + } + return i ; +} + +CHAI_HOST_DEVICE SimpleTable::SimpleTable(const char* id) + : Table(id) +{ +#ifdef CHAI_DEVICE_COMPILE + printf("SimpleTable::SimpleTable %p\n", this) ; +#endif +} + +CHAI_HOST_DEVICE SimpleTable::~SimpleTable() +{ +} + +CHAI_HOST_DEVICE LinearTable1D::LinearTable1D(const int numX, + const char *id, + const real8 *x, + const real8 *fx) + : DataTable1D(numX, id, x, fx) + , m_x0(new real8[numX-1]) + , m_xd(new real8[numX-1]) + , m_fx0(new real8[numX-1]) + , m_fxd(new real8[numX-1]) +{ + int len = m_numX - 1; + + for (int ix1 = 0 ; ix1 < len ; ++ix1) { + int ix2 = ix1+1 ; + + real8 x1 = GetXAt(ix1) ; + real8 x2 = GetXAt(ix2) ; + real8 fx1 = GetYAt(ix1) ; + real8 fx2 = GetYAt(ix2) ; + real8 delx = x2 - x1 ; + real8 delf = fx2 - fx1 ; + + + if (delx != 0.) { + m_fxd[ix1] = (fx2-fx1)/delx ; + m_fx0[ix1] = (fx1*x2 - fx2*x1)/delx ; + } + else { + m_fx0[ix1] = 0. ; + m_fxd[ix1] = 0. ; + } + + if (delf != 0.) { + m_xd[ix1] = (x2-x1)/delf ; + m_x0[ix1] = (x1*fx2 - x2*fx1)/delf ; + } + else { + m_x0[ix1] = 0. ; + m_xd[ix1] = 0. ; + } + } +} + +CHAI_HOST_DEVICE LinearTable1D::~LinearTable1D() +{ + if (m_numX > 1) { + delete [] m_x0 ; + delete [] m_xd ; + delete [] m_fx0 ; + delete [] m_fxd ; + } +} + +CHAI_HOST_DEVICE real8 LinearTable1D::innerEvaluate(real8 xin) const +{ + int ix1 = SearchX(xin) ; + return m_fx0[ix1] + m_fxd[ix1] * xin ; +} + +CHAI_HOST_DEVICE DerivedTable1D::DerivedTable1D(const char *id) + : Table1D(id) + , Table::Derived() +{ +#ifdef CHAI_DEVICE_COMPILE + printf("DerivedTable1D::DerivedTable1D POINTER %p\n", this) ; +#endif +} + +CHAI_HOST_DEVICE DerivedTable1D::~DerivedTable1D() +{ +} + +CHAI_HOST_DEVICE real8 DerivedTable1D::Evaluate(real8 xin) const +{ +#ifdef CHAI_DEVICE_COMPILE + printf("DerivedTable1D::Evaluate POINTER %p\n", this) ; +#endif + return innerEvaluate(xin) ; +} + +CHAI_HOST_DEVICE Table1D::Table1D(const char* id) + : SimpleTable(id) +{ +#ifdef CHAI_DEVICE_COMPILE + printf("Table1D::Table1D POINTER %p\n", this) ; +#endif +} + +CHAI_HOST_DEVICE Table1D::~Table1D() +{ +} + +CHAI_HOST_DEVICE DataTable1D::DataTable1D(const int numX, + const char *id, + const real8 *x, + const real8 *fx) + : Table1D(id), + Table::Data(), + m_numX((numX == 1) ? 2 : numX), + m_x(new real8[m_numX]), + m_fx(new real8[m_numX]) +{ + for (int i = 0 ; i < m_numX ; ++i) { + m_x[i] = x[i] ; + m_fx[i] = fx[i] ; + } +} + +CHAI_HOST_DEVICE DataTable1D::~DataTable1D() +{ + if (m_numX > 0) { + delete [] m_x ; + delete [] m_fx ; + } +} + +CHAI_HOST_DEVICE real8 DataTable1D::Evaluate(real8 xin) const +{ + return innerEvaluate(xin) ; +} + +CHAI_HOST_DEVICE int DataTable1D::SearchX(real8 xin) const +{ + return Search(xin, m_x, m_numX) ; +} + +CHAI_HOST_DEVICE real8 DataTable1D::GetXAt(int pos) const { + return m_x[pos] ; +} + +CHAI_HOST_DEVICE real8 DataTable1D::GetYAt(int pos) const { + return m_fx[pos] ; +} + +CHAI_HOST StitchTable1D::StitchTable1D(const char* id, + int nt, + Table1D const** tabs, + const real8* bds) + : DerivedTable1D(id) + , m_nTables(nt) + , m_tables(new const Table1D *[nt]) + , m_bds(new real8[nt-1]) +{ + for (int i = 0 ; i < nt ; ++i) { + m_tables[i] = tabs[i] ; + } + + for (int i = 0 ; i < nt-1 ; ++i) { + m_bds[i] = bds[i] ; + } +} + +CHAI_HOST_DEVICE StitchTable1D::StitchTable1D(const char* id, + int nt, + chai::managed_ptr* tabs, + const real8* bds) + : DerivedTable1D(id) + , m_nTables(nt) + , m_tables(new const Table1D *[nt]) + , m_bds(new real8[nt-1]) +{ + for (int i = 0 ; i < nt ; ++i) { + m_tables[i] = tabs[i].get() ; +#ifdef CHAI_DEVICE_COMPILE + printf("StitchTable1D::StitchTable1D POINTER %p i %d m_tables[i] %p\n", this, i, m_tables[i]) ; +#endif + } + + for (int i = 0 ; i < nt-1 ; ++i) { + m_bds[i] = bds[i] ; + } +} + +CHAI_HOST_DEVICE StitchTable1D::~StitchTable1D() +{ + if (m_nTables > 0) { + delete [] m_tables ; + } + + if (m_nTables > 1) { + delete [] m_bds ; + } +} + +CHAI_HOST_DEVICE real8 StitchTable1D::innerEvaluate(real8 xin) const +{ + real8 xv = xin ; + int i=0 ; + while ( (i < m_nTables-1) && (xv >= m_bds[i]) ) { + i++ ; + } +#ifdef CHAI_DEVICE_COMPILE + printf("StitchTable1D::innerEvaluate POINTER %p i %d m_tables[i] %p\n", this, i, m_tables[i]) ; +#endif + return m_tables[i]->Evaluate(xv) ; +} + +CHAI_HOST_DEVICE ComputedTable1D:: +ComputedTable1D(const char* id, const Table1D * f, real8 min, real8 max) + : DerivedTable1D(id), Table::Compute(), + m_table(f) +{ +#ifdef CHAI_DEVICE_COMPILE + printf("ComputedTable1D::ComputedTable1D POINTER %p m_table %p\n", this, m_table) ; +#endif +} + +CHAI_HOST_DEVICE ComputedTable1D::~ComputedTable1D() +{ +} + +CHAI_HOST_DEVICE YofXfromRTTable1D::YofXfromRTTable1D(const char* id, Table1D const * f, + real8 xlow, + real8 xhigh) + : ComputedTable1D(id, f, xlow, xhigh) +{ +#ifdef CHAI_DEVICE_COMPILE + printf("YofXfromRTTable1D::YofXfromRTTable1D POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; +#endif + real8 r_min = m_table->Evaluate(xlow) ; +} + +CHAI_HOST_DEVICE YofXfromRTTable1D::~YofXfromRTTable1D() +{ +} + +CHAI_HOST_DEVICE real8 YofXfromRTTable1D::RootFromBaseX(real8 t, const real8 *vals) const +{ +#ifdef CHAI_DEVICE_COMPILE + printf("YofXfromRTTable1D::RootFromBaseX POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; +#endif + return m_table->Evaluate(t) ; +} + +CHAI_HOST_DEVICE real8 YofXfromRTTable1D::innerEvaluate(real8 xin) const +{ + real8 xv = xin ; +#ifdef CHAI_DEVICE_COMPILE + printf("YofXfromRTTable1D::innerEvaluate POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; +#endif + real8 t = BaseXFromNewX(&xv) ; + return t ; +} + +CHAI_HOST_DEVICE RofTfromXYTable1D::RofTfromXYTable1D(const char* id, Table1D const * f, + real8 xlow, + real8 xhigh) + : ComputedTable1D(id, f, xlow, xhigh) + +{ +#ifdef CHAI_DEVICE_COMPILE + printf("RofTfromXY::RofTfromXYTable1D POINTER %p m_table %p\n", this, m_table) ; +#endif + + m_table->Evaluate(xlow) ; +} + +CHAI_HOST_DEVICE RofTfromXYTable1D::~RofTfromXYTable1D() +{ +} + +CHAI_HOST_DEVICE real8 RofTfromXYTable1D::RootFromBaseX(real8 xnew, const real8 *vals) const +{ + return m_table->Evaluate(xnew) ; +} + +CHAI_HOST_DEVICE real8 RofTfromXYTable1D::innerEvaluate(real8 xin) const +{ + real8 tv = xin ; + real8 x = BaseXFromNewX(&tv) ; + return x ; +} + +int main(int, char**) { + chai::managed_ptr tabArray[6] ; + { + chai::ManagedArray x(2) ; + chai::ManagedArray fx(2) ; + real8 *x_host = x.data() ; + real8 *fx_host = fx.data() ; + x_host[0] = 0.0 ; + x_host[1] = 180.0 ; + fx_host[0] = 4.0 ; + fx_host[1] = 4.0 ; + + tabArray[0] = chai::make_managed(2, "ul1_rt", chai::unpack(x), chai::unpack(fx)); + x.free() ; + fx.free() ; + } + { + const char * id = "mesh_ul1_rt_up" ; + real8 bp[2] = { 90.0, 180.0 } ; + + chai::managed_ptr tabArray_0 = tabArray[0]; + + tabArray[1] = chai::make_managed(id, chai::unpack(tabArray_0), bp[0], bp[1]) ; + } + { + chai::ManagedArray x(2) ; + chai::ManagedArray fx(2) ; + real8 *x_host = x.data() ; + real8 *fx_host = fx.data() ; + x_host[0] = -20.0 ; + x_host[1] = 20.0 ; + fx_host[0] = 4.0 ; + fx_host[1] = 4.0 ; + + tabArray[2] = chai::make_managed(2, "ul1_yx", chai::unpack(x), chai::unpack(fx)); + x.free() ; + fx.free() ; + } + { + const char * id = "mesh_ul1_up" ; + + chai::ManagedArray > host_device_temp(2) ; + chai::managed_ptr *host_temp = host_device_temp.data() ; + host_temp[0] = tabArray[1] ; + host_temp[1] = tabArray[2] ; + + chai::ManagedArray host_device_bp(1) ; + real8 *host_bp = host_device_bp.data() ; + host_bp[0] = 2.449293593598294706e-16 ; + + tabArray[3] = chai::make_managed(id, 2, chai::unpack(host_device_temp), chai::unpack(host_device_bp)) ; + host_device_temp.free() ; + host_device_bp.free() ; + } + { + chai::ManagedArray x(2) ; + chai::ManagedArray fx(2) ; + real8 *x_host = x.data() ; + real8 *fx_host = fx.data() ; + x_host[0] = 2.5 ; + x_host[1] = 4.0 ; + fx_host[0] = 3.17999364001908 ; + fx_host[1] = 5.0879898240305277 ; + + tabArray[4] = chai::make_managed(2, "mesh_cut_up_right_center_1", chai::unpack(x), chai::unpack(fx)); + x.free() ; + fx.free() ; + } + { + const char * id = "mesh_ul1_up_right_1" ; + + chai::ManagedArray > host_device_temp(2) ; + chai::managed_ptr *host_temp = host_device_temp.data() ; + host_temp[0] = tabArray[3] ; + host_temp[1] = tabArray[4] ; + + chai::ManagedArray host_device_bp(1) ; + real8 *host_bp = host_device_bp.data() ; + host_bp[0] = 2.5 ; + + tabArray[5] = chai::make_managed(id, 2, chai::unpack(host_device_temp), chai::unpack(host_device_bp)) ; + + host_device_bp.free() ; + host_device_temp.free() ; + } + { + const char * id = "mesh_cut_up_right_1_rt" ; + real8 bp[2] = { 0.0, 20.0 } ; + chai::managed_ptr tabArray_0 = tabArray[5]; + + chai::make_managed(id, chai::unpack(tabArray_0), bp[0], bp[1]) ; + } + + printf("SUCCESS\n") ; + return 0; +} + From d6a6e5346ecb3751b5db3aae1a02cc79f60cfa11 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Wed, 11 Sep 2024 14:12:08 -0700 Subject: [PATCH 03/16] Inline some stuff --- ...ed_ptr_multiple_inheritance_reproducer.cpp | 39 ++++--------------- 1 file changed, 8 insertions(+), 31 deletions(-) diff --git a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp index 6730e4d8..1fe45b75 100644 --- a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp +++ b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp @@ -92,7 +92,7 @@ class SimpleTable : public Table { public: CHAI_HOST_DEVICE SimpleTable(const char* id); - CHAI_HOST_DEVICE virtual ~SimpleTable(); + CHAI_HOST_DEVICE virtual ~SimpleTable() {} private: SimpleTable(); @@ -106,7 +106,7 @@ class Table1D : public SimpleTable { public: CHAI_HOST_DEVICE Table1D(const char* id) ; - CHAI_HOST_DEVICE virtual ~Table1D() ; + CHAI_HOST_DEVICE virtual ~Table1D() {} CHAI_HOST_DEVICE virtual real8 Evaluate(real8 xin) const = 0 ; @@ -126,8 +126,6 @@ class DataTable1D : public Table1D, public Table::Data { const real8 *x, const real8 *fx) ; - CHAI_HOST_DEVICE DataTable1D(const char *id, real8 value) ; - CHAI_HOST_DEVICE virtual ~DataTable1D(); CHAI_HOST_DEVICE real8 Evaluate(real8 xin) const override; @@ -177,7 +175,7 @@ class DerivedTable1D : public Table1D, public Table::Data, public Table::Derive public: CHAI_HOST_DEVICE DerivedTable1D(const char *id) ; - CHAI_HOST_DEVICE virtual ~DerivedTable1D() ; + CHAI_HOST_DEVICE virtual ~DerivedTable1D() {} CHAI_HOST_DEVICE real8 Evaluate(real8 xin) const override; @@ -226,7 +224,7 @@ class ComputedTable1D : public DerivedTable1D, public Table::Compute { CHAI_HOST_DEVICE ComputedTable1D(const char* id, const Table1D * table, real8 lb, real8 ub); - CHAI_HOST_DEVICE virtual ~ComputedTable1D() ; + CHAI_HOST_DEVICE virtual ~ComputedTable1D() {} protected: const Table1D *m_table; @@ -242,7 +240,7 @@ class YofXfromRTTable1D : public ComputedTable1D { CHAI_HOST_DEVICE YofXfromRTTable1D(const char* id, Table1D const * f, real8 theta_low, real8 theta_high) ; - CHAI_HOST_DEVICE virtual ~YofXfromRTTable1D() ; + CHAI_HOST_DEVICE virtual ~YofXfromRTTable1D() {} inline int GetNumStrings() const override { return 1; } @@ -261,7 +259,7 @@ class RofTfromXYTable1D : public ComputedTable1D { CHAI_HOST_DEVICE RofTfromXYTable1D(const char* id, Table1D const * f, real8 x_low, real8 x_high) ; - CHAI_HOST_DEVICE virtual ~RofTfromXYTable1D() ; + CHAI_HOST_DEVICE virtual ~RofTfromXYTable1D() {} inline int GetNumStrings() const override { return 1; } @@ -293,6 +291,7 @@ CHAI_HOST_DEVICE Table::~Table() } #endif } + CHAI_HOST_DEVICE real8 Table::Compute::BaseXFromNewX(const real8 *xin) const { #ifdef CHAI_DEVICE_COMPILE @@ -322,10 +321,6 @@ CHAI_HOST_DEVICE SimpleTable::SimpleTable(const char* id) #endif } -CHAI_HOST_DEVICE SimpleTable::~SimpleTable() -{ -} - CHAI_HOST_DEVICE LinearTable1D::LinearTable1D(const int numX, const char *id, const real8 *x, @@ -387,6 +382,7 @@ CHAI_HOST_DEVICE real8 LinearTable1D::innerEvaluate(real8 xin) const CHAI_HOST_DEVICE DerivedTable1D::DerivedTable1D(const char *id) : Table1D(id) + , Table::Data() , Table::Derived() { #ifdef CHAI_DEVICE_COMPILE @@ -394,10 +390,6 @@ CHAI_HOST_DEVICE DerivedTable1D::DerivedTable1D(const char *id) #endif } -CHAI_HOST_DEVICE DerivedTable1D::~DerivedTable1D() -{ -} - CHAI_HOST_DEVICE real8 DerivedTable1D::Evaluate(real8 xin) const { #ifdef CHAI_DEVICE_COMPILE @@ -414,10 +406,6 @@ CHAI_HOST_DEVICE Table1D::Table1D(const char* id) #endif } -CHAI_HOST_DEVICE Table1D::~Table1D() -{ -} - CHAI_HOST_DEVICE DataTable1D::DataTable1D(const int numX, const char *id, const real8 *x, @@ -533,10 +521,6 @@ ComputedTable1D(const char* id, const Table1D * f, real8 min, real8 max) #endif } -CHAI_HOST_DEVICE ComputedTable1D::~ComputedTable1D() -{ -} - CHAI_HOST_DEVICE YofXfromRTTable1D::YofXfromRTTable1D(const char* id, Table1D const * f, real8 xlow, real8 xhigh) @@ -548,10 +532,6 @@ CHAI_HOST_DEVICE YofXfromRTTable1D::YofXfromRTTable1D(const char* id, Table1D co real8 r_min = m_table->Evaluate(xlow) ; } -CHAI_HOST_DEVICE YofXfromRTTable1D::~YofXfromRTTable1D() -{ -} - CHAI_HOST_DEVICE real8 YofXfromRTTable1D::RootFromBaseX(real8 t, const real8 *vals) const { #ifdef CHAI_DEVICE_COMPILE @@ -583,9 +563,6 @@ CHAI_HOST_DEVICE RofTfromXYTable1D::RofTfromXYTable1D(const char* id, Table1D co m_table->Evaluate(xlow) ; } -CHAI_HOST_DEVICE RofTfromXYTable1D::~RofTfromXYTable1D() -{ -} CHAI_HOST_DEVICE real8 RofTfromXYTable1D::RootFromBaseX(real8 xnew, const real8 *vals) const { From a3c97407f805053fd717d7c5de27d9d83f44d7f6 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Wed, 11 Sep 2024 14:27:19 -0700 Subject: [PATCH 04/16] Add optional virtual (still crashes) --- ...ed_ptr_multiple_inheritance_reproducer.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp index 1fe45b75..2680e239 100644 --- a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp +++ b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp @@ -128,7 +128,7 @@ class DataTable1D : public Table1D, public Table::Data { CHAI_HOST_DEVICE virtual ~DataTable1D(); - CHAI_HOST_DEVICE real8 Evaluate(real8 xin) const override; + CHAI_HOST_DEVICE virtual real8 Evaluate(real8 xin) const override; using Table1D::Evaluate ; @@ -157,7 +157,7 @@ class LinearTable1D : public DataTable1D { CHAI_HOST_DEVICE virtual ~LinearTable1D() ; - CHAI_HOST_DEVICE real8 innerEvaluate(real8 x) const override; + CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const override; private: CHAI_HOST_DEVICE LinearTable1D() = delete; @@ -177,7 +177,7 @@ class DerivedTable1D : public Table1D, public Table::Data, public Table::Derive CHAI_HOST_DEVICE virtual ~DerivedTable1D() {} - CHAI_HOST_DEVICE real8 Evaluate(real8 xin) const override; + CHAI_HOST_DEVICE virtual real8 Evaluate(real8 xin) const override; virtual int GetNumStrings() const override = 0; @@ -205,7 +205,7 @@ class StitchTable1D : public DerivedTable1D { CHAI_HOST_DEVICE virtual ~StitchTable1D() ; - inline int GetNumStrings() const override { return m_nTables; } + inline virtual int GetNumStrings() const override { return m_nTables; } private: CHAI_HOST_DEVICE real8 innerEvaluate(real8 x) const override; @@ -242,12 +242,12 @@ class YofXfromRTTable1D : public ComputedTable1D { CHAI_HOST_DEVICE virtual ~YofXfromRTTable1D() {} - inline int GetNumStrings() const override { return 1; } + inline int virtual GetNumStrings() const override { return 1; } private: - CHAI_HOST_DEVICE real8 innerEvaluate(real8 x) const override; + CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const override; - CHAI_HOST_DEVICE real8 RootFromBaseX(real8 baseX, const real8 *vals) const override; + CHAI_HOST_DEVICE virtual real8 RootFromBaseX(real8 baseX, const real8 *vals) const override; CHAI_HOST_DEVICE YofXfromRTTable1D() = delete; CHAI_HOST_DEVICE YofXfromRTTable1D(const YofXfromRTTable1D &other) = delete; @@ -261,12 +261,12 @@ class RofTfromXYTable1D : public ComputedTable1D { CHAI_HOST_DEVICE virtual ~RofTfromXYTable1D() {} - inline int GetNumStrings() const override { return 1; } + inline int virtual GetNumStrings() const override { return 1; } private: - CHAI_HOST_DEVICE real8 innerEvaluate(real8 x) const override; + CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const override; - CHAI_HOST_DEVICE real8 RootFromBaseX(real8 baseX, const real8 *vals) const override; + CHAI_HOST_DEVICE virtual real8 RootFromBaseX(real8 baseX, const real8 *vals) const override; CHAI_HOST_DEVICE RofTfromXYTable1D() = delete; CHAI_HOST_DEVICE RofTfromXYTable1D(const RofTfromXYTable1D &other) = delete; From 0b4f211c532326ac4f659c6615e34c15b2e34046 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Wed, 11 Sep 2024 14:54:14 -0700 Subject: [PATCH 05/16] Minor refactoring --- ...ed_ptr_multiple_inheritance_reproducer.cpp | 177 +++++------------- 1 file changed, 52 insertions(+), 125 deletions(-) diff --git a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp index 2680e239..76d60964 100644 --- a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp +++ b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp @@ -22,15 +22,19 @@ class Table1D ; class Table { public: - CHAI_HOST_DEVICE Table(const char *id) ; + CHAI_HOST_DEVICE Table() { +#ifdef CHAI_DEVICE_COMPILE + printf("Table::Table POINTER %p\n", this) ; +#endif + } - CHAI_HOST_DEVICE virtual ~Table() ; + CHAI_HOST_DEVICE virtual ~Table() {} class Data { public: CHAI_HOST_DEVICE Data() { #ifdef CHAI_DEVICE_COMPILE - printf("Table::Data::Data %p\n", this) ; + printf("Table::Data::Data POINTER %p\n", this) ; #endif } @@ -43,7 +47,7 @@ class Table { public: CHAI_HOST_DEVICE Derived() { #ifdef CHAI_DEVICE_COMPILE - printf("Table::Derived::Derived %p\n", this) ; + printf("Table::Derived::Derived POINTER %p\n", this) ; #endif } @@ -57,7 +61,7 @@ class Table { public: CHAI_HOST_DEVICE Compute() { #ifdef CHAI_DEVICE_COMPILE - printf("Table::Compute::Compute %p\n", this) ; + printf("Table::Compute::Compute POINTER %p\n", this) ; #endif } @@ -79,10 +83,6 @@ class Table { private: - const char *m_id ; - - Table() ; - Table(const Table &other); Table& operator =(const Table&); @@ -90,13 +90,16 @@ class Table { class SimpleTable : public Table { public: - CHAI_HOST_DEVICE SimpleTable(const char* id); + CHAI_HOST_DEVICE SimpleTable() : Table() { +#ifdef CHAI_DEVICE_COMPILE + printf("SimpleTable::SimpleTable POINTER %p\n", this) ; +#endif + } + CHAI_HOST_DEVICE virtual ~SimpleTable() {} private: - SimpleTable(); - SimpleTable(const SimpleTable& other); SimpleTable& operator =(const SimpleTable&); @@ -104,16 +107,17 @@ class SimpleTable : public Table { class Table1D : public SimpleTable { public: - CHAI_HOST_DEVICE Table1D(const char* id) ; + CHAI_HOST_DEVICE Table1D() : SimpleTable() { +#ifdef CHAI_DEVICE_COMPILE + printf("Table1D::Table1D POINTER %p\n", this) ; +#endif + } CHAI_HOST_DEVICE virtual ~Table1D() {} CHAI_HOST_DEVICE virtual real8 Evaluate(real8 xin) const = 0 ; protected: - - CHAI_HOST_DEVICE Table1D() = delete; - CHAI_HOST_DEVICE Table1D(const Table1D &other) = delete; CHAI_HOST_DEVICE Table1D& operator=(const Table1D &other) = delete; @@ -121,10 +125,7 @@ class Table1D : public SimpleTable { class DataTable1D : public Table1D, public Table::Data { public: - CHAI_HOST_DEVICE DataTable1D(const int numX, - const char *id, - const real8 *x, - const real8 *fx) ; + CHAI_HOST_DEVICE DataTable1D(const int numX, const real8 *x, const real8 *fx) ; CHAI_HOST_DEVICE virtual ~DataTable1D(); @@ -150,10 +151,7 @@ class DataTable1D : public Table1D, public Table::Data { class LinearTable1D : public DataTable1D { public: - CHAI_HOST_DEVICE LinearTable1D(const int numX, - const char *id, - const real8 *x, - const real8 *fx) ; + CHAI_HOST_DEVICE LinearTable1D(const int numX, const real8 *x, const real8 *fx) ; CHAI_HOST_DEVICE virtual ~LinearTable1D() ; @@ -173,7 +171,11 @@ class LinearTable1D : public DataTable1D { class DerivedTable1D : public Table1D, public Table::Data, public Table::Derived { public: - CHAI_HOST_DEVICE DerivedTable1D(const char *id) ; + CHAI_HOST_DEVICE DerivedTable1D() : Table1D(), Table::Data(), Table::Derived() { +#ifdef CHAI_DEVICE_COMPILE + printf("DerivedTable1D::DerivedTable1D POINTER %p\n", this) ; +#endif + } CHAI_HOST_DEVICE virtual ~DerivedTable1D() {} @@ -186,22 +188,15 @@ class DerivedTable1D : public Table1D, public Table::Data, public Table::Derive CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const = 0 ; private: - CHAI_HOST_DEVICE DerivedTable1D() = delete; CHAI_HOST_DEVICE DerivedTable1D(const DerivedTable1D &other) = delete; CHAI_HOST_DEVICE DerivedTable1D &operator=(const DerivedTable1D &other) = delete; } ; class StitchTable1D : public DerivedTable1D { public: - CHAI_HOST StitchTable1D(const char* id, - int nt, - Table1D const** tabs, - const real8* bds) ; + CHAI_HOST StitchTable1D(int nt, Table1D const** tabs, const real8* bds) ; - CHAI_HOST_DEVICE StitchTable1D(const char* id, - int nt, - chai::managed_ptr* tabs, - const real8* bds) ; + CHAI_HOST_DEVICE StitchTable1D(int nt, chai::managed_ptr* tabs, const real8* bds) ; CHAI_HOST_DEVICE virtual ~StitchTable1D() ; @@ -221,8 +216,7 @@ class StitchTable1D : public DerivedTable1D { class ComputedTable1D : public DerivedTable1D, public Table::Compute { public: - CHAI_HOST_DEVICE ComputedTable1D(const char* id, const Table1D * table, - real8 lb, real8 ub); + CHAI_HOST_DEVICE ComputedTable1D(const Table1D * table, real8 lb, real8 ub); CHAI_HOST_DEVICE virtual ~ComputedTable1D() {} @@ -237,8 +231,7 @@ class ComputedTable1D : public DerivedTable1D, public Table::Compute { class YofXfromRTTable1D : public ComputedTable1D { public: - CHAI_HOST_DEVICE YofXfromRTTable1D(const char* id, Table1D const * f, - real8 theta_low, real8 theta_high) ; + CHAI_HOST_DEVICE YofXfromRTTable1D(Table1D const * f, real8 theta_low, real8 theta_high) ; CHAI_HOST_DEVICE virtual ~YofXfromRTTable1D() {} @@ -256,8 +249,7 @@ class YofXfromRTTable1D : public ComputedTable1D { class RofTfromXYTable1D : public ComputedTable1D { public: - CHAI_HOST_DEVICE RofTfromXYTable1D(const char* id, Table1D const * f, - real8 x_low, real8 x_high) ; + CHAI_HOST_DEVICE RofTfromXYTable1D(Table1D const * f, real8 x_low, real8 x_high) ; CHAI_HOST_DEVICE virtual ~RofTfromXYTable1D() {} @@ -273,25 +265,6 @@ class RofTfromXYTable1D : public ComputedTable1D { CHAI_HOST_DEVICE RofTfromXYTable1D &operator=(const RofTfromXYTable1D &other) = delete; } ; -CHAI_HOST_DEVICE Table::Table(const char *id) - : - m_id(id) -{ -#ifdef CHAI_DEVICE_COMPILE - printf("Table::Table %p\n", this) ; -#endif -} - -CHAI_HOST_DEVICE Table::~Table() -{ -#ifndef CHAI_DEVICE_COMPILE - if (m_id != nullptr) { - delete[] m_id ; - m_id = nullptr ; - } -#endif -} - CHAI_HOST_DEVICE real8 Table::Compute::BaseXFromNewX(const real8 *xin) const { #ifdef CHAI_DEVICE_COMPILE @@ -313,19 +286,8 @@ CHAI_HOST_DEVICE int Table::Search(real8 xin, const real8* xvals, int numX) cons return i ; } -CHAI_HOST_DEVICE SimpleTable::SimpleTable(const char* id) - : Table(id) -{ -#ifdef CHAI_DEVICE_COMPILE - printf("SimpleTable::SimpleTable %p\n", this) ; -#endif -} - -CHAI_HOST_DEVICE LinearTable1D::LinearTable1D(const int numX, - const char *id, - const real8 *x, - const real8 *fx) - : DataTable1D(numX, id, x, fx) +CHAI_HOST_DEVICE LinearTable1D::LinearTable1D(const int numX, const real8 *x, const real8 *fx) + : DataTable1D(numX, x, fx) , m_x0(new real8[numX-1]) , m_xd(new real8[numX-1]) , m_fx0(new real8[numX-1]) @@ -380,16 +342,6 @@ CHAI_HOST_DEVICE real8 LinearTable1D::innerEvaluate(real8 xin) const return m_fx0[ix1] + m_fxd[ix1] * xin ; } -CHAI_HOST_DEVICE DerivedTable1D::DerivedTable1D(const char *id) - : Table1D(id) - , Table::Data() - , Table::Derived() -{ -#ifdef CHAI_DEVICE_COMPILE - printf("DerivedTable1D::DerivedTable1D POINTER %p\n", this) ; -#endif -} - CHAI_HOST_DEVICE real8 DerivedTable1D::Evaluate(real8 xin) const { #ifdef CHAI_DEVICE_COMPILE @@ -398,19 +350,10 @@ CHAI_HOST_DEVICE real8 DerivedTable1D::Evaluate(real8 xin) const return innerEvaluate(xin) ; } -CHAI_HOST_DEVICE Table1D::Table1D(const char* id) - : SimpleTable(id) -{ -#ifdef CHAI_DEVICE_COMPILE - printf("Table1D::Table1D POINTER %p\n", this) ; -#endif -} - CHAI_HOST_DEVICE DataTable1D::DataTable1D(const int numX, - const char *id, const real8 *x, const real8 *fx) - : Table1D(id), + : Table1D(), Table::Data(), m_numX((numX == 1) ? 2 : numX), m_x(new real8[m_numX]), @@ -448,11 +391,8 @@ CHAI_HOST_DEVICE real8 DataTable1D::GetYAt(int pos) const { return m_fx[pos] ; } -CHAI_HOST StitchTable1D::StitchTable1D(const char* id, - int nt, - Table1D const** tabs, - const real8* bds) - : DerivedTable1D(id) +CHAI_HOST StitchTable1D::StitchTable1D(int nt, Table1D const** tabs, const real8* bds) + : DerivedTable1D() , m_nTables(nt) , m_tables(new const Table1D *[nt]) , m_bds(new real8[nt-1]) @@ -466,11 +406,8 @@ CHAI_HOST StitchTable1D::StitchTable1D(const char* id, } } -CHAI_HOST_DEVICE StitchTable1D::StitchTable1D(const char* id, - int nt, - chai::managed_ptr* tabs, - const real8* bds) - : DerivedTable1D(id) +CHAI_HOST_DEVICE StitchTable1D::StitchTable1D(int nt, chai::managed_ptr* tabs, const real8* bds) + : DerivedTable1D() , m_nTables(nt) , m_tables(new const Table1D *[nt]) , m_bds(new real8[nt-1]) @@ -512,8 +449,8 @@ CHAI_HOST_DEVICE real8 StitchTable1D::innerEvaluate(real8 xin) const } CHAI_HOST_DEVICE ComputedTable1D:: -ComputedTable1D(const char* id, const Table1D * f, real8 min, real8 max) - : DerivedTable1D(id), Table::Compute(), +ComputedTable1D(const Table1D * f, real8 min, real8 max) + : DerivedTable1D(), Table::Compute(), m_table(f) { #ifdef CHAI_DEVICE_COMPILE @@ -521,10 +458,8 @@ ComputedTable1D(const char* id, const Table1D * f, real8 min, real8 max) #endif } -CHAI_HOST_DEVICE YofXfromRTTable1D::YofXfromRTTable1D(const char* id, Table1D const * f, - real8 xlow, - real8 xhigh) - : ComputedTable1D(id, f, xlow, xhigh) +CHAI_HOST_DEVICE YofXfromRTTable1D::YofXfromRTTable1D(Table1D const * f, real8 xlow, real8 xhigh) + : ComputedTable1D(f, xlow, xhigh) { #ifdef CHAI_DEVICE_COMPILE printf("YofXfromRTTable1D::YofXfromRTTable1D POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; @@ -550,10 +485,8 @@ CHAI_HOST_DEVICE real8 YofXfromRTTable1D::innerEvaluate(real8 xin) const return t ; } -CHAI_HOST_DEVICE RofTfromXYTable1D::RofTfromXYTable1D(const char* id, Table1D const * f, - real8 xlow, - real8 xhigh) - : ComputedTable1D(id, f, xlow, xhigh) +CHAI_HOST_DEVICE RofTfromXYTable1D::RofTfromXYTable1D(Table1D const * f, real8 xlow, real8 xhigh) + : ComputedTable1D(f, xlow, xhigh) { #ifdef CHAI_DEVICE_COMPILE @@ -588,17 +521,16 @@ int main(int, char**) { fx_host[0] = 4.0 ; fx_host[1] = 4.0 ; - tabArray[0] = chai::make_managed(2, "ul1_rt", chai::unpack(x), chai::unpack(fx)); + tabArray[0] = chai::make_managed(2, chai::unpack(x), chai::unpack(fx)); x.free() ; fx.free() ; } { - const char * id = "mesh_ul1_rt_up" ; real8 bp[2] = { 90.0, 180.0 } ; chai::managed_ptr tabArray_0 = tabArray[0]; - tabArray[1] = chai::make_managed(id, chai::unpack(tabArray_0), bp[0], bp[1]) ; + tabArray[1] = chai::make_managed(chai::unpack(tabArray_0), bp[0], bp[1]) ; } { chai::ManagedArray x(2) ; @@ -610,13 +542,11 @@ int main(int, char**) { fx_host[0] = 4.0 ; fx_host[1] = 4.0 ; - tabArray[2] = chai::make_managed(2, "ul1_yx", chai::unpack(x), chai::unpack(fx)); + tabArray[2] = chai::make_managed(2, chai::unpack(x), chai::unpack(fx)); x.free() ; fx.free() ; } { - const char * id = "mesh_ul1_up" ; - chai::ManagedArray > host_device_temp(2) ; chai::managed_ptr *host_temp = host_device_temp.data() ; host_temp[0] = tabArray[1] ; @@ -626,7 +556,7 @@ int main(int, char**) { real8 *host_bp = host_device_bp.data() ; host_bp[0] = 2.449293593598294706e-16 ; - tabArray[3] = chai::make_managed(id, 2, chai::unpack(host_device_temp), chai::unpack(host_device_bp)) ; + tabArray[3] = chai::make_managed(2, chai::unpack(host_device_temp), chai::unpack(host_device_bp)) ; host_device_temp.free() ; host_device_bp.free() ; } @@ -640,13 +570,11 @@ int main(int, char**) { fx_host[0] = 3.17999364001908 ; fx_host[1] = 5.0879898240305277 ; - tabArray[4] = chai::make_managed(2, "mesh_cut_up_right_center_1", chai::unpack(x), chai::unpack(fx)); + tabArray[4] = chai::make_managed(2, chai::unpack(x), chai::unpack(fx)); x.free() ; fx.free() ; } { - const char * id = "mesh_ul1_up_right_1" ; - chai::ManagedArray > host_device_temp(2) ; chai::managed_ptr *host_temp = host_device_temp.data() ; host_temp[0] = tabArray[3] ; @@ -656,17 +584,16 @@ int main(int, char**) { real8 *host_bp = host_device_bp.data() ; host_bp[0] = 2.5 ; - tabArray[5] = chai::make_managed(id, 2, chai::unpack(host_device_temp), chai::unpack(host_device_bp)) ; + tabArray[5] = chai::make_managed(2, chai::unpack(host_device_temp), chai::unpack(host_device_bp)) ; host_device_bp.free() ; host_device_temp.free() ; } { - const char * id = "mesh_cut_up_right_1_rt" ; real8 bp[2] = { 0.0, 20.0 } ; chai::managed_ptr tabArray_0 = tabArray[5]; - chai::make_managed(id, chai::unpack(tabArray_0), bp[0], bp[1]) ; + chai::make_managed(chai::unpack(tabArray_0), bp[0], bp[1]) ; } printf("SUCCESS\n") ; From 095e82997593fc9a34878a090bfb1f8913a84344 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Wed, 11 Sep 2024 15:54:31 -0700 Subject: [PATCH 06/16] Checkpoint for updating rocm --- ...ed_ptr_multiple_inheritance_reproducer.cpp | 208 +++--------------- 1 file changed, 35 insertions(+), 173 deletions(-) diff --git a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp index 76d60964..2ffa7fcd 100644 --- a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp +++ b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp @@ -69,9 +69,9 @@ class Table { protected: - CHAI_HOST_DEVICE real8 BaseXFromNewX(const real8 *newX) const ; + CHAI_HOST_DEVICE real8 BaseXFromNewX() const ; - CHAI_HOST_DEVICE virtual real8 RootFromBaseX(real8 baseX, const real8 *vals) const = 0; + CHAI_HOST_DEVICE virtual real8 RootFromBaseX() const = 0; private: Compute(const Compute &other); @@ -125,47 +125,29 @@ class Table1D : public SimpleTable { class DataTable1D : public Table1D, public Table::Data { public: - CHAI_HOST_DEVICE DataTable1D(const int numX, const real8 *x, const real8 *fx) ; + CHAI_HOST_DEVICE DataTable1D() : Table1D(), Table::Data() {} - CHAI_HOST_DEVICE virtual ~DataTable1D(); + CHAI_HOST_DEVICE virtual ~DataTable1D() {} CHAI_HOST_DEVICE virtual real8 Evaluate(real8 xin) const override; using Table1D::Evaluate ; - CHAI_HOST_DEVICE real8 GetXAt(int pos) const; - - CHAI_HOST_DEVICE real8 GetYAt(int pos) const; - protected: CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const = 0 ; - - CHAI_HOST_DEVICE int SearchX(real8 xin) const ; - - const int m_numX ; - - real8 *m_x ; - - real8 *m_fx ; } ; class LinearTable1D : public DataTable1D { public: - CHAI_HOST_DEVICE LinearTable1D(const int numX, const real8 *x, const real8 *fx) ; + CHAI_HOST_DEVICE LinearTable1D() : DataTable1D() {} - CHAI_HOST_DEVICE virtual ~LinearTable1D() ; + CHAI_HOST_DEVICE virtual ~LinearTable1D() {} CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const override; private: - CHAI_HOST_DEVICE LinearTable1D() = delete; CHAI_HOST_DEVICE LinearTable1D(const LinearTable1D &other) = delete; CHAI_HOST_DEVICE LinearTable1D &operator=(const LinearTable1D &other) = delete; - - real8 *m_x0 ; - real8 *m_xd ; - real8 *m_fx0 ; - real8 *m_fxd ; } ; @@ -194,8 +176,6 @@ class DerivedTable1D : public Table1D, public Table::Data, public Table::Derive class StitchTable1D : public DerivedTable1D { public: - CHAI_HOST StitchTable1D(int nt, Table1D const** tabs, const real8* bds) ; - CHAI_HOST_DEVICE StitchTable1D(int nt, chai::managed_ptr* tabs, const real8* bds) ; CHAI_HOST_DEVICE virtual ~StitchTable1D() ; @@ -216,7 +196,7 @@ class StitchTable1D : public DerivedTable1D { class ComputedTable1D : public DerivedTable1D, public Table::Compute { public: - CHAI_HOST_DEVICE ComputedTable1D(const Table1D * table, real8 lb, real8 ub); + CHAI_HOST_DEVICE ComputedTable1D(const Table1D * table); CHAI_HOST_DEVICE virtual ~ComputedTable1D() {} @@ -231,7 +211,7 @@ class ComputedTable1D : public DerivedTable1D, public Table::Compute { class YofXfromRTTable1D : public ComputedTable1D { public: - CHAI_HOST_DEVICE YofXfromRTTable1D(Table1D const * f, real8 theta_low, real8 theta_high) ; + CHAI_HOST_DEVICE YofXfromRTTable1D(Table1D const * f) ; CHAI_HOST_DEVICE virtual ~YofXfromRTTable1D() {} @@ -240,7 +220,7 @@ class YofXfromRTTable1D : public ComputedTable1D { private: CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const override; - CHAI_HOST_DEVICE virtual real8 RootFromBaseX(real8 baseX, const real8 *vals) const override; + CHAI_HOST_DEVICE virtual real8 RootFromBaseX() const override; CHAI_HOST_DEVICE YofXfromRTTable1D() = delete; CHAI_HOST_DEVICE YofXfromRTTable1D(const YofXfromRTTable1D &other) = delete; @@ -249,7 +229,7 @@ class YofXfromRTTable1D : public ComputedTable1D { class RofTfromXYTable1D : public ComputedTable1D { public: - CHAI_HOST_DEVICE RofTfromXYTable1D(Table1D const * f, real8 x_low, real8 x_high) ; + CHAI_HOST_DEVICE RofTfromXYTable1D(Table1D const * f) ; CHAI_HOST_DEVICE virtual ~RofTfromXYTable1D() {} @@ -258,88 +238,25 @@ class RofTfromXYTable1D : public ComputedTable1D { private: CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const override; - CHAI_HOST_DEVICE virtual real8 RootFromBaseX(real8 baseX, const real8 *vals) const override; + CHAI_HOST_DEVICE virtual real8 RootFromBaseX() const override; CHAI_HOST_DEVICE RofTfromXYTable1D() = delete; CHAI_HOST_DEVICE RofTfromXYTable1D(const RofTfromXYTable1D &other) = delete; CHAI_HOST_DEVICE RofTfromXYTable1D &operator=(const RofTfromXYTable1D &other) = delete; } ; -CHAI_HOST_DEVICE real8 Table::Compute::BaseXFromNewX(const real8 *xin) const +CHAI_HOST_DEVICE real8 Table::Compute::BaseXFromNewX() const { #ifdef CHAI_DEVICE_COMPILE printf("Table::Compute::BaseXFromNewX %p\n", this) ; #endif - RootFromBaseX(0.0, xin) ; + RootFromBaseX() ; return 0.0 ; } -CHAI_HOST_DEVICE int Table::Search(real8 xin, const real8* xvals, int numX) const -{ - int i = 0 ; - while (i < numX - 2) { - if (xin <= xvals[i+1]) { - break ; - } - i++ ; - } - return i ; -} - -CHAI_HOST_DEVICE LinearTable1D::LinearTable1D(const int numX, const real8 *x, const real8 *fx) - : DataTable1D(numX, x, fx) - , m_x0(new real8[numX-1]) - , m_xd(new real8[numX-1]) - , m_fx0(new real8[numX-1]) - , m_fxd(new real8[numX-1]) -{ - int len = m_numX - 1; - - for (int ix1 = 0 ; ix1 < len ; ++ix1) { - int ix2 = ix1+1 ; - - real8 x1 = GetXAt(ix1) ; - real8 x2 = GetXAt(ix2) ; - real8 fx1 = GetYAt(ix1) ; - real8 fx2 = GetYAt(ix2) ; - real8 delx = x2 - x1 ; - real8 delf = fx2 - fx1 ; - - - if (delx != 0.) { - m_fxd[ix1] = (fx2-fx1)/delx ; - m_fx0[ix1] = (fx1*x2 - fx2*x1)/delx ; - } - else { - m_fx0[ix1] = 0. ; - m_fxd[ix1] = 0. ; - } - - if (delf != 0.) { - m_xd[ix1] = (x2-x1)/delf ; - m_x0[ix1] = (x1*fx2 - x2*fx1)/delf ; - } - else { - m_x0[ix1] = 0. ; - m_xd[ix1] = 0. ; - } - } -} - -CHAI_HOST_DEVICE LinearTable1D::~LinearTable1D() -{ - if (m_numX > 1) { - delete [] m_x0 ; - delete [] m_xd ; - delete [] m_fx0 ; - delete [] m_fxd ; - } -} - CHAI_HOST_DEVICE real8 LinearTable1D::innerEvaluate(real8 xin) const { - int ix1 = SearchX(xin) ; - return m_fx0[ix1] + m_fxd[ix1] * xin ; + return 0.0 ; } CHAI_HOST_DEVICE real8 DerivedTable1D::Evaluate(real8 xin) const @@ -350,62 +267,11 @@ CHAI_HOST_DEVICE real8 DerivedTable1D::Evaluate(real8 xin) const return innerEvaluate(xin) ; } -CHAI_HOST_DEVICE DataTable1D::DataTable1D(const int numX, - const real8 *x, - const real8 *fx) - : Table1D(), - Table::Data(), - m_numX((numX == 1) ? 2 : numX), - m_x(new real8[m_numX]), - m_fx(new real8[m_numX]) -{ - for (int i = 0 ; i < m_numX ; ++i) { - m_x[i] = x[i] ; - m_fx[i] = fx[i] ; - } -} - -CHAI_HOST_DEVICE DataTable1D::~DataTable1D() -{ - if (m_numX > 0) { - delete [] m_x ; - delete [] m_fx ; - } -} - CHAI_HOST_DEVICE real8 DataTable1D::Evaluate(real8 xin) const { return innerEvaluate(xin) ; } -CHAI_HOST_DEVICE int DataTable1D::SearchX(real8 xin) const -{ - return Search(xin, m_x, m_numX) ; -} - -CHAI_HOST_DEVICE real8 DataTable1D::GetXAt(int pos) const { - return m_x[pos] ; -} - -CHAI_HOST_DEVICE real8 DataTable1D::GetYAt(int pos) const { - return m_fx[pos] ; -} - -CHAI_HOST StitchTable1D::StitchTable1D(int nt, Table1D const** tabs, const real8* bds) - : DerivedTable1D() - , m_nTables(nt) - , m_tables(new const Table1D *[nt]) - , m_bds(new real8[nt-1]) -{ - for (int i = 0 ; i < nt ; ++i) { - m_tables[i] = tabs[i] ; - } - - for (int i = 0 ; i < nt-1 ; ++i) { - m_bds[i] = bds[i] ; - } -} - CHAI_HOST_DEVICE StitchTable1D::StitchTable1D(int nt, chai::managed_ptr* tabs, const real8* bds) : DerivedTable1D() , m_nTables(nt) @@ -449,7 +315,7 @@ CHAI_HOST_DEVICE real8 StitchTable1D::innerEvaluate(real8 xin) const } CHAI_HOST_DEVICE ComputedTable1D:: -ComputedTable1D(const Table1D * f, real8 min, real8 max) +ComputedTable1D(const Table1D * f) : DerivedTable1D(), Table::Compute(), m_table(f) { @@ -458,54 +324,52 @@ ComputedTable1D(const Table1D * f, real8 min, real8 max) #endif } -CHAI_HOST_DEVICE YofXfromRTTable1D::YofXfromRTTable1D(Table1D const * f, real8 xlow, real8 xhigh) - : ComputedTable1D(f, xlow, xhigh) +CHAI_HOST_DEVICE YofXfromRTTable1D::YofXfromRTTable1D(Table1D const * f) + : ComputedTable1D(f) { #ifdef CHAI_DEVICE_COMPILE printf("YofXfromRTTable1D::YofXfromRTTable1D POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; #endif - real8 r_min = m_table->Evaluate(xlow) ; + m_table->Evaluate(0.0) ; } -CHAI_HOST_DEVICE real8 YofXfromRTTable1D::RootFromBaseX(real8 t, const real8 *vals) const +CHAI_HOST_DEVICE real8 YofXfromRTTable1D::RootFromBaseX() const { #ifdef CHAI_DEVICE_COMPILE printf("YofXfromRTTable1D::RootFromBaseX POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; #endif - return m_table->Evaluate(t) ; + return m_table->Evaluate(0.0) ; } CHAI_HOST_DEVICE real8 YofXfromRTTable1D::innerEvaluate(real8 xin) const { - real8 xv = xin ; #ifdef CHAI_DEVICE_COMPILE printf("YofXfromRTTable1D::innerEvaluate POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; #endif - real8 t = BaseXFromNewX(&xv) ; + real8 t = BaseXFromNewX() ; return t ; } -CHAI_HOST_DEVICE RofTfromXYTable1D::RofTfromXYTable1D(Table1D const * f, real8 xlow, real8 xhigh) - : ComputedTable1D(f, xlow, xhigh) +CHAI_HOST_DEVICE RofTfromXYTable1D::RofTfromXYTable1D(Table1D const * f) + : ComputedTable1D(f) { #ifdef CHAI_DEVICE_COMPILE printf("RofTfromXY::RofTfromXYTable1D POINTER %p m_table %p\n", this, m_table) ; #endif - m_table->Evaluate(xlow) ; + m_table->Evaluate(0.0) ; } -CHAI_HOST_DEVICE real8 RofTfromXYTable1D::RootFromBaseX(real8 xnew, const real8 *vals) const +CHAI_HOST_DEVICE real8 RofTfromXYTable1D::RootFromBaseX() const { - return m_table->Evaluate(xnew) ; + return m_table->Evaluate(0.0) ; } CHAI_HOST_DEVICE real8 RofTfromXYTable1D::innerEvaluate(real8 xin) const { - real8 tv = xin ; - real8 x = BaseXFromNewX(&tv) ; + real8 x = BaseXFromNewX() ; return x ; } @@ -521,16 +385,14 @@ int main(int, char**) { fx_host[0] = 4.0 ; fx_host[1] = 4.0 ; - tabArray[0] = chai::make_managed(2, chai::unpack(x), chai::unpack(fx)); + tabArray[0] = chai::make_managed() ; x.free() ; fx.free() ; } { - real8 bp[2] = { 90.0, 180.0 } ; - chai::managed_ptr tabArray_0 = tabArray[0]; - tabArray[1] = chai::make_managed(chai::unpack(tabArray_0), bp[0], bp[1]) ; + tabArray[1] = chai::make_managed(chai::unpack(tabArray_0)) ; } { chai::ManagedArray x(2) ; @@ -542,7 +404,7 @@ int main(int, char**) { fx_host[0] = 4.0 ; fx_host[1] = 4.0 ; - tabArray[2] = chai::make_managed(2, chai::unpack(x), chai::unpack(fx)); + tabArray[2] = chai::make_managed() ; x.free() ; fx.free() ; } @@ -554,6 +416,7 @@ int main(int, char**) { chai::ManagedArray host_device_bp(1) ; real8 *host_bp = host_device_bp.data() ; + // Changing this to 0.0 also makes the crash go away! host_bp[0] = 2.449293593598294706e-16 ; tabArray[3] = chai::make_managed(2, chai::unpack(host_device_temp), chai::unpack(host_device_bp)) ; @@ -567,10 +430,10 @@ int main(int, char**) { real8 *fx_host = fx.data() ; x_host[0] = 2.5 ; x_host[1] = 4.0 ; - fx_host[0] = 3.17999364001908 ; - fx_host[1] = 5.0879898240305277 ; + fx_host[0] = 3.0 ; + fx_host[1] = 5.0 ; - tabArray[4] = chai::make_managed(2, chai::unpack(x), chai::unpack(fx)); + tabArray[4] = chai::make_managed() ; x.free() ; fx.free() ; } @@ -590,10 +453,9 @@ int main(int, char**) { host_device_temp.free() ; } { - real8 bp[2] = { 0.0, 20.0 } ; chai::managed_ptr tabArray_0 = tabArray[5]; - chai::make_managed(chai::unpack(tabArray_0), bp[0], bp[1]) ; + chai::make_managed(chai::unpack(tabArray_0)) ; } printf("SUCCESS\n") ; From df271fb445641d0171f154585e057799a4c32224 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Wed, 11 Sep 2024 16:02:26 -0700 Subject: [PATCH 07/16] Tweak build --- configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake | 4 ++-- reproducers/CMakeLists.txt | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake b/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake index 6ba2ad23..06deaa23 100644 --- a/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake +++ b/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake @@ -5,12 +5,12 @@ # SPDX-License-Identifier: BSD-3-Clause ############################################################################## -set(COMPILER_BASE "/usr/tce/packages/rocmcc/rocmcc-6.1.0-magic" CACHE PATH "") +set(COMPILER_BASE "/usr/tce/packages/rocmcc/rocmcc-6.2.0-magic" CACHE PATH "") set(CMAKE_C_COMPILER "${COMPILER_BASE}/bin/amdclang" CACHE PATH "") set(CMAKE_CXX_COMPILER "${COMPILER_BASE}/bin/amdclang++" CACHE PATH "") set(ENABLE_HIP ON CACHE BOOL "Enable Hip") -set(ROCM_PATH "/usr/tce/packages/rocmcc/rocmcc-6.1.0-magic" CACHE PATH "") +set(ROCM_PATH "/usr/tce/packages/rocmcc/rocmcc-6.2.0-magic" CACHE PATH "") set(CMAKE_HIP_ARCHITECTURES "gfx942:xnack+" CACHE STRING "") set(AMDGPU_TARGETS "gfx942:xnack+" CACHE STRING "") diff --git a/reproducers/CMakeLists.txt b/reproducers/CMakeLists.txt index 43dd0e60..e8a39f58 100644 --- a/reproducers/CMakeLists.txt +++ b/reproducers/CMakeLists.txt @@ -14,7 +14,8 @@ if (CHAI_ENABLE_HIP) list(APPEND chai_reproducer_depends blt::hip) endif () -if (CHAI_ENABLE_MANAGED_PTR) +if (CHAI_ENABLE_MANAGED_PTR AND (CHAI_ENABLE_HIP OR CHAI_ENABLE_CUDA)) + # This crashes with HIP but not with CUDA blt_add_executable( NAME managed_ptr_multiple_inheritance_reproducer.exe SOURCES managed_ptr_multiple_inheritance_reproducer.cpp From e3ce996eba95fca63cfb47a8f4fd437190ad4c66 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Wed, 11 Sep 2024 16:09:23 -0700 Subject: [PATCH 08/16] Simplify more --- ...ed_ptr_multiple_inheritance_reproducer.cpp | 119 ++++++------------ 1 file changed, 35 insertions(+), 84 deletions(-) diff --git a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp index 2ffa7fcd..f008eeac 100644 --- a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp +++ b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp @@ -77,10 +77,6 @@ class Table { Compute(const Compute &other); Compute &operator=(const Compute &other); } ; - protected: - - CHAI_HOST_DEVICE int Search(real8 xin, const real8* xvals, int numX) const ; - private: Table(const Table &other); @@ -115,7 +111,7 @@ class Table1D : public SimpleTable { CHAI_HOST_DEVICE virtual ~Table1D() {} - CHAI_HOST_DEVICE virtual real8 Evaluate(real8 xin) const = 0 ; + CHAI_HOST_DEVICE virtual real8 Evaluate() const = 0 ; protected: CHAI_HOST_DEVICE Table1D(const Table1D &other) = delete; @@ -129,12 +125,12 @@ class DataTable1D : public Table1D, public Table::Data { CHAI_HOST_DEVICE virtual ~DataTable1D() {} - CHAI_HOST_DEVICE virtual real8 Evaluate(real8 xin) const override; + CHAI_HOST_DEVICE virtual real8 Evaluate() const override; using Table1D::Evaluate ; protected: - CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const = 0 ; + CHAI_HOST_DEVICE virtual real8 innerEvaluate() const = 0 ; } ; class LinearTable1D : public DataTable1D { @@ -143,7 +139,7 @@ class LinearTable1D : public DataTable1D { CHAI_HOST_DEVICE virtual ~LinearTable1D() {} - CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const override; + CHAI_HOST_DEVICE virtual real8 innerEvaluate() const override; private: CHAI_HOST_DEVICE LinearTable1D(const LinearTable1D &other) = delete; @@ -161,13 +157,13 @@ class DerivedTable1D : public Table1D, public Table::Data, public Table::Derive CHAI_HOST_DEVICE virtual ~DerivedTable1D() {} - CHAI_HOST_DEVICE virtual real8 Evaluate(real8 xin) const override; + CHAI_HOST_DEVICE virtual real8 Evaluate() const override; virtual int GetNumStrings() const override = 0; protected: - CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const = 0 ; + CHAI_HOST_DEVICE virtual real8 innerEvaluate() const = 0 ; private: CHAI_HOST_DEVICE DerivedTable1D(const DerivedTable1D &other) = delete; @@ -183,7 +179,7 @@ class StitchTable1D : public DerivedTable1D { inline virtual int GetNumStrings() const override { return m_nTables; } private: - CHAI_HOST_DEVICE real8 innerEvaluate(real8 x) const override; + CHAI_HOST_DEVICE real8 innerEvaluate() const override; CHAI_HOST_DEVICE StitchTable1D() = delete; CHAI_HOST_DEVICE StitchTable1D(const StitchTable1D &other) = delete; @@ -218,7 +214,7 @@ class YofXfromRTTable1D : public ComputedTable1D { inline int virtual GetNumStrings() const override { return 1; } private: - CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const override; + CHAI_HOST_DEVICE virtual real8 innerEvaluate() const override; CHAI_HOST_DEVICE virtual real8 RootFromBaseX() const override; @@ -236,7 +232,7 @@ class RofTfromXYTable1D : public ComputedTable1D { inline int virtual GetNumStrings() const override { return 1; } private: - CHAI_HOST_DEVICE virtual real8 innerEvaluate(real8 x) const override; + CHAI_HOST_DEVICE virtual real8 innerEvaluate() const override; CHAI_HOST_DEVICE virtual real8 RootFromBaseX() const override; @@ -254,22 +250,22 @@ CHAI_HOST_DEVICE real8 Table::Compute::BaseXFromNewX() const return 0.0 ; } -CHAI_HOST_DEVICE real8 LinearTable1D::innerEvaluate(real8 xin) const +CHAI_HOST_DEVICE real8 LinearTable1D::innerEvaluate() const { return 0.0 ; } -CHAI_HOST_DEVICE real8 DerivedTable1D::Evaluate(real8 xin) const +CHAI_HOST_DEVICE real8 DerivedTable1D::Evaluate() const { #ifdef CHAI_DEVICE_COMPILE printf("DerivedTable1D::Evaluate POINTER %p\n", this) ; #endif - return innerEvaluate(xin) ; + return innerEvaluate() ; } -CHAI_HOST_DEVICE real8 DataTable1D::Evaluate(real8 xin) const +CHAI_HOST_DEVICE real8 DataTable1D::Evaluate() const { - return innerEvaluate(xin) ; + return innerEvaluate() ; } CHAI_HOST_DEVICE StitchTable1D::StitchTable1D(int nt, chai::managed_ptr* tabs, const real8* bds) @@ -301,17 +297,15 @@ CHAI_HOST_DEVICE StitchTable1D::~StitchTable1D() } } -CHAI_HOST_DEVICE real8 StitchTable1D::innerEvaluate(real8 xin) const +CHAI_HOST_DEVICE real8 StitchTable1D::innerEvaluate() const { - real8 xv = xin ; - int i=0 ; - while ( (i < m_nTables-1) && (xv >= m_bds[i]) ) { - i++ ; - } + for (int i = 0 ; i < m_nTables ; ++i) { #ifdef CHAI_DEVICE_COMPILE - printf("StitchTable1D::innerEvaluate POINTER %p i %d m_tables[i] %p\n", this, i, m_tables[i]) ; + printf("StitchTable1D::innerEvaluate POINTER %p i %d m_tables[i] %p\n", this, i, m_tables[i]) ; #endif - return m_tables[i]->Evaluate(xv) ; + m_tables[i]->Evaluate() ; + } + return 0.0 ; } CHAI_HOST_DEVICE ComputedTable1D:: @@ -330,7 +324,7 @@ CHAI_HOST_DEVICE YofXfromRTTable1D::YofXfromRTTable1D(Table1D const * f) #ifdef CHAI_DEVICE_COMPILE printf("YofXfromRTTable1D::YofXfromRTTable1D POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; #endif - m_table->Evaluate(0.0) ; + m_table->Evaluate() ; } CHAI_HOST_DEVICE real8 YofXfromRTTable1D::RootFromBaseX() const @@ -338,16 +332,16 @@ CHAI_HOST_DEVICE real8 YofXfromRTTable1D::RootFromBaseX() const #ifdef CHAI_DEVICE_COMPILE printf("YofXfromRTTable1D::RootFromBaseX POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; #endif - return m_table->Evaluate(0.0) ; + return m_table->Evaluate() ; } -CHAI_HOST_DEVICE real8 YofXfromRTTable1D::innerEvaluate(real8 xin) const +CHAI_HOST_DEVICE real8 YofXfromRTTable1D::innerEvaluate() const { #ifdef CHAI_DEVICE_COMPILE printf("YofXfromRTTable1D::innerEvaluate POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; #endif - real8 t = BaseXFromNewX() ; - return t ; + BaseXFromNewX() ; + return 0.0 ; } CHAI_HOST_DEVICE RofTfromXYTable1D::RofTfromXYTable1D(Table1D const * f) @@ -358,55 +352,29 @@ CHAI_HOST_DEVICE RofTfromXYTable1D::RofTfromXYTable1D(Table1D const * f) printf("RofTfromXY::RofTfromXYTable1D POINTER %p m_table %p\n", this, m_table) ; #endif - m_table->Evaluate(0.0) ; + m_table->Evaluate() ; } CHAI_HOST_DEVICE real8 RofTfromXYTable1D::RootFromBaseX() const { - return m_table->Evaluate(0.0) ; + return m_table->Evaluate() ; } -CHAI_HOST_DEVICE real8 RofTfromXYTable1D::innerEvaluate(real8 xin) const +CHAI_HOST_DEVICE real8 RofTfromXYTable1D::innerEvaluate() const { - real8 x = BaseXFromNewX() ; - return x ; + BaseXFromNewX() ; + return 0.0 ; } int main(int, char**) { chai::managed_ptr tabArray[6] ; { - chai::ManagedArray x(2) ; - chai::ManagedArray fx(2) ; - real8 *x_host = x.data() ; - real8 *fx_host = fx.data() ; - x_host[0] = 0.0 ; - x_host[1] = 180.0 ; - fx_host[0] = 4.0 ; - fx_host[1] = 4.0 ; - tabArray[0] = chai::make_managed() ; - x.free() ; - fx.free() ; - } - { - chai::managed_ptr tabArray_0 = tabArray[0]; - - tabArray[1] = chai::make_managed(chai::unpack(tabArray_0)) ; - } - { - chai::ManagedArray x(2) ; - chai::ManagedArray fx(2) ; - real8 *x_host = x.data() ; - real8 *fx_host = fx.data() ; - x_host[0] = -20.0 ; - x_host[1] = 20.0 ; - fx_host[0] = 4.0 ; - fx_host[1] = 4.0 ; - + tabArray[1] = chai::make_managed(chai::unpack(tabArray[0])) ; tabArray[2] = chai::make_managed() ; - x.free() ; - fx.free() ; + tabArray[3] = chai::make_managed() ; + } { chai::ManagedArray > host_device_temp(2) ; @@ -419,24 +387,10 @@ int main(int, char**) { // Changing this to 0.0 also makes the crash go away! host_bp[0] = 2.449293593598294706e-16 ; - tabArray[3] = chai::make_managed(2, chai::unpack(host_device_temp), chai::unpack(host_device_bp)) ; + tabArray[4] = chai::make_managed(2, chai::unpack(host_device_temp), chai::unpack(host_device_bp)) ; host_device_temp.free() ; host_device_bp.free() ; } - { - chai::ManagedArray x(2) ; - chai::ManagedArray fx(2) ; - real8 *x_host = x.data() ; - real8 *fx_host = fx.data() ; - x_host[0] = 2.5 ; - x_host[1] = 4.0 ; - fx_host[0] = 3.0 ; - fx_host[1] = 5.0 ; - - tabArray[4] = chai::make_managed() ; - x.free() ; - fx.free() ; - } { chai::ManagedArray > host_device_temp(2) ; chai::managed_ptr *host_temp = host_device_temp.data() ; @@ -452,11 +406,8 @@ int main(int, char**) { host_device_bp.free() ; host_device_temp.free() ; } - { - chai::managed_ptr tabArray_0 = tabArray[5]; - chai::make_managed(chai::unpack(tabArray_0)) ; - } + chai::make_managed(chai::unpack(tabArray[5])) ; printf("SUCCESS\n") ; return 0; From 3a2783c6dd2227ee3d875f794e098e910f8ab2c8 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Wed, 11 Sep 2024 16:19:33 -0700 Subject: [PATCH 09/16] More simplification --- ...ed_ptr_multiple_inheritance_reproducer.cpp | 66 ++++++------------- 1 file changed, 21 insertions(+), 45 deletions(-) diff --git a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp index f008eeac..026dc926 100644 --- a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp +++ b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp @@ -172,7 +172,7 @@ class DerivedTable1D : public Table1D, public Table::Data, public Table::Derive class StitchTable1D : public DerivedTable1D { public: - CHAI_HOST_DEVICE StitchTable1D(int nt, chai::managed_ptr* tabs, const real8* bds) ; + CHAI_HOST_DEVICE StitchTable1D(int nt, chai::managed_ptr* tabs) ; CHAI_HOST_DEVICE virtual ~StitchTable1D() ; @@ -187,7 +187,6 @@ class StitchTable1D : public DerivedTable1D { int m_nTables ; const Table1D ** m_tables = nullptr; - real8 * m_bds ; } ; class ComputedTable1D : public DerivedTable1D, public Table::Compute { @@ -268,11 +267,10 @@ CHAI_HOST_DEVICE real8 DataTable1D::Evaluate() const return innerEvaluate() ; } -CHAI_HOST_DEVICE StitchTable1D::StitchTable1D(int nt, chai::managed_ptr* tabs, const real8* bds) +CHAI_HOST_DEVICE StitchTable1D::StitchTable1D(int nt, chai::managed_ptr* tabs) : DerivedTable1D() , m_nTables(nt) , m_tables(new const Table1D *[nt]) - , m_bds(new real8[nt-1]) { for (int i = 0 ; i < nt ; ++i) { m_tables[i] = tabs[i].get() ; @@ -280,10 +278,6 @@ CHAI_HOST_DEVICE StitchTable1D::StitchTable1D(int nt, chai::managed_ptr 0) { delete [] m_tables ; } - - if (m_nTables > 1) { - delete [] m_bds ; - } } CHAI_HOST_DEVICE real8 StitchTable1D::innerEvaluate() const @@ -369,47 +359,33 @@ CHAI_HOST_DEVICE real8 RofTfromXYTable1D::innerEvaluate() const int main(int, char**) { chai::managed_ptr tabArray[6] ; - { - tabArray[0] = chai::make_managed() ; - tabArray[1] = chai::make_managed(chai::unpack(tabArray[0])) ; - tabArray[2] = chai::make_managed() ; - tabArray[3] = chai::make_managed() ; - } - { - chai::ManagedArray > host_device_temp(2) ; - chai::managed_ptr *host_temp = host_device_temp.data() ; - host_temp[0] = tabArray[1] ; - host_temp[1] = tabArray[2] ; - - chai::ManagedArray host_device_bp(1) ; - real8 *host_bp = host_device_bp.data() ; - // Changing this to 0.0 also makes the crash go away! - host_bp[0] = 2.449293593598294706e-16 ; - - tabArray[4] = chai::make_managed(2, chai::unpack(host_device_temp), chai::unpack(host_device_bp)) ; - host_device_temp.free() ; - host_device_bp.free() ; - } - { - chai::ManagedArray > host_device_temp(2) ; - chai::managed_ptr *host_temp = host_device_temp.data() ; - host_temp[0] = tabArray[3] ; - host_temp[1] = tabArray[4] ; + tabArray[0] = chai::make_managed() ; + tabArray[1] = chai::make_managed(chai::unpack(tabArray[0])) ; + tabArray[2] = chai::make_managed() ; + tabArray[3] = chai::make_managed() ; - chai::ManagedArray host_device_bp(1) ; - real8 *host_bp = host_device_bp.data() ; - host_bp[0] = 2.5 ; + chai::ManagedArray > host_device_temp0(2) ; + chai::managed_ptr *host_temp0 = host_device_temp0.data() ; + host_temp0[0] = tabArray[1] ; + host_temp0[1] = tabArray[2] ; - tabArray[5] = chai::make_managed(2, chai::unpack(host_device_temp), chai::unpack(host_device_bp)) ; + tabArray[4] = chai::make_managed(2, chai::unpack(host_device_temp0)) ; - host_device_bp.free() ; - host_device_temp.free() ; - } + chai::ManagedArray > host_device_temp1(2) ; + chai::managed_ptr *host_temp1 = host_device_temp1.data() ; + host_temp1[0] = tabArray[3] ; + host_temp1[1] = tabArray[4] ; + + tabArray[5] = chai::make_managed(2, chai::unpack(host_device_temp1)) ; chai::make_managed(chai::unpack(tabArray[5])) ; printf("SUCCESS\n") ; + + host_device_temp0.free() ; + host_device_temp1.free() ; + return 0; } From 8d6ba78596d6e22102e3fb9a26add2ac1fa3bd45 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Wed, 11 Sep 2024 16:47:09 -0700 Subject: [PATCH 10/16] Inline everything --- ...ed_ptr_multiple_inheritance_reproducer.cpp | 229 +++++++----------- 1 file changed, 84 insertions(+), 145 deletions(-) diff --git a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp index 026dc926..bcae2c75 100644 --- a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp +++ b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp @@ -12,14 +12,6 @@ #include #include -class DataTable1D; -class DerivedTable1D; -typedef double real8 ; - -class Table ; -class SimpleTable; -class Table1D ; - class Table { public: CHAI_HOST_DEVICE Table() { @@ -69,9 +61,15 @@ class Table { protected: - CHAI_HOST_DEVICE real8 BaseXFromNewX() const ; + CHAI_HOST_DEVICE double BaseXFromNewX() const { +#ifdef CHAI_DEVICE_COMPILE + printf("Table::Compute::BaseXFromNewX %p\n", this) ; +#endif + RootFromBaseX() ; + return 0.0 ; + } - CHAI_HOST_DEVICE virtual real8 RootFromBaseX() const = 0; + CHAI_HOST_DEVICE virtual double RootFromBaseX() const = 0; private: Compute(const Compute &other); @@ -111,7 +109,7 @@ class Table1D : public SimpleTable { CHAI_HOST_DEVICE virtual ~Table1D() {} - CHAI_HOST_DEVICE virtual real8 Evaluate() const = 0 ; + CHAI_HOST_DEVICE virtual double Evaluate() const = 0 ; protected: CHAI_HOST_DEVICE Table1D(const Table1D &other) = delete; @@ -125,12 +123,12 @@ class DataTable1D : public Table1D, public Table::Data { CHAI_HOST_DEVICE virtual ~DataTable1D() {} - CHAI_HOST_DEVICE virtual real8 Evaluate() const override; - - using Table1D::Evaluate ; + CHAI_HOST_DEVICE virtual double Evaluate() const override { + return innerEvaluate() ; + } protected: - CHAI_HOST_DEVICE virtual real8 innerEvaluate() const = 0 ; + CHAI_HOST_DEVICE virtual double innerEvaluate() const = 0 ; } ; class LinearTable1D : public DataTable1D { @@ -139,7 +137,9 @@ class LinearTable1D : public DataTable1D { CHAI_HOST_DEVICE virtual ~LinearTable1D() {} - CHAI_HOST_DEVICE virtual real8 innerEvaluate() const override; + CHAI_HOST_DEVICE virtual double innerEvaluate() const override { + return 0.0 ; + } private: CHAI_HOST_DEVICE LinearTable1D(const LinearTable1D &other) = delete; @@ -157,13 +157,18 @@ class DerivedTable1D : public Table1D, public Table::Data, public Table::Derive CHAI_HOST_DEVICE virtual ~DerivedTable1D() {} - CHAI_HOST_DEVICE virtual real8 Evaluate() const override; + CHAI_HOST_DEVICE virtual double Evaluate() const override { +#ifdef CHAI_DEVICE_COMPILE + printf("DerivedTable1D::Evaluate POINTER %p\n", this) ; +#endif + return innerEvaluate() ; + } virtual int GetNumStrings() const override = 0; protected: - CHAI_HOST_DEVICE virtual real8 innerEvaluate() const = 0 ; + CHAI_HOST_DEVICE virtual double innerEvaluate() const = 0 ; private: CHAI_HOST_DEVICE DerivedTable1D(const DerivedTable1D &other) = delete; @@ -172,14 +177,33 @@ class DerivedTable1D : public Table1D, public Table::Data, public Table::Derive class StitchTable1D : public DerivedTable1D { public: - CHAI_HOST_DEVICE StitchTable1D(int nt, chai::managed_ptr* tabs) ; + CHAI_HOST_DEVICE StitchTable1D(int nt, chai::managed_ptr* tabs) : DerivedTable1D(), m_nTables(nt), m_tables(new const Table1D *[nt]) { + for (int i = 0 ; i < nt ; ++i) { + m_tables[i] = tabs[i].get() ; +#ifdef CHAI_DEVICE_COMPILE + printf("StitchTable1D::StitchTable1D POINTER %p i %d m_tables[i] %p\n", this, i, m_tables[i]) ; +#endif + } + } - CHAI_HOST_DEVICE virtual ~StitchTable1D() ; + CHAI_HOST_DEVICE virtual ~StitchTable1D() { + if (m_nTables > 0) { + delete [] m_tables ; + } + } inline virtual int GetNumStrings() const override { return m_nTables; } private: - CHAI_HOST_DEVICE real8 innerEvaluate() const override; + CHAI_HOST_DEVICE double innerEvaluate() const override { + for (int i = 0 ; i < m_nTables ; ++i) { +#ifdef CHAI_DEVICE_COMPILE + printf("StitchTable1D::innerEvaluate POINTER %p i %d m_tables[i] %p\n", this, i, m_tables[i]) ; +#endif + m_tables[i]->Evaluate() ; + } + return 0.0 ; + } CHAI_HOST_DEVICE StitchTable1D() = delete; CHAI_HOST_DEVICE StitchTable1D(const StitchTable1D &other) = delete; @@ -191,7 +215,12 @@ class StitchTable1D : public DerivedTable1D { class ComputedTable1D : public DerivedTable1D, public Table::Compute { public: - CHAI_HOST_DEVICE ComputedTable1D(const Table1D * table); + CHAI_HOST_DEVICE ComputedTable1D(const Table1D * f) : DerivedTable1D(), Table::Compute(), m_table(f) + { +#ifdef CHAI_DEVICE_COMPILE + printf("ComputedTable1D::ComputedTable1D POINTER %p m_table %p\n", this, m_table) ; +#endif + } CHAI_HOST_DEVICE virtual ~ComputedTable1D() {} @@ -206,16 +235,32 @@ class ComputedTable1D : public DerivedTable1D, public Table::Compute { class YofXfromRTTable1D : public ComputedTable1D { public: - CHAI_HOST_DEVICE YofXfromRTTable1D(Table1D const * f) ; + CHAI_HOST_DEVICE YofXfromRTTable1D(Table1D const * f) : ComputedTable1D(f) { +#ifdef CHAI_DEVICE_COMPILE + printf("YofXfromRTTable1D::YofXfromRTTable1D POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; +#endif + m_table->Evaluate() ; + } CHAI_HOST_DEVICE virtual ~YofXfromRTTable1D() {} inline int virtual GetNumStrings() const override { return 1; } private: - CHAI_HOST_DEVICE virtual real8 innerEvaluate() const override; + CHAI_HOST_DEVICE virtual double innerEvaluate() const override { +#ifdef CHAI_DEVICE_COMPILE + printf("YofXfromRTTable1D::innerEvaluate POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; +#endif + BaseXFromNewX() ; + return 0.0 ; + } - CHAI_HOST_DEVICE virtual real8 RootFromBaseX() const override; + CHAI_HOST_DEVICE virtual double RootFromBaseX() const override { +#ifdef CHAI_DEVICE_COMPILE + printf("YofXfromRTTable1D::RootFromBaseX POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; +#endif + return m_table->Evaluate() ; + } CHAI_HOST_DEVICE YofXfromRTTable1D() = delete; CHAI_HOST_DEVICE YofXfromRTTable1D(const YofXfromRTTable1D &other) = delete; @@ -224,139 +269,33 @@ class YofXfromRTTable1D : public ComputedTable1D { class RofTfromXYTable1D : public ComputedTable1D { public: - CHAI_HOST_DEVICE RofTfromXYTable1D(Table1D const * f) ; + CHAI_HOST_DEVICE RofTfromXYTable1D(Table1D const * f) : ComputedTable1D(f) { +#ifdef CHAI_DEVICE_COMPILE + printf("RofTfromXY::RofTfromXYTable1D POINTER %p m_table %p\n", this, m_table) ; +#endif + + m_table->Evaluate() ; + } CHAI_HOST_DEVICE virtual ~RofTfromXYTable1D() {} inline int virtual GetNumStrings() const override { return 1; } private: - CHAI_HOST_DEVICE virtual real8 innerEvaluate() const override; + CHAI_HOST_DEVICE virtual double innerEvaluate() const override { + BaseXFromNewX() ; + return 0.0 ; + } - CHAI_HOST_DEVICE virtual real8 RootFromBaseX() const override; + CHAI_HOST_DEVICE virtual double RootFromBaseX() const override { + return m_table->Evaluate() ; + } CHAI_HOST_DEVICE RofTfromXYTable1D() = delete; CHAI_HOST_DEVICE RofTfromXYTable1D(const RofTfromXYTable1D &other) = delete; CHAI_HOST_DEVICE RofTfromXYTable1D &operator=(const RofTfromXYTable1D &other) = delete; } ; -CHAI_HOST_DEVICE real8 Table::Compute::BaseXFromNewX() const -{ -#ifdef CHAI_DEVICE_COMPILE - printf("Table::Compute::BaseXFromNewX %p\n", this) ; -#endif - RootFromBaseX() ; - return 0.0 ; -} - -CHAI_HOST_DEVICE real8 LinearTable1D::innerEvaluate() const -{ - return 0.0 ; -} - -CHAI_HOST_DEVICE real8 DerivedTable1D::Evaluate() const -{ -#ifdef CHAI_DEVICE_COMPILE - printf("DerivedTable1D::Evaluate POINTER %p\n", this) ; -#endif - return innerEvaluate() ; -} - -CHAI_HOST_DEVICE real8 DataTable1D::Evaluate() const -{ - return innerEvaluate() ; -} - -CHAI_HOST_DEVICE StitchTable1D::StitchTable1D(int nt, chai::managed_ptr* tabs) - : DerivedTable1D() - , m_nTables(nt) - , m_tables(new const Table1D *[nt]) -{ - for (int i = 0 ; i < nt ; ++i) { - m_tables[i] = tabs[i].get() ; -#ifdef CHAI_DEVICE_COMPILE - printf("StitchTable1D::StitchTable1D POINTER %p i %d m_tables[i] %p\n", this, i, m_tables[i]) ; -#endif - } -} - -CHAI_HOST_DEVICE StitchTable1D::~StitchTable1D() -{ - if (m_nTables > 0) { - delete [] m_tables ; - } -} - -CHAI_HOST_DEVICE real8 StitchTable1D::innerEvaluate() const -{ - for (int i = 0 ; i < m_nTables ; ++i) { -#ifdef CHAI_DEVICE_COMPILE - printf("StitchTable1D::innerEvaluate POINTER %p i %d m_tables[i] %p\n", this, i, m_tables[i]) ; -#endif - m_tables[i]->Evaluate() ; - } - return 0.0 ; -} - -CHAI_HOST_DEVICE ComputedTable1D:: -ComputedTable1D(const Table1D * f) - : DerivedTable1D(), Table::Compute(), - m_table(f) -{ -#ifdef CHAI_DEVICE_COMPILE - printf("ComputedTable1D::ComputedTable1D POINTER %p m_table %p\n", this, m_table) ; -#endif -} - -CHAI_HOST_DEVICE YofXfromRTTable1D::YofXfromRTTable1D(Table1D const * f) - : ComputedTable1D(f) -{ -#ifdef CHAI_DEVICE_COMPILE - printf("YofXfromRTTable1D::YofXfromRTTable1D POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; -#endif - m_table->Evaluate() ; -} - -CHAI_HOST_DEVICE real8 YofXfromRTTable1D::RootFromBaseX() const -{ -#ifdef CHAI_DEVICE_COMPILE - printf("YofXfromRTTable1D::RootFromBaseX POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; -#endif - return m_table->Evaluate() ; -} - -CHAI_HOST_DEVICE real8 YofXfromRTTable1D::innerEvaluate() const -{ -#ifdef CHAI_DEVICE_COMPILE - printf("YofXfromRTTable1D::innerEvaluate POINTER %p m_table %p <<< CHECK THESE POINTERS\n", this, m_table) ; -#endif - BaseXFromNewX() ; - return 0.0 ; -} - -CHAI_HOST_DEVICE RofTfromXYTable1D::RofTfromXYTable1D(Table1D const * f) - : ComputedTable1D(f) - -{ -#ifdef CHAI_DEVICE_COMPILE - printf("RofTfromXY::RofTfromXYTable1D POINTER %p m_table %p\n", this, m_table) ; -#endif - - m_table->Evaluate() ; -} - - -CHAI_HOST_DEVICE real8 RofTfromXYTable1D::RootFromBaseX() const -{ - return m_table->Evaluate() ; -} - -CHAI_HOST_DEVICE real8 RofTfromXYTable1D::innerEvaluate() const -{ - BaseXFromNewX() ; - return 0.0 ; -} - int main(int, char**) { chai::managed_ptr tabArray[6] ; From 1eea769bbcf07766c701707fc85b960dc75fd534 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Thu, 12 Sep 2024 10:22:59 -0700 Subject: [PATCH 11/16] Update configs --- .../blueos_3_ppc64le_ib_p9/nvcc_clang.cmake | 8 ++------ configs/lc/toss_4_x86_64_ib/clang.cmake | 16 ++++++++++++++++ configs/lc/toss_4_x86_64_ib/clang_tsan.cmake | 19 +++++++++++++++++++ configs/lc/toss_4_x86_64_ib/intel.cmake | 17 +++++++++++++++++ .../lc/toss_4_x86_64_ib_cray/amdclang.cmake | 8 ++------ 5 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 configs/lc/toss_4_x86_64_ib/clang.cmake create mode 100644 configs/lc/toss_4_x86_64_ib/clang_tsan.cmake create mode 100644 configs/lc/toss_4_x86_64_ib/intel.cmake diff --git a/configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake b/configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake index 48f41cc5..43ce1e8c 100644 --- a/configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake +++ b/configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake @@ -1,6 +1,6 @@ ############################################################################## -# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CARE -# project contributors. See the CARE LICENSE file for details. +# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CHAI +# project contributors. See the CHAI LICENSE file for details. # # SPDX-License-Identifier: BSD-3-Clause ############################################################################## @@ -21,7 +21,3 @@ set(CMAKE_CUDA_COMPILER "${CUDA_TOOLKIT_ROOT_DIR}/bin/nvcc" CACHE PATH "") set(CMAKE_CUDA_HOST_COMPILER "${CMAKE_CXX_COMPILER}" CACHE PATH "") set(CMAKE_CUDA_ARCHITECTURES "70" CACHE STRING "") set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler=--gcc-toolchain=${GCC_HOME}" CACHE STRING "") - -set(ENABLE_REPRODUCERS ON CACHE BOOL "") -set(CHAI_ENABLE_REPRODUCERS ON CACHE BOOL "") -set(ENABLE_TESTS OFF CACHE BOOL "") diff --git a/configs/lc/toss_4_x86_64_ib/clang.cmake b/configs/lc/toss_4_x86_64_ib/clang.cmake new file mode 100644 index 00000000..0004ea5a --- /dev/null +++ b/configs/lc/toss_4_x86_64_ib/clang.cmake @@ -0,0 +1,16 @@ +############################################################################## +# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CHAI +# project contributors. See the CHAI LICENSE file for details. +# +# SPDX-License-Identifier: BSD-3-Clause +############################################################################## + +set(COMPILER_BASE "/usr/tce/packages/clang/clang-14.0.6-magic" CACHE PATH "") +set(CMAKE_C_COMPILER "${COMPILER_BASE}/bin/clang" CACHE PATH "") +set(CMAKE_CXX_COMPILER "${COMPILER_BASE}/bin/clang++" CACHE PATH "") + +set(GCC_HOME "/usr/tce/packages/gcc/gcc-12.1.1-magic" CACHE PATH "") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") + +set(BLT_EXPORT_THIRDPARTY OFF CACHE BOOL "") diff --git a/configs/lc/toss_4_x86_64_ib/clang_tsan.cmake b/configs/lc/toss_4_x86_64_ib/clang_tsan.cmake new file mode 100644 index 00000000..6accd101 --- /dev/null +++ b/configs/lc/toss_4_x86_64_ib/clang_tsan.cmake @@ -0,0 +1,19 @@ +############################################################################## +# Copyright (c) 2024, Lawrence Livermore National Security, LLC and CHAI +# project contributors. See the CHAI LICENSE file for details. +# +# SPDX-License-Identifier: BSD-3-Clause +############################################################################## + +set(COMPILER_BASE "/usr/tce/packages/clang/clang-14.0.6-magic" CACHE PATH "") +set(CMAKE_C_COMPILER "${COMPILER_BASE}/bin/clang" CACHE PATH "") +set(CMAKE_CXX_COMPILER "${COMPILER_BASE}/bin/clang++" CACHE PATH "") + +set(GCC_HOME "/usr/tce/packages/gcc/gcc-12.1.1-magic" CACHE PATH "") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --gcc-toolchain=${GCC_HOME} -fsanitize=thread -g" CACHE STRING "") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_HOME} -fsanitize=thread -g" CACHE STRING "") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread" CACHE STRING "") + +set(ENABLE_OPENMP ON CACHE BOOL "") +set(BLT_EXPORT_THIRDPARTY OFF CACHE BOOL "") + diff --git a/configs/lc/toss_4_x86_64_ib/intel.cmake b/configs/lc/toss_4_x86_64_ib/intel.cmake new file mode 100644 index 00000000..f901f442 --- /dev/null +++ b/configs/lc/toss_4_x86_64_ib/intel.cmake @@ -0,0 +1,17 @@ +############################################################################## +# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CHAI +# project contributors. See the CHAI LICENSE file for details. +# +# SPDX-License-Identifier: BSD-3-Clause +############################################################################## + +set(COMPILER_BASE "/usr/tce/packages/intel/intel-2022.1.0-magic" CACHE PATH "") +set(CMAKE_C_COMPILER "${COMPILER_BASE}/bin/icx" CACHE PATH "") +set(CMAKE_CXX_COMPILER "${COMPILER_BASE}/bin/icpx" CACHE PATH "") + +set(GCC_HOME "/usr/tce/packages/gcc/gcc-12.1.1-magic" CACHE PATH "") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") + +set(BLT_EXPORT_THIRDPARTY OFF CACHE BOOL "") + diff --git a/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake b/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake index 06deaa23..1e4253e9 100644 --- a/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake +++ b/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake @@ -1,6 +1,6 @@ ############################################################################## -# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CARE -# project contributors. See the CARE LICENSE file for details. +# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CHAI +# project contributors. See the CHAI LICENSE file for details. # # SPDX-License-Identifier: BSD-3-Clause ############################################################################## @@ -13,7 +13,3 @@ set(ENABLE_HIP ON CACHE BOOL "Enable Hip") set(ROCM_PATH "/usr/tce/packages/rocmcc/rocmcc-6.2.0-magic" CACHE PATH "") set(CMAKE_HIP_ARCHITECTURES "gfx942:xnack+" CACHE STRING "") set(AMDGPU_TARGETS "gfx942:xnack+" CACHE STRING "") - -set(ENABLE_REPRODUCERS ON CACHE BOOL "") -set(CHAI_ENABLE_REPRODUCERS ON CACHE BOOL "") -set(ENABLE_TESTS OFF CACHE BOOL "") From 0fc26cec725c0d6c634098ebf6a3bc3d664c654b Mon Sep 17 00:00:00 2001 From: Alan Dayton Date: Tue, 17 Sep 2024 07:32:49 -0700 Subject: [PATCH 12/16] Move configs to host-configs --- .../lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake | 0 {configs => host-configs}/lc/toss_4_x86_64_ib/clang.cmake | 0 {configs => host-configs}/lc/toss_4_x86_64_ib/clang_tsan.cmake | 0 {configs => host-configs}/lc/toss_4_x86_64_ib/intel.cmake | 0 {configs => host-configs}/lc/toss_4_x86_64_ib_cray/amdclang.cmake | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {configs => host-configs}/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake (100%) rename {configs => host-configs}/lc/toss_4_x86_64_ib/clang.cmake (100%) rename {configs => host-configs}/lc/toss_4_x86_64_ib/clang_tsan.cmake (100%) rename {configs => host-configs}/lc/toss_4_x86_64_ib/intel.cmake (100%) rename {configs => host-configs}/lc/toss_4_x86_64_ib_cray/amdclang.cmake (100%) diff --git a/configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake b/host-configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake similarity index 100% rename from configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake rename to host-configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake diff --git a/configs/lc/toss_4_x86_64_ib/clang.cmake b/host-configs/lc/toss_4_x86_64_ib/clang.cmake similarity index 100% rename from configs/lc/toss_4_x86_64_ib/clang.cmake rename to host-configs/lc/toss_4_x86_64_ib/clang.cmake diff --git a/configs/lc/toss_4_x86_64_ib/clang_tsan.cmake b/host-configs/lc/toss_4_x86_64_ib/clang_tsan.cmake similarity index 100% rename from configs/lc/toss_4_x86_64_ib/clang_tsan.cmake rename to host-configs/lc/toss_4_x86_64_ib/clang_tsan.cmake diff --git a/configs/lc/toss_4_x86_64_ib/intel.cmake b/host-configs/lc/toss_4_x86_64_ib/intel.cmake similarity index 100% rename from configs/lc/toss_4_x86_64_ib/intel.cmake rename to host-configs/lc/toss_4_x86_64_ib/intel.cmake diff --git a/configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake b/host-configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake similarity index 100% rename from configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake rename to host-configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake From f12d20f2a120d4058cf5c2e3145c3f10944a9214 Mon Sep 17 00:00:00 2001 From: Alan Dayton Date: Tue, 17 Sep 2024 07:40:09 -0700 Subject: [PATCH 13/16] Make host configs easier to update --- .../blueos_3_ppc64le_ib_p9/nvcc_clang.cmake | 17 +++++++++++---- host-configs/lc/toss_4_x86_64_ib/clang.cmake | 14 ++++++++----- .../lc/toss_4_x86_64_ib/clang_tsan.cmake | 19 ----------------- host-configs/lc/toss_4_x86_64_ib/intel.cmake | 15 +++++++------ .../lc/toss_4_x86_64_ib_cray/amdclang.cmake | 21 ++++++++++++++----- 5 files changed, 47 insertions(+), 39 deletions(-) delete mode 100644 host-configs/lc/toss_4_x86_64_ib/clang_tsan.cmake diff --git a/host-configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake b/host-configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake index 43ce1e8c..4a03099a 100644 --- a/host-configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake +++ b/host-configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake @@ -1,22 +1,31 @@ ############################################################################## -# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CHAI +# Copyright (c) 2024, Lawrence Livermore National Security, LLC and CHAI # project contributors. See the CHAI LICENSE file for details. # # SPDX-License-Identifier: BSD-3-Clause ############################################################################## -set(COMPILER_BASE "/usr/tce/packages/clang/clang-ibm-14.0.5" CACHE PATH "") +# Set up software versions +set(CLANG_VERSION "ibm-14.0.5" CACHE PATH "") +set(CUDA_VERSION "11.8.0" CACHE PATH "") +set(GCC_VERSION "11.2.1" CACHE PATH "") + +# Set up compilers +set(COMPILER_BASE "/usr/tce/packages/clang/clang-${CLANG_VERSION}" CACHE PATH "") set(CMAKE_C_COMPILER "${COMPILER_BASE}/bin/clang" CACHE PATH "") set(CMAKE_CXX_COMPILER "${COMPILER_BASE}/bin/clang++" CACHE PATH "") -set(GCC_HOME "/usr/tce/packages/gcc/gcc-8.3.1" CACHE PATH "") +# Set up compiler flags +set(GCC_HOME "/usr/tce/packages/gcc/gcc-${GCC_VERSION}" CACHE PATH "") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") +# Prevent the wrong libraries from being linked in set(BLT_CMAKE_IMPLICIT_LINK_DIRECTORIES_EXCLUDE "/usr/tce/packages/gcc/gcc-4.9.3/lib64/gcc/powerpc64le-unknown-linux-gnu/4.9.3;/usr/tce/packages/gcc/gcc-4.9.3/lib64" CACHE STRING "") +# Set up CUDA set(ENABLE_CUDA ON CACHE BOOL "Enable CUDA") -set(CUDA_TOOLKIT_ROOT_DIR "/usr/tce/packages/cuda/cuda-11.8.0" CACHE PATH "Path to CUDA") +set(CUDA_TOOLKIT_ROOT_DIR "/usr/tce/packages/cuda/cuda-${CUDA_VERSION}" CACHE PATH "Path to CUDA") set(CMAKE_CUDA_COMPILER "${CUDA_TOOLKIT_ROOT_DIR}/bin/nvcc" CACHE PATH "") set(CMAKE_CUDA_HOST_COMPILER "${CMAKE_CXX_COMPILER}" CACHE PATH "") set(CMAKE_CUDA_ARCHITECTURES "70" CACHE STRING "") diff --git a/host-configs/lc/toss_4_x86_64_ib/clang.cmake b/host-configs/lc/toss_4_x86_64_ib/clang.cmake index 0004ea5a..e9feda97 100644 --- a/host-configs/lc/toss_4_x86_64_ib/clang.cmake +++ b/host-configs/lc/toss_4_x86_64_ib/clang.cmake @@ -1,16 +1,20 @@ ############################################################################## -# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CHAI +# Copyright (c) 2024, Lawrence Livermore National Security, LLC and CHAI # project contributors. See the CHAI LICENSE file for details. # # SPDX-License-Identifier: BSD-3-Clause ############################################################################## -set(COMPILER_BASE "/usr/tce/packages/clang/clang-14.0.6-magic" CACHE PATH "") +# Set up software versions +set(CLANG_VERSION "14.0.6" CACHE PATH "") +set(GCC_VERSION "12.1.1" CACHE PATH "") + +# Set up compilers +set(COMPILER_BASE "/usr/tce/packages/clang/clang-${CLANG_VERSION}-magic" CACHE PATH "") set(CMAKE_C_COMPILER "${COMPILER_BASE}/bin/clang" CACHE PATH "") set(CMAKE_CXX_COMPILER "${COMPILER_BASE}/bin/clang++" CACHE PATH "") -set(GCC_HOME "/usr/tce/packages/gcc/gcc-12.1.1-magic" CACHE PATH "") +# Set up compiler flags +set(GCC_HOME "/usr/tce/packages/gcc/gcc-${GCC_VERSION}-magic" CACHE PATH "") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") - -set(BLT_EXPORT_THIRDPARTY OFF CACHE BOOL "") diff --git a/host-configs/lc/toss_4_x86_64_ib/clang_tsan.cmake b/host-configs/lc/toss_4_x86_64_ib/clang_tsan.cmake deleted file mode 100644 index 6accd101..00000000 --- a/host-configs/lc/toss_4_x86_64_ib/clang_tsan.cmake +++ /dev/null @@ -1,19 +0,0 @@ -############################################################################## -# Copyright (c) 2024, Lawrence Livermore National Security, LLC and CHAI -# project contributors. See the CHAI LICENSE file for details. -# -# SPDX-License-Identifier: BSD-3-Clause -############################################################################## - -set(COMPILER_BASE "/usr/tce/packages/clang/clang-14.0.6-magic" CACHE PATH "") -set(CMAKE_C_COMPILER "${COMPILER_BASE}/bin/clang" CACHE PATH "") -set(CMAKE_CXX_COMPILER "${COMPILER_BASE}/bin/clang++" CACHE PATH "") - -set(GCC_HOME "/usr/tce/packages/gcc/gcc-12.1.1-magic" CACHE PATH "") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --gcc-toolchain=${GCC_HOME} -fsanitize=thread -g" CACHE STRING "") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_HOME} -fsanitize=thread -g" CACHE STRING "") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread" CACHE STRING "") - -set(ENABLE_OPENMP ON CACHE BOOL "") -set(BLT_EXPORT_THIRDPARTY OFF CACHE BOOL "") - diff --git a/host-configs/lc/toss_4_x86_64_ib/intel.cmake b/host-configs/lc/toss_4_x86_64_ib/intel.cmake index f901f442..644d97d2 100644 --- a/host-configs/lc/toss_4_x86_64_ib/intel.cmake +++ b/host-configs/lc/toss_4_x86_64_ib/intel.cmake @@ -1,17 +1,20 @@ ############################################################################## -# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CHAI +# Copyright (c) 2024, Lawrence Livermore National Security, LLC and CHAI # project contributors. See the CHAI LICENSE file for details. # # SPDX-License-Identifier: BSD-3-Clause ############################################################################## -set(COMPILER_BASE "/usr/tce/packages/intel/intel-2022.1.0-magic" CACHE PATH "") +# Set up software versions +set(INTEL_VERSION "2022.1.0" CACHE PATH "") +set(GCC_VERSION "12.1.1" CACHE PATH "") + +# Set up compilers +set(COMPILER_BASE "/usr/tce/packages/intel/intel-${INTEL_VERSION}-magic" CACHE PATH "") set(CMAKE_C_COMPILER "${COMPILER_BASE}/bin/icx" CACHE PATH "") set(CMAKE_CXX_COMPILER "${COMPILER_BASE}/bin/icpx" CACHE PATH "") -set(GCC_HOME "/usr/tce/packages/gcc/gcc-12.1.1-magic" CACHE PATH "") +# Set up compiler flags +set(GCC_HOME "/usr/tce/packages/gcc/gcc-${GCC_VERSION}-magic" CACHE PATH "") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") - -set(BLT_EXPORT_THIRDPARTY OFF CACHE BOOL "") - diff --git a/host-configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake b/host-configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake index 1e4253e9..f7895e1c 100644 --- a/host-configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake +++ b/host-configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake @@ -1,15 +1,26 @@ ############################################################################## -# Copyright (c) 2020-24, Lawrence Livermore National Security, LLC and CHAI +# Copyright (c) 2024, Lawrence Livermore National Security, LLC and CHAI # project contributors. See the CHAI LICENSE file for details. # # SPDX-License-Identifier: BSD-3-Clause ############################################################################## -set(COMPILER_BASE "/usr/tce/packages/rocmcc/rocmcc-6.2.0-magic" CACHE PATH "") +# Set up software versions +set(ROCM_VERSION "6.2.0" CACHE PATH "") +set(GCC_VERSION "12.2.1" CACHE PATH "") + +# Set up compilers +set(COMPILER_BASE "/usr/tce/packages/rocmcc/rocmcc-${ROCM_VERSION}-magic" CACHE PATH "") set(CMAKE_C_COMPILER "${COMPILER_BASE}/bin/amdclang" CACHE PATH "") set(CMAKE_CXX_COMPILER "${COMPILER_BASE}/bin/amdclang++" CACHE PATH "") -set(ENABLE_HIP ON CACHE BOOL "Enable Hip") -set(ROCM_PATH "/usr/tce/packages/rocmcc/rocmcc-6.2.0-magic" CACHE PATH "") +# Set up compiler flags +set(GCC_HOME "/usr/tce/packages/gcc/gcc-${GCC_VERSION}" CACHE PATH "") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_HOME}" CACHE STRING "") + +# Set up HIP +set(ENABLE_HIP ON CACHE BOOL "") +set(ROCM_PATH "/usr/tce/packages/rocmcc/rocmcc-${ROCM_VERSION}-magic" CACHE PATH "") set(CMAKE_HIP_ARCHITECTURES "gfx942:xnack+" CACHE STRING "") -set(AMDGPU_TARGETS "gfx942:xnack+" CACHE STRING "") +set(AMDGPU_TARGETS "${CMAKE_HIP_ARCHITECTURES}" CACHE STRING "") From 1ba0afdca0c17e72c97d654d036156d3a2868e58 Mon Sep 17 00:00:00 2001 From: Alan Dayton Date: Tue, 17 Sep 2024 08:10:41 -0700 Subject: [PATCH 14/16] Make CHAI_ENABLE_REPRODUCERS independent --- CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 80b00b78..fbee03b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,8 +71,6 @@ cmake_dependent_option(CHAI_ENABLE_DOCS "Build CHAI docs" On "ENABLE_DOCS" Off) cmake_dependent_option( CHAI_ENABLE_GMOCK "Build CHAI with gmock" On "ENABLE_GMOCK" Off ) -cmake_dependent_option(CHAI_ENABLE_REPRODUCERS "Build CHAI reproducers" On - "ENABLE_REPRODUCERS" Off) include(cmake/ChaiBasics.cmake) From 7d0cde3ab89965f77649f4e41cacf44b01aade13 Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Tue, 17 Sep 2024 09:09:36 -0700 Subject: [PATCH 15/16] Add comments to reproducer --- ...ed_ptr_multiple_inheritance_reproducer.cpp | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp index bcae2c75..f1ec94a7 100644 --- a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp +++ b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp @@ -4,6 +4,27 @@ // // SPDX-License-Identifier: BSD-3-Clause ////////////////////////////////////////////////////////////////////////////// +// +// To reproduce crash on with a ROCM compiler: +// % mkdir build_rocm +// % cd build_rocm +// % cmake -DCHAI_ENABLE_REPRODUCERS=1 -C ../host-configs/lc/toss_4_x86_64_ib_cray/amdclang.cmake .. +// % flux alloc -N 1 -n 1 -g1 make -j 40 +// % flux alloc -N 1 -n 1 -g1 ./bin/managed_ptr_multiple_inheritance_reproducer.exe +// +// - Note that the "this" pointer in YofXfromRTTable1D::RootFromBaseX differs from the +// "this" pointer in other YofXfromRTTable1D methods. +// - Interestingly , the crash goes away if GetNumStrings() is removed +// +// The NVCC case does not crash and has consistent pointer addresses in YofXfromRTTable1D. +// This can be reproduced with: +// % mkdir build_cuda +// % cd build_cuda +// % cmake -DCHAI_ENABLE_REPRODUCERS=1 -C ../host-configs/lc/blueos_3_ppc64le_ib_p9/nvcc_clang.cmake .. +// % lalloc 1 make -j 40 +// % lalloc 1 ./bin/managed_ptr_multiple_inheritance_reproducer.exe +// + #include "chai/config.hpp" #include "chai/managed_ptr.hpp" #include "chai/ArrayManager.hpp" From 58f3460207d9040c4f4f72270862a4e4bde0cd1d Mon Sep 17 00:00:00 2001 From: "Benjamin T. Liu" Date: Tue, 17 Sep 2024 09:10:50 -0700 Subject: [PATCH 16/16] Update comment --- reproducers/managed_ptr_multiple_inheritance_reproducer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp index f1ec94a7..fb638ef2 100644 --- a/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp +++ b/reproducers/managed_ptr_multiple_inheritance_reproducer.cpp @@ -13,7 +13,8 @@ // % flux alloc -N 1 -n 1 -g1 ./bin/managed_ptr_multiple_inheritance_reproducer.exe // // - Note that the "this" pointer in YofXfromRTTable1D::RootFromBaseX differs from the -// "this" pointer in other YofXfromRTTable1D methods. +// "this" pointer in other YofXfromRTTable1D methods. The crash occurs because m_table is null +// and is dereferenced. // - Interestingly , the crash goes away if GetNumStrings() is removed // // The NVCC case does not crash and has consistent pointer addresses in YofXfromRTTable1D.