From 6a1c3a689ce4a6537544007fc264f7f0b70b4784 Mon Sep 17 00:00:00 2001 From: Profiler Team Date: Thu, 17 Oct 2024 17:08:21 -0700 Subject: [PATCH] Show hlo instruction name corresponding to each program order in memory viewer. PiperOrigin-RevId: 687094536 --- .../memory_viewer_preprocess.jsonpb_decls.d.ts | 1 + .../memory_viewer/memory_usage/memory_usage.ts | 3 +++ .../memory_viewer_main/memory_viewer_main.ng.html | 1 + .../memory_viewer_main/memory_viewer_main.ts | 2 ++ .../program_order_chart/program_order_chart.ts | 15 ++++++++++++++- 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/frontend/app/common/interfaces/memory_viewer_preprocess.jsonpb_decls.d.ts b/frontend/app/common/interfaces/memory_viewer_preprocess.jsonpb_decls.d.ts index 75d5cb670..6e7e88c32 100644 --- a/frontend/app/common/interfaces/memory_viewer_preprocess.jsonpb_decls.d.ts +++ b/frontend/app/common/interfaces/memory_viewer_preprocess.jsonpb_decls.d.ts @@ -43,6 +43,7 @@ export interface BufferAllocation { export interface PreprocessResult { heapSizes?: /* double */ number[]; unpaddedHeapSizes?: /* double */ number[]; + hloInstructionNames?: string[]; maxHeap?: HeapObject[]; maxHeapBySize?: HeapObject[]; logicalBufferSpans?: {[key: /* int32 */ string]: BufferSpan}; diff --git a/frontend/app/components/memory_viewer/memory_usage/memory_usage.ts b/frontend/app/components/memory_viewer/memory_usage/memory_usage.ts index 0b35c60c3..da5e44342 100644 --- a/frontend/app/components/memory_viewer/memory_usage/memory_usage.ts +++ b/frontend/app/components/memory_viewer/memory_usage/memory_usage.ts @@ -24,6 +24,7 @@ export class MemoryUsage { indefiniteMemoryUsageBytes: MemoryUsageBytes; heapSizes: number[]; unpaddedHeapSizes: number[]; + hloInstructionNames: string[]; maxHeap: HeapObject[]; maxHeapBySize: HeapObject[]; maxHeapByPaddingSize: HeapObject[]; @@ -55,6 +56,7 @@ export class MemoryUsage { this.indefiniteMemoryUsageBytes = {padded: 0, unpadded: 0}; this.heapSizes = []; this.unpaddedHeapSizes = []; + this.hloInstructionNames = []; this.maxHeap = []; this.maxHeapBySize = []; this.maxHeapByPaddingSize = []; @@ -115,6 +117,7 @@ export class MemoryUsage { this.peakHeapSizePosition = (preprocess.peakHeapSizePosition || 0); this.heapSizes = preprocess.heapSizes || []; this.unpaddedHeapSizes = preprocess.unpaddedHeapSizes || []; + this.hloInstructionNames = preprocess.hloInstructionNames || []; if (preprocess.logicalBufferSpans) { for (const [key, value] of Object.entries( preprocess.logicalBufferSpans)) { diff --git a/frontend/app/components/memory_viewer/memory_viewer_main/memory_viewer_main.ng.html b/frontend/app/components/memory_viewer/memory_viewer_main/memory_viewer_main.ng.html index 5819ee8ee..eb40a59b8 100644 --- a/frontend/app/components/memory_viewer/memory_viewer_main/memory_viewer_main.ng.html +++ b/frontend/app/components/memory_viewer/memory_viewer_main/memory_viewer_main.ng.html @@ -28,6 +28,7 @@ diff --git a/frontend/app/components/memory_viewer/memory_viewer_main/memory_viewer_main.ts b/frontend/app/components/memory_viewer/memory_viewer_main/memory_viewer_main.ts index 12eca02da..ad3a0015d 100644 --- a/frontend/app/components/memory_viewer/memory_viewer_main/memory_viewer_main.ts +++ b/frontend/app/components/memory_viewer/memory_viewer_main/memory_viewer_main.ts @@ -50,6 +50,7 @@ export class MemoryViewerMain implements OnDestroy, OnChanges { selectedIndexBySize: number = -1; selectedIndexByPaddingSize: number = -1; unpaddedHeapSizes: number[] = []; + hloInstructionNames: string[] = []; hasTrace = false; diagnostics: Diagnostics = {info: [], warnings: [], errors: []}; @@ -164,6 +165,7 @@ export class MemoryViewerMain implements OnDestroy, OnChanges { (this.usage.hloTempFragmentation * 100.0).toFixed(2); this.heapSizes = this.usage.heapSizes || []; this.unpaddedHeapSizes = this.usage.unpaddedHeapSizes || []; + this.hloInstructionNames = this.usage.hloInstructionNames || []; this.peakInfo = { size: utils.bytesToMiB(this.usage.peakHeapSizeBytes), alloc: this.usage.peakHeapSizePosition + 1, diff --git a/frontend/app/components/memory_viewer/program_order_chart/program_order_chart.ts b/frontend/app/components/memory_viewer/program_order_chart/program_order_chart.ts index cda527357..bde01149e 100644 --- a/frontend/app/components/memory_viewer/program_order_chart/program_order_chart.ts +++ b/frontend/app/components/memory_viewer/program_order_chart/program_order_chart.ts @@ -18,6 +18,9 @@ export class ProgramOrderChart implements OnChanges, OnInit { /** The unpadded heap size list. */ @Input() unpaddedHeapSizes: number[] = []; + /** The HLO instruction name corresponding to each program order point. */ + @Input() hloInstructionNames: string[] = []; + /** The peak buffer allocation information. */ @Input() peakInfo?: BufferAllocationInfo; @@ -125,14 +128,23 @@ export class ProgramOrderChart implements OnChanges, OnInit { for (let i = 0; i < this.heapSizes.length; i++) { this.maxSize = Math.max( this.maxSize, Math.max(this.heapSizes[i], this.unpaddedHeapSizes[i])); - data.push([i, this.heapSizes[i], this.unpaddedHeapSizes[i]]); + const tooltip = `
+ Program Order: ${i}
Size: ${this.heapSizes[i].toFixed(1)}
+ Unpadded Size: ${this.unpaddedHeapSizes[i].toFixed(1)}
+ HLO instruction: ${this.hloInstructionNames[i]} +
`; + data.push([i, + this.heapSizes[i], tooltip, + this.unpaddedHeapSizes[i],tooltip]); } this.maxSize = Math.round(this.maxSize * 1.1); const dataTable = new google.visualization.DataTable(); dataTable.addColumn('number', 'Schedule'); dataTable.addColumn('number', 'Size'); + dataTable.addColumn({type: 'string', role: 'tooltip', 'p': {'html': true}}); dataTable.addColumn('number', 'Unpadded Size'); + dataTable.addColumn({type: 'string', role: 'tooltip', 'p': {'html': true}}); dataTable.addRows(data); const options: google.visualization.LineChartOptions = { @@ -157,6 +169,7 @@ export class ProgramOrderChart implements OnChanges, OnInit { }, }, legend: {position: 'top'}, + tooltip: {isHtml: true}, }; this.heapChartDataInfo = {