/** * WebGPU Performance Utilities * Monitoring, benchmarking, and optimization helpers */ import { type GPUCapabilities } from '../device.js'; /** * Performance metrics for a single operation */ export interface PerfMetrics { name: string; startTime: number; endTime: number; duration: number; workgroupCount: number; elementsProcessed: number; throughput: number; } /** * Accumulated performance statistics */ export interface PerfStats { name: string; count: number; totalTime: number; avgTime: number; minTime: number; maxTime: number; totalElements: number; avgThroughput: number; } /** * Performance monitor for tracking operation metrics */ export declare class PerfMonitor { private metrics; private stats; private enabled; private maxHistory; /** * Enable or disable performance monitoring */ setEnabled(enabled: boolean): void; /** * Record a performance metric */ record(name: string, startTime: number, endTime: number, workgroupCount: number, elementsProcessed: number): PerfMetrics; /** * Update accumulated statistics */ private updateStats; /** * Get statistics for a specific operation */ getStats(name: string): PerfStats | undefined; /** * Get all statistics */ getAllStats(): PerfStats[]; /** * Get recent metrics */ getRecent(count?: number): PerfMetrics[]; /** * Clear all metrics and statistics */ clear(): void; /** * Generate a performance report */ report(): string; } /** * Get the global performance monitor */ export declare function getPerfMonitor(): PerfMonitor; /** * Workgroup size configuration */ export interface WorkgroupConfig { size1D: number; size2D: [number, number]; tileSize: number; } /** * Optimal workgroup sizes based on device capabilities */ export declare function getOptimalWorkgroupConfig(caps?: GPUCapabilities): WorkgroupConfig; /** * Calculate optimal workgroup count for 1D operations */ export declare function calculateOptimalWorkgroups1D(totalSize: number, workgroupSize?: number): number; /** * Calculate optimal workgroup count for 2D operations (like matmul) */ export declare function calculateOptimalWorkgroups2D(width: number, height: number, workgroupSize?: [number, number]): [number, number]; /** * Memory usage tracker */ export declare class MemoryTracker { private allocations; private totalAllocated; private peakUsage; /** * Track a buffer allocation */ allocate(label: string, size: number): void; /** * Track a buffer deallocation */ deallocate(label: string): void; /** * Get current memory usage */ getCurrentUsage(): number; /** * Get peak memory usage */ getPeakUsage(): number; /** * Get all allocations */ getAllocations(): Map; /** * Reset tracking */ reset(): void; /** * Generate memory report */ report(): string; } /** * Get the global memory tracker */ export declare function getMemoryTracker(): MemoryTracker; /** * Benchmark a function */ export declare function benchmark(_name: string, fn: () => Promise, iterations?: number, warmupIterations?: number): Promise<{ result: T; avgTime: number; minTime: number; maxTime: number; }>; //# sourceMappingURL=index.d.ts.map