2020-12-08 15:00:44 +01:00
|
|
|
import { log } from './log.js';
|
|
|
|
|
2020-11-01 19:07:53 +01:00
|
|
|
const profileData = {};
|
|
|
|
|
|
|
|
function profile(name, data) {
|
|
|
|
if (!data || !data.kernels) return;
|
|
|
|
const maxResults = 5;
|
|
|
|
const time = data.kernels
|
|
|
|
.filter((a) => a.kernelTimeMs > 0)
|
|
|
|
.reduce((a, b) => a += b.kernelTimeMs, 0);
|
|
|
|
const slowest = data.kernels
|
|
|
|
.map((a, i) => { a.id = i; return a; })
|
|
|
|
.filter((a) => a.kernelTimeMs > 0)
|
|
|
|
.sort((a, b) => b.kernelTimeMs - a.kernelTimeMs);
|
|
|
|
const largest = data.kernels
|
|
|
|
.map((a, i) => { a.id = i; return a; })
|
|
|
|
.filter((a) => a.totalBytesSnapshot > 0)
|
|
|
|
.sort((a, b) => b.totalBytesSnapshot - a.totalBytesSnapshot);
|
|
|
|
if (slowest.length > maxResults) slowest.length = maxResults;
|
|
|
|
if (largest.length > maxResults) largest.length = maxResults;
|
|
|
|
const res = { newBytes: data.newBytes, newTensors: data.newTensors, peakBytes: data.peakBytes, numKernelOps: data.kernels.length, timeKernelOps: time, slowestKernelOps: slowest, largestKernelOps: largest };
|
|
|
|
profileData[name] = res;
|
2020-12-08 15:00:44 +01:00
|
|
|
log('Human profiler', name, res);
|
2020-11-01 19:07:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
exports.run = profile;
|