CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
179 lines
7.1 KiB
C++
179 lines
7.1 KiB
C++
// Copyright Advanced Micro Devices, Inc., or its affiliates.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#pragma once
|
|
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <memory>
|
|
#include <ranges>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
#include <rocRoller/AssemblyKernel_fwd.hpp>
|
|
#include <rocRoller/CodeGen/ArgumentLoader_fwd.hpp>
|
|
#include <rocRoller/CodeGen/BranchGenerator_fwd.hpp>
|
|
#include <rocRoller/CodeGen/CopyGenerator_fwd.hpp>
|
|
#include <rocRoller/CodeGen/CrashKernelGenerator_fwd.hpp>
|
|
#include <rocRoller/CodeGen/Instruction_fwd.hpp>
|
|
#include <rocRoller/CodeGen/MemoryInstructions_fwd.hpp>
|
|
#include <rocRoller/Context_fwd.hpp>
|
|
#include <rocRoller/DataTypes/DataTypes.hpp>
|
|
#include <rocRoller/Expression_fwd.hpp>
|
|
#include <rocRoller/GPUArchitecture/GPUArchitecture.hpp>
|
|
#include <rocRoller/GPUArchitecture/GPUArchitectureTarget_fwd.hpp>
|
|
#include <rocRoller/InstructionValues/LDSAllocator_fwd.hpp>
|
|
#include <rocRoller/InstructionValues/LabelAllocator_fwd.hpp>
|
|
#include <rocRoller/InstructionValues/RegisterAllocator_fwd.hpp>
|
|
#include <rocRoller/InstructionValues/Register_fwd.hpp>
|
|
#include <rocRoller/KernelGraph/RegisterTagManager_fwd.hpp>
|
|
#include <rocRoller/KernelGraph/ScopeManager_fwd.hpp>
|
|
#include <rocRoller/KernelOptions.hpp>
|
|
#include <rocRoller/Operations/Scratch_fwd.hpp>
|
|
#include <rocRoller/ScheduledInstructions_fwd.hpp>
|
|
#include <rocRoller/Scheduling/Scheduling_fwd.hpp>
|
|
#include <rocRoller/Utilities/Random_fwd.hpp>
|
|
|
|
class ContextFixture;
|
|
|
|
namespace rocRoller
|
|
{
|
|
class Context : public std::enable_shared_from_this<Context>
|
|
{
|
|
public:
|
|
Context();
|
|
~Context();
|
|
|
|
static ContextPtr ForDefaultHipDevice(std::string const& kernelName,
|
|
KernelOptions const& kernelOpts = {});
|
|
|
|
static ContextPtr ForHipDevice(int deviceIdx,
|
|
std::string const& kernelName,
|
|
KernelOptions const& kernelOpts = {});
|
|
|
|
static ContextPtr ForTarget(GPUArchitectureTarget const& arch,
|
|
std::string const& kernelName,
|
|
KernelOptions const& kernelOpts = {});
|
|
|
|
static ContextPtr ForTarget(GPUArchitecture const& arch,
|
|
std::string const& kernelName,
|
|
KernelOptions const& kernelOpts = {});
|
|
|
|
Scheduling::InstructionStatus peek(Instruction const& inst);
|
|
|
|
void schedule(Instruction& inst);
|
|
template <std::ranges::input_range T>
|
|
void schedule(T const& insts);
|
|
template <std::ranges::input_range T>
|
|
void schedule(T&& insts);
|
|
|
|
std::shared_ptr<Register::Allocator> allocator(Register::Type registerType);
|
|
|
|
Register::ValuePtr getM0();
|
|
Register::ValuePtr getVCC();
|
|
Register::ValuePtr getVCC_LO();
|
|
Register::ValuePtr getVCC_HI();
|
|
Register::ValuePtr getSCC();
|
|
Register::ValuePtr getEXECZ();
|
|
Register::ValuePtr getEXEC();
|
|
Register::ValuePtr getTTMP6();
|
|
Register::ValuePtr getTTMP7();
|
|
Register::ValuePtr getTTMP9();
|
|
Register::ValuePtr getSpecial(Register::Type t);
|
|
|
|
std::shared_ptr<Scheduling::IObserver> observer() const;
|
|
|
|
AssemblyKernelPtr kernel() const;
|
|
std::shared_ptr<ArgumentLoader> argLoader() const;
|
|
std::shared_ptr<ScheduledInstructions> instructions() const;
|
|
std::shared_ptr<MemoryInstructions> mem() const;
|
|
std::shared_ptr<CopyGenerator> copier() const;
|
|
std::shared_ptr<BranchGenerator> brancher() const;
|
|
std::shared_ptr<CrashKernelGenerator> crasher() const;
|
|
KernelOptions const& kernelOptions();
|
|
|
|
std::shared_ptr<RandomGenerator> random() const;
|
|
void setRandomSeed(int seed);
|
|
|
|
std::string assemblyFileName() const;
|
|
|
|
LabelAllocatorPtr labelAllocator() const;
|
|
std::shared_ptr<LDSAllocator> ldsAllocator() const;
|
|
RegTagManPtr registerTagManager() const;
|
|
GPUArchitecture const& targetArchitecture() const;
|
|
int hipDeviceIndex() const;
|
|
|
|
void setKernel(AssemblyKernelPtr);
|
|
|
|
/**
|
|
* @brief Allocate scratch space for the specified scratch policy.
|
|
*
|
|
* @param policy The scratch policy to allocate for
|
|
* @param size Number of bytes requested
|
|
* @return Expression::ExpressionPtr The offset before this allocation
|
|
*/
|
|
Expression::ExpressionPtr allocateScratch(Operations::ScratchPolicy policy,
|
|
Expression::ExpressionPtr size);
|
|
|
|
/**
|
|
* @brief Returns an expression representing how much scratch space is required (in bytes)
|
|
* for the specified scratch policy.
|
|
*
|
|
* @param policy The scratch policy to query
|
|
* @return Expression::ExpressionPtr
|
|
*/
|
|
Expression::ExpressionPtr getScratchAmount(Operations::ScratchPolicy policy) const;
|
|
|
|
/**
|
|
* @brief Get register scope manager.
|
|
*/
|
|
std::shared_ptr<KernelGraph::ScopeManager> getScopeManager() const;
|
|
|
|
/**
|
|
* @brief Set register scope manager.
|
|
*/
|
|
void setScopeManager(std::shared_ptr<KernelGraph::ScopeManager>);
|
|
|
|
friend class ::ContextFixture;
|
|
|
|
private:
|
|
static ContextPtr Create(int deviceIndex,
|
|
GPUArchitecture const& arch,
|
|
std::string const& kernelName,
|
|
KernelOptions const& kernelOpts);
|
|
|
|
void scheduleCopy(Instruction const& inst);
|
|
|
|
// If we are generating code for a real Hip device, refers to its
|
|
// device index.
|
|
int m_hipDeviceIdx = -1;
|
|
GPUArchitecture m_targetArch;
|
|
RegTagManPtr m_registerTagMan;
|
|
std::array<std::shared_ptr<Register::Allocator>, static_cast<size_t>(Register::Type::Count)>
|
|
m_allocators;
|
|
|
|
std::shared_ptr<Scheduling::IObserver> m_observer;
|
|
AssemblyKernelPtr m_kernel;
|
|
std::shared_ptr<ArgumentLoader> m_argLoader;
|
|
std::shared_ptr<ScheduledInstructions> m_instructions;
|
|
std::shared_ptr<MemoryInstructions> m_mem;
|
|
LabelAllocatorPtr m_labelAllocator;
|
|
std::shared_ptr<LDSAllocator> m_ldsAllocator;
|
|
std::array<Expression::ExpressionPtr, static_cast<size_t>(Operations::ScratchPolicy::Count)>
|
|
m_scratchSizes;
|
|
std::shared_ptr<CopyGenerator> m_copier;
|
|
std::shared_ptr<BranchGenerator> m_brancher;
|
|
std::shared_ptr<CrashKernelGenerator> m_crasher;
|
|
std::shared_ptr<RandomGenerator> m_random;
|
|
std::shared_ptr<KernelGraph::ScopeManager> m_scope;
|
|
|
|
std::string m_assemblyFileName;
|
|
KernelOptions m_kernelOptions;
|
|
};
|
|
|
|
std::ostream& operator<<(std::ostream&, ContextPtr const&);
|
|
}
|
|
|
|
#include <rocRoller/Context_impl.hpp>
|