* Add more GPU architectures support * Update layout.py * Optimize performance, Add SM90 support, Add 1D2D SM100 support * Add fmtlib submodule at commit 553ec11 --------- Co-authored-by: fzyzcjy <5236035+fzyzcjy@users.noreply.github.com>
71 lines
2.1 KiB
C++
71 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include <random>
|
|
#include <string>
|
|
#include <memory>
|
|
|
|
#include "exception.hpp"
|
|
|
|
namespace deep_gemm {
|
|
|
|
// ReSharper disable once CppNotAllPathsReturnValue
|
|
template <typename dtype_t>
|
|
static dtype_t get_env(const std::string& name, const dtype_t& default_value = dtype_t()) {
|
|
const auto& c_str = std::getenv(name.c_str());
|
|
if (c_str == nullptr)
|
|
return default_value;
|
|
|
|
// Read the env and convert to the desired type
|
|
if constexpr (std::is_same_v<dtype_t, std::string>) {
|
|
return std::string(c_str);
|
|
} else if constexpr (std::is_same_v<dtype_t, int>) {
|
|
int value;
|
|
std::sscanf(c_str, "%d", &value);
|
|
return value;
|
|
} else {
|
|
DG_HOST_ASSERT(false and "Unexpected type");
|
|
}
|
|
}
|
|
|
|
static std::tuple<int, std::string> call_external_command(std::string command) {
|
|
command = command + " 2>&1";
|
|
const auto& deleter = [](FILE* f) { if (f) pclose(f); };
|
|
std::unique_ptr<FILE, decltype(deleter)> pipe(popen(command.c_str(), "r"), deleter);
|
|
DG_HOST_ASSERT(pipe != nullptr);
|
|
|
|
std::array<char, 512> buffer;
|
|
std::string output;
|
|
while (fgets(buffer.data(), buffer.size(), pipe.get()))
|
|
output += buffer.data();
|
|
const auto& exit_code = WEXITSTATUS(pclose(pipe.release()));
|
|
return {exit_code, output};
|
|
}
|
|
|
|
static std::filesystem::path make_dirs(const std::filesystem::path& path) {
|
|
// OK if existed
|
|
std::error_code capture;
|
|
const bool& created = std::filesystem::create_directories(path, capture);
|
|
DG_HOST_ASSERT(created or capture.value() == 0);
|
|
if (created and get_env<int>("DG_JIT_DEBUG"))
|
|
printf("Create directory: %s\n", path.c_str());
|
|
return path;
|
|
}
|
|
|
|
static std::string get_uuid() {
|
|
static std::random_device rd;
|
|
static std::mt19937 gen([]() {
|
|
return rd() ^ std::chrono::steady_clock::now().time_since_epoch().count();
|
|
}());
|
|
static std::uniform_int_distribution<uint32_t> dist;
|
|
|
|
std::stringstream ss;
|
|
ss << getpid() << "-"
|
|
<< std::hex << std::setfill('0')
|
|
<< std::setw(8) << dist(gen) << "-"
|
|
<< std::setw(8) << dist(gen) << "-"
|
|
<< std::setw(8) << dist(gen);
|
|
return ss.str();
|
|
}
|
|
|
|
} // deep_gemm
|