1
0
mirror of https://github.com/wolfpld/tracy synced 2025-04-29 20:33:52 +00:00

Select microarchitecture basing on cpuid.

This commit is contained in:
Bartosz Taudul 2020-05-07 00:53:31 +02:00
parent eab3adfa1d
commit 15454d2253
4 changed files with 96 additions and 2 deletions

View File

@ -87,8 +87,6 @@ SourceView::SourceView( ImFont* font )
, m_cpuArch( CpuArchUnknown ) , m_cpuArch( CpuArchUnknown )
, m_showLatency( false ) , m_showLatency( false )
{ {
SelectMicroArchitecture( "ZEN2" );
m_microArchOpMap.reserve( OpsNum ); m_microArchOpMap.reserve( OpsNum );
for( int i=0; i<OpsNum; i++ ) for( int i=0; i<OpsNum; i++ )
{ {
@ -293,6 +291,94 @@ SourceView::~SourceView()
delete[] m_data; delete[] m_data;
} }
static constexpr uint32_t PackCpuInfo( uint32_t cpuid )
{
return ( cpuid & 0xFFF ) | ( ( cpuid & 0xFFF0000 ) >> 4 );
}
struct CpuIdMap
{
uint32_t cpuInfo;
const char* moniker;
};
// .------ extended family id
// |.----- extended model id
// || .--- family id
// || |.-- model
// || ||.- stepping
// || |||
static constexpr CpuIdMap s_cpuIdMap[] = {
{ PackCpuInfo( 0x810F81 ), "ZEN+" },
{ PackCpuInfo( 0x800F82 ), "ZEN+" },
{ PackCpuInfo( 0x870F10 ), "ZEN2" },
{ PackCpuInfo( 0x830F10 ), "ZEN2" },
{ PackCpuInfo( 0x860F01 ), "ZEN2" },
{ PackCpuInfo( 0x0706E5 ), "ICL" },
{ PackCpuInfo( 0x060663 ), "CNL" },
{ PackCpuInfo( 0x0906EA ), "CFL" },
{ PackCpuInfo( 0x0906EB ), "CFL" },
{ PackCpuInfo( 0x0906EC ), "CFL" },
{ PackCpuInfo( 0x0906ED ), "CFL" },
{ PackCpuInfo( 0x0806E9 ), "KBL" },
{ PackCpuInfo( 0x0806EA ), "KBL" },
{ PackCpuInfo( 0x0906E9 ), "KBL" },
{ PackCpuInfo( 0x050654 ), "SKX" },
{ PackCpuInfo( 0x0406E3 ), "SKL" },
{ PackCpuInfo( 0x0506E0 ), "SKL" },
{ PackCpuInfo( 0x0506E3 ), "SKL" },
{ PackCpuInfo( 0x0306D4 ), "BDW" },
{ PackCpuInfo( 0x040671 ), "BDW" },
{ PackCpuInfo( 0x0406F1 ), "BDW" },
{ PackCpuInfo( 0x0306C3 ), "HSW" },
{ PackCpuInfo( 0x0306F2 ), "HSW" },
{ PackCpuInfo( 0x040651 ), "HSW" },
{ PackCpuInfo( 0x0306A9 ), "IVB" },
{ PackCpuInfo( 0x0306E3 ), "IVB" },
{ PackCpuInfo( 0x0306E4 ), "IVB" },
{ PackCpuInfo( 0x0206A2 ), "SNB" },
{ PackCpuInfo( 0x0206A7 ), "SNB" },
{ PackCpuInfo( 0x0206D5 ), "SNB" },
{ PackCpuInfo( 0x0206D6 ), "SNB" },
{ PackCpuInfo( 0x0206D7 ), "SNB" },
{ PackCpuInfo( 0x0206F2 ), "WSM" },
{ PackCpuInfo( 0x0206C0 ), "WSM" },
{ PackCpuInfo( 0x0206C1 ), "WSM" },
{ PackCpuInfo( 0x0206C2 ), "WSM" },
{ PackCpuInfo( 0x020652 ), "WSM" },
{ PackCpuInfo( 0x020655 ), "WSM" },
{ PackCpuInfo( 0x0206E6 ), "NHM" },
{ PackCpuInfo( 0x0106A1 ), "NHM" },
{ PackCpuInfo( 0x0106A2 ), "NHM" },
{ PackCpuInfo( 0x0106A4 ), "NHM" },
{ PackCpuInfo( 0x0106A5 ), "NHM" },
{ PackCpuInfo( 0x0106E4 ), "NHM" },
{ PackCpuInfo( 0x0106E5 ), "NHM" },
{ PackCpuInfo( 0x010676 ), "WOL" },
{ PackCpuInfo( 0x01067A ), "WOL" },
{ PackCpuInfo( 0x0006F2 ), "CON" },
{ PackCpuInfo( 0x0006F4 ), "CON" },
{ PackCpuInfo( 0x0006F6 ), "CON" },
{ PackCpuInfo( 0x0006FB ), "CON" },
{ PackCpuInfo( 0x0006FD ), "CON" },
{ 0, 0 }
};
void SourceView::SetCpuId( uint32_t cpuId )
{
auto ptr = s_cpuIdMap;
while( ptr->cpuInfo )
{
if( cpuId == ptr->cpuInfo )
{
SelectMicroArchitecture( ptr->moniker );
return;
}
ptr++;
}
SelectMicroArchitecture( "ZEN2" );
}
void SourceView::OpenSource( const char* fileName, int line, const View& view ) void SourceView::OpenSource( const char* fileName, int line, const View& view )
{ {
m_targetLine = line; m_targetLine = line;

View File

@ -129,6 +129,8 @@ public:
SourceView( ImFont* font ); SourceView( ImFont* font );
~SourceView(); ~SourceView();
void SetCpuId( uint32_t cpuid );
void OpenSource( const char* fileName, int line, const View& view ); void OpenSource( const char* fileName, int line, const View& view );
void OpenSymbol( const char* fileName, int line, uint64_t baseAddr, uint64_t symAddr, const Worker& worker, const View& view ); void OpenSymbol( const char* fileName, int line, uint64_t baseAddr, uint64_t symAddr, const Worker& worker, const View& view );
void Render( const Worker& worker, const View& view ); void Render( const Worker& worker, const View& view );

View File

@ -429,6 +429,11 @@ bool View::DrawImpl()
return !wasCancelled; return !wasCancelled;
} }
if( !m_uarchSet )
{
m_uarchSet = true;
m_sourceView->SetCpuId( m_worker.GetCpuId() );
}
if( !m_userData.Valid() ) m_userData.Init( m_worker.GetCaptureProgram().c_str(), m_worker.GetCaptureTime() ); if( !m_userData.Valid() ) m_userData.Init( m_worker.GetCaptureProgram().c_str(), m_worker.GetCaptureTime() );
if( m_saveThreadState.load( std::memory_order_acquire ) == SaveThreadState::NeedsJoin ) if( m_saveThreadState.load( std::memory_order_acquire ) == SaveThreadState::NeedsJoin )
{ {

View File

@ -389,6 +389,7 @@ private:
std::unique_ptr<SourceView> m_sourceView; std::unique_ptr<SourceView> m_sourceView;
const char* m_sourceViewFile; const char* m_sourceViewFile;
bool m_uarchSet = false;
ImFont* m_smallFont; ImFont* m_smallFont;
ImFont* m_bigFont; ImFont* m_bigFont;