Files
TheRock/rocm-systems/projects/rocprof-trace-decoder/source/gfx9/gfx9wave.h
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

115 lines
3.6 KiB
C++

// MIT License
//
// Copyright (c) 2024-2026 Advanced Micro Devices, Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
#pragma once
#include <set>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#include "gfx9token.h"
#include "trace_parser.hpp"
namespace gfx9
{
struct wave_t : public WaveDataInternal
{
wave_t(int cu, pcinfo_t addr, Wave&, int64_t token_time);
int cur_state = 0;
int64_t state_start_cycle = 0;
int64_t last_message_time = 0;
std::vector<int64_t> stall_start_times{};
std::vector<int64_t> issued_instructions{};
std::array<size_t, 17> last_inst_for_xnack{};
void complete_wave(int64_t token_time);
void apply_inst(Token& token, int64_t& start_phase);
void apply_pc(Token& token, const CachedTable& table);
int64_t apply_issue(uint64_t wave_status, int64_t token_time);
};
class CSRegisterHandlerGFX9 : public CSRegisterHandler
{
static constexpr size_t SQTT_TOKEN_REG = 2;
static constexpr size_t SQTT_TOKEN_REG_CS = 5;
static constexpr size_t SQTT_TOKEN_REG_CS_PRIV = 15;
public:
bool IsRegCS(size_t type) { return type == SQTT_TOKEN_REG_CS || type == SQTT_TOKEN_REG_CS_PRIV; };
bool IsRegNoCS(size_t type) { return type == SQTT_TOKEN_REG; };
void HandleRealtimeClock(size_t time, size_t data);
enum RealtimeEntry
{
RT_DELTA = 0,
RT_HI,
RT_LOW,
RT_LAST
};
int userdata3_count = 0;
bool userdata3_known = false;
std::array<size_t, RT_LAST> userdata3_values{};
};
class MISQTTParser : public SQTTParser
{
public:
MISQTTParser(int tg_cu, bool _double_buffer, bool is_mi350) : target_cu(tg_cu), double_buffer(_double_buffer)
{
csregister.tt_version = is_mi350 ? 1 : 0;
};
~MISQTTParser() override{};
void sqtt_simd_analysis(CppReturnInfo& info, class TokenGenerator& generator, class Stitcher& stitch) override;
static constexpr uint64_t SQTT_CFG_SIMDS = 4;
static constexpr uint64_t SQTT_CFG_WAVES = 10;
static constexpr int NUM_CU = 16;
static constexpr int NUM_BANK = 4;
typedef std::array<std::array<std::vector<wave_t>, SQTT_CFG_WAVES>, SQTT_CFG_SIMDS> WaveArray;
protected:
static int64_t array_apply_issue(Token& token, WaveArray& SIMD);
const int target_cu;
const bool double_buffer;
WaveArray SIMD{};
std::array<std::array<int64_t, NUM_BANK>, NUM_CU> last_event{};
std::array<std::array<bool, NUM_BANK>, NUM_CU> last_value{};
int64_t CYCLE_START_PHASE{15};
std::unordered_map<uint64_t, pcinfo_t> running_waves{};
CSRegisterHandlerGFX9 csregister;
};
}; // namespace gfx9