Remove the concept of a resource directory

The concept of a resource directory was confusing, error-prone and
was only used to specify the directory of the base config json anyway.
Therefore, remove the concept of the resource directory and use the
parent directory of the base config directly.
This commit is contained in:
2025-04-07 12:58:13 +02:00
parent ee85f0df8f
commit a97b676b92
11 changed files with 35 additions and 49 deletions

View File

@@ -52,13 +52,12 @@ static void example_simulation(benchmark::State& state, Args&&... args)
{
sc_core::sc_get_curr_simcontext()->reset();
std::filesystem::path configFile(std::get<0>(args_tuple));
std::filesystem::path resourceDirectory("configs");
std::filesystem::path configFile = std::get<0>(args_tuple);
DRAMSys::Config::Configuration configuration =
DRAMSys::Config::from_path(configFile.c_str());
Simulator simulator(std::move(configuration), std::move(resourceDirectory));
Simulator simulator(std::move(configuration), configFile);
simulator.run();
}

View File

@@ -50,10 +50,5 @@ target_link_libraries(configuration
nlohmann_json::nlohmann_json
)
target_compile_definitions(configuration
PUBLIC
DRAMSYS_RESOURCE_DIR="${DRAMSYS_RESOURCE_DIR}"
)
target_compile_features(configuration PUBLIC cxx_std_17)
add_library(DRAMSys::config ALIAS configuration)

View File

@@ -41,9 +41,10 @@
namespace DRAMSys::Config
{
Configuration from_path(std::string_view path, std::string_view resourceDirectory)
Configuration from_path(std::filesystem::path baseConfig)
{
std::ifstream file(path.data());
std::ifstream file(baseConfig);
std::filesystem::path baseDir = baseConfig.parent_path();
enum class SubConfig
{
@@ -59,7 +60,7 @@ Configuration from_path(std::string_view path, std::string_view resourceDirector
// with the actual json data.
std::function<bool(int depth, nlohmann::detail::parse_event_t event, json_t& parsed)>
parser_callback;
parser_callback = [&parser_callback, &current_sub_config, resourceDirectory](
parser_callback = [&parser_callback, &current_sub_config, baseDir](
int depth, nlohmann::detail::parse_event_t event, json_t& parsed) -> bool
{
using nlohmann::detail::parse_event_t;
@@ -90,12 +91,11 @@ Configuration from_path(std::string_view path, std::string_view resourceDirector
if (event == parse_event_t::value && current_sub_config != SubConfig::Unkown)
{
// Replace name of json file with actual json data
auto parse_json = [&parser_callback,
resourceDirectory](std::string_view base_dir,
std::string_view sub_config_key,
const std::string& filename) -> json_t
auto parse_json = [&parser_callback, baseDir](std::string_view base_dir,
std::string_view sub_config_key,
const std::string& filename) -> json_t
{
std::filesystem::path path(resourceDirectory);
std::filesystem::path path{baseDir};
path /= base_dir;
path /= filename;
@@ -129,7 +129,7 @@ Configuration from_path(std::string_view path, std::string_view resourceDirector
json_t simulation = json_t::parse(file, parser_callback, true, true).at(Configuration::KEY);
return simulation.get<Config::Configuration>();
}
throw std::runtime_error("Failed to open file " + std::string(path));
throw std::runtime_error("Failed to open file " + std::string(baseConfig));
}
} // namespace DRAMSys::Config

View File

@@ -75,8 +75,7 @@ struct Configuration
NLOHMANN_JSONIFY_ALL_THINGS(
Configuration, addressmapping, mcconfig, memspec, simconfig, simulationid, tracesetup)
Configuration from_path(std::string_view path,
std::string_view resourceDirectory = DRAMSYS_RESOURCE_DIR);
Configuration from_path(std::filesystem::path baseConfig);
} // namespace DRAMSys::Config

View File

@@ -100,6 +100,7 @@ target_compile_features(libdramsys PUBLIC cxx_std_17)
target_compile_definitions(libdramsys
PUBLIC
DRAMSYS_RESOURCE_DIR="${DRAMSYS_RESOURCE_DIR}"
$<$<BOOL:${DRAMPower_FOUND}>:DRAMPOWER>
)

View File

@@ -42,21 +42,15 @@
int sc_main(int argc, char** argv)
{
std::filesystem::path resourceDirectory = DRAMSYS_RESOURCE_DIR;
if (argc >= 3)
{
resourceDirectory = argv[2];
}
std::filesystem::path baseConfig = resourceDirectory / "ddr4-example.json";
if (argc >= 2)
{
baseConfig = argv[1];
}
DRAMSys::Config::Configuration configuration =
DRAMSys::Config::from_path(baseConfig.c_str(), resourceDirectory.c_str());
DRAMSys::Config::Configuration configuration = DRAMSys::Config::from_path(baseConfig.c_str());
Simulator simulator(std::move(configuration), std::move(resourceDirectory));
Simulator simulator(std::move(configuration), std::move(baseConfig));
simulator.run();
return 0;

View File

@@ -41,13 +41,12 @@
#include "player/StlPlayer.h"
#include "util.h"
Simulator::Simulator(DRAMSys::Config::Configuration configuration,
std::filesystem::path resourceDirectory) :
Simulator::Simulator(DRAMSys::Config::Configuration configuration, std::filesystem::path baseConfig) :
storageEnabled(configuration.simconfig.StoreMode == DRAMSys::Config::StoreModeType::Store),
memoryManager(storageEnabled),
configuration(std::move(configuration)),
resourceDirectory(std::move(resourceDirectory)),
dramSys(std::make_unique<DRAMSys::DRAMSys>("DRAMSys", this->configuration))
dramSys(std::make_unique<DRAMSys::DRAMSys>("DRAMSys", this->configuration)),
baseConfig(baseConfig)
{
terminateInitiator = [this]()
{
@@ -104,7 +103,7 @@ Simulator::instantiateInitiator(const DRAMSys::Config::Initiator& initiator)
}
else if constexpr (std::is_same_v<T, DRAMSys::Config::TracePlayer>)
{
std::filesystem::path tracePath = resourceDirectory / TRACE_DIRECTORY / config.name;
std::filesystem::path tracePath = baseConfig.parent_path() / TRACE_DIRECTORY / config.name;
std::optional<StlPlayer::TraceType> traceType;

View File

@@ -46,8 +46,7 @@ static constexpr std::string_view TRACE_DIRECTORY = "traces";
class Simulator
{
public:
Simulator(DRAMSys::Config::Configuration configuration,
std::filesystem::path resourceDirectory);
Simulator(DRAMSys::Config::Configuration configuration, std::filesystem::path baseConfig);
void run();
@@ -58,7 +57,6 @@ private:
MemoryManager memoryManager;
DRAMSys::Config::Configuration configuration;
std::filesystem::path resourceDirectory;
std::unique_ptr<DRAMSys::DRAMSys> dramSys;
std::vector<std::unique_ptr<Initiator>> initiators;
@@ -69,4 +67,6 @@ private:
unsigned int terminatedInitiators = 0;
uint64_t totalTransactions{};
uint64_t transactionsFinished = 0;
std::filesystem::path baseConfig;
};

View File

@@ -291,7 +291,7 @@ TEST_F(ConfigurationTest, DumpConfiguration)
TEST(Configuration, ResourceDirectory)
{
// Test should not throw exceptions
Configuration config = from_path("resources/ddr5-example.json", "resources");
Configuration config = from_path("resources/ddr5-example.json");
}
TEST(Configuration, FromPath)

View File

@@ -48,7 +48,7 @@ set(TABLES_TO_COMPARE
Power
)
function(test_standard standard test_name base_config resource_dir output_filename)
function(test_standard standard test_name base_config output_filename)
if(NOT IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${standard})
message(WARNING "Cannot find regression test ${standard}")
return()
@@ -61,7 +61,7 @@ function(test_standard standard test_name base_config resource_dir output_filena
add_test(
NAME Regression${test_name}.CreateDatabase
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${test_name}
COMMAND $<TARGET_FILE:DRAMSys> ${base_config} ${resource_dir}
COMMAND $<TARGET_FILE:DRAMSys> ${base_config}
)
set_tests_properties(Regression${test_name}.CreateDatabase PROPERTIES FIXTURES_SETUP Regression${test_name}.CreateDatabase)
@@ -89,12 +89,12 @@ function(test_standard standard test_name base_config resource_dir output_filena
endforeach()
endfunction()
test_standard(DDR3 DDR3 ${CMAKE_CURRENT_SOURCE_DIR}/DDR3/ddr3-example.json ${CMAKE_CURRENT_SOURCE_DIR}/DDR3 DRAMSys_ddr3-dual-rank_ddr3_ch0.tdb)
test_standard(DDR4 DDR4 ${CMAKE_CURRENT_SOURCE_DIR}/DDR4/ddr4-example.json ${CMAKE_CURRENT_SOURCE_DIR}/DDR4 DRAMSys_ddr4-bankgrp_ddr4_ch0.tdb)
test_standard(DDR5 DDR5.Ch0 ${CMAKE_CURRENT_SOURCE_DIR}/DDR5/ddr5-example.json ${CMAKE_CURRENT_SOURCE_DIR}/DDR5 DRAMSys_ddr5-example_ddr5_ch0.tdb)
test_standard(DDR5 DDR5.Ch1 ${CMAKE_CURRENT_SOURCE_DIR}/DDR5/ddr5-example.json ${CMAKE_CURRENT_SOURCE_DIR}/DDR5 DRAMSys_ddr5-example_ddr5_ch1.tdb)
test_standard(LPDDR4 LPDDR4 ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR4/lpddr4-example.json ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR4 DRAMSys_lpddr4-example_lpddr4_ch0.tdb)
test_standard(LPDDR5 LPDDR5 ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR5/lpddr5-example.json ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR5 DRAMSys_lpddr5-example_lpddr5_ch0.tdb)
test_standard(HBM2 HBM2.Ch0 ${CMAKE_CURRENT_SOURCE_DIR}/HBM2/hbm2-example.json ${CMAKE_CURRENT_SOURCE_DIR}/HBM2 DRAMSys_hbm2-example_hbm2_ch0.tdb)
test_standard(HBM2 HBM2.Ch1 ${CMAKE_CURRENT_SOURCE_DIR}/HBM2/hbm2-example.json ${CMAKE_CURRENT_SOURCE_DIR}/HBM2 DRAMSys_hbm2-example_hbm2_ch1.tdb)
test_standard(HBM3 HBM3 ${CMAKE_CURRENT_SOURCE_DIR}/HBM3/hbm3-example.json ${CMAKE_CURRENT_SOURCE_DIR}/HBM3 DRAMSys_hbm3-example_hbm3_ch0.tdb)
test_standard(DDR3 DDR3 ${CMAKE_CURRENT_SOURCE_DIR}/DDR3/ddr3-example.json DRAMSys_ddr3-dual-rank_ddr3_ch0.tdb)
test_standard(DDR4 DDR4 ${CMAKE_CURRENT_SOURCE_DIR}/DDR4/ddr4-example.json DRAMSys_ddr4-bankgrp_ddr4_ch0.tdb)
test_standard(DDR5 DDR5.Ch0 ${CMAKE_CURRENT_SOURCE_DIR}/DDR5/ddr5-example.json DRAMSys_ddr5-example_ddr5_ch0.tdb)
test_standard(DDR5 DDR5.Ch1 ${CMAKE_CURRENT_SOURCE_DIR}/DDR5/ddr5-example.json DRAMSys_ddr5-example_ddr5_ch1.tdb)
test_standard(LPDDR4 LPDDR4 ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR4/lpddr4-example.json DRAMSys_lpddr4-example_lpddr4_ch0.tdb)
test_standard(LPDDR5 LPDDR5 ${CMAKE_CURRENT_SOURCE_DIR}/LPDDR5/lpddr5-example.json DRAMSys_lpddr5-example_lpddr5_ch0.tdb)
test_standard(HBM2 HBM2.Ch0 ${CMAKE_CURRENT_SOURCE_DIR}/HBM2/hbm2-example.json DRAMSys_hbm2-example_hbm2_ch0.tdb)
test_standard(HBM2 HBM2.Ch1 ${CMAKE_CURRENT_SOURCE_DIR}/HBM2/hbm2-example.json DRAMSys_hbm2-example_hbm2_ch1.tdb)
test_standard(HBM3 HBM3 ${CMAKE_CURRENT_SOURCE_DIR}/HBM3/hbm3-example.json DRAMSys_hbm3-example_hbm3_ch0.tdb)

View File

@@ -54,9 +54,8 @@ int main(int argc, char** argv)
}
std::string pathToJson = argv[1];
std::string resourceDirectory = argc <= 3 ? DRAMSYS_RESOURCE_DIR : argv[3];
auto configuration = DRAMSys::Config::from_path(pathToJson, resourceDirectory);
auto configuration = DRAMSys::Config::from_path(pathToJson);
nlohmann::json json;
json["simulation"] = configuration;