Browse Source

add nlohmann::json as submodule for json parsing, add helper that can read and write task description

master
Constantin Fürst 1 year ago
parent
commit
fae50875ec
  1. 3
      .gitmodules
  2. 29
      benchmarks/error.hpp
  3. 1
      benchmarks/json
  4. 70
      benchmarks/logging-helper.hpp
  5. 13
      benchmarks/task-description.json

3
.gitmodules

@ -1,3 +1,6 @@
[submodule "gosh"]
path = thesis/gosh
url = https://github.com/nfeske/gosh.git
[submodule "benchmarks/json"]
path = benchmarks/json
url = https://github.com/nlohmann/json

29
benchmarks/error.hpp

@ -1,29 +0,0 @@
#pragma once
#include <iostream>
#include <dml/dml.hpp>
inline std::ostream& operator<<(std::ostream& strm, const dml::status_code code) {
switch(code) {
case dml::status_code::ok: strm << "[ok]"; break;
case dml::status_code::false_predicate: strm << "[false predicate]"; break;
case dml::status_code::partial_completion: strm << "[partial completion]"; break;
case dml::status_code::nullptr_error: strm << "[nullptr error]"; break;
case dml::status_code::bad_size: strm << "[bad size]"; break;
case dml::status_code::bad_length: strm << "[bad length]"; break;
case dml::status_code::inconsistent_size: strm << "[inconsistent size]"; break;
case dml::status_code::dualcast_bad_padding: strm << "[dualcast bad padding]"; break;
case dml::status_code::bad_alignment: strm << "[bad alignment]"; break;
case dml::status_code::buffers_overlapping: strm << "[buffers overlapping]"; break;
case dml::status_code::delta_delta_empty: strm << "[delta delta empty]"; break;
case dml::status_code::batch_overflow: strm << "[batch overflow]"; break;
case dml::status_code::execution_failed: strm << "[execution failed]"; break;
case dml::status_code::unsupported_operation: strm << "[unsupported operation]"; break;
case dml::status_code::queue_busy: strm << "[queue busy]"; break;
case dml::status_code::error: strm << "[unknown error]"; break;
case dml::status_code::config_error: strm << "[config error]"; break;
default: strm << "[unhandled error]"; break;
}
return strm;
}

1
benchmarks/json

@ -0,0 +1 @@
Subproject commit 360ce457f46f03111332f473fdbb3a353f16723c

70
benchmarks/logging-helper.hpp

@ -0,0 +1,70 @@
#pragma once
#include <iostream>
#include "json/single_include/nlohmann/json.hpp"
#include "execute-move.hpp"
inline const std::string StatusCodeToString(const dml::status_code code) {
switch(code) {
case dml::status_code::ok: return "[ok]";
case dml::status_code::false_predicate: return "[false predicate]";
case dml::status_code::partial_completion: return "[partial completion]";
case dml::status_code::nullptr_error: return "[nullptr error]";
case dml::status_code::bad_size: return "[bad size]";
case dml::status_code::bad_length: return "[bad length]";
case dml::status_code::inconsistent_size: return "[inconsistent size]";
case dml::status_code::dualcast_bad_padding: return "[dualcast bad padding]";
case dml::status_code::bad_alignment: return "[bad alignment]";
case dml::status_code::buffers_overlapping: return "[buffers overlapping]";
case dml::status_code::delta_delta_empty: return "[delta delta empty]";
case dml::status_code::batch_overflow: return "[batch overflow]";
case dml::status_code::execution_failed: return "[execution failed]";
case dml::status_code::unsupported_operation: return "[unsupported operation]";
case dml::status_code::queue_busy: return "[queue busy]";
case dml::status_code::error: return "[unknown error]";
case dml::status_code::config_error: return "[config error]";
default: return "[unhandled error]";
}
}
inline void to_json(nlohmann::json& j, const ThreadArgs& a) {
j = nlohmann::json{
{"node", a.numa_node}, {"core", a.core}, {"size", a.size},
{"nnode_src", a.nnode_src}, {"nnode_dst", a.nnode_dst},
{"time_us", a.duration.count()},
{"status", StatusCodeToString(a.status)}
};
}
inline void from_json(const nlohmann::json& j, ThreadArgs& a) {
j.at("node").get_to(a.numa_node);
j.at("core").get_to(a.core);
j.at("size").get_to(a.size);
j.at("nnode_src").get_to(a.nnode_src);
j.at("nnode_dst").get_to(a.nnode_dst);
}
inline void WriteResultLog(const std::vector<ThreadArgs>& args, const std::string& path, std::ostream& os) {
nlohmann::json json;
json["count"] = args.size();
json["path"] = path;
json["list"] = args;
os << std::setw(4) << json;
}
inline void ReadWorkDescription(std::vector<ThreadArgs>& args, std::string& path, std::istream& is) {
nlohmann::json json;
is >> json;
const uint32_t count = json.at("count");
args.resize(count);
path = json.at("path");
for (uint32_t i = 0; i < count; i++) {
args[i] = json["list"][i].template get<ThreadArgs>();
}
}

13
benchmarks/task-description.json

@ -0,0 +1,13 @@
{
"count": 1,
"path" : "sw",
"list": [
{
"core": 0,
"nnode_dst": 0,
"nnode_src": 0,
"node": 0,
"size": 4096
}
]
}
Loading…
Cancel
Save