MCPcopy Index your code
hub / github.com/apache/tvm / timeExecution

Method timeExecution

web/src/runtime.ts:1950–2002  ·  view source on GitHub ↗
(
      finvoke: PackedFunc,
      dev: DLDevice,
      nstep: number,
      repeat: number,
      minRepeatMs: number,
      limitZeroTimeIterations: number,
      cooldownIntervalMs: number,
      repeatsToCooldown: number
    )

Source from the content-addressed store, hash-verified

1948
1949 // Helper function to time the finvoke
1950 const timeExecution = async (
1951 finvoke: PackedFunc,
1952 dev: DLDevice,
1953 nstep: number,
1954 repeat: number,
1955 minRepeatMs: number,
1956 limitZeroTimeIterations: number,
1957 cooldownIntervalMs: number,
1958 repeatsToCooldown: number
1959 ): Promise<Uint8Array> => {
1960 // detach and explicit dispose when tasks is fullfilled
1961 // the promise will immediately return and we need to makesure
1962 // finvoke do not get recycled.
1963 this.ctx.detachFromCurrentScope(finvoke);
1964
1965 finvoke(this.scalar(1, "int32"));
1966 await dev.sync();
1967 const result = [];
1968 let setupNumber: number = nstep;
1969
1970 for (let i = 0; i < repeat; ++i) {
1971 let durationMs = 0.0;
1972 let absoluteZeroTimes = 0;
1973 do {
1974 if (durationMs > 0.0) {
1975 const golden_ratio = 1.618;
1976 setupNumber = Math.floor(
1977 Math.max(minRepeatMs / (durationMs / setupNumber) + 1, setupNumber * golden_ratio)
1978 );
1979 }
1980 const tstart: number = perf.now();
1981 finvoke(this.scalar(setupNumber, "int32"));
1982 await dev.sync();
1983 const tend: number = perf.now();
1984
1985 durationMs = tend - tstart;
1986 if (durationMs === 0) {
1987 absoluteZeroTimes++;
1988 }
1989 } while (durationMs < minRepeatMs && absoluteZeroTimes < limitZeroTimeIterations);
1990 const speed = durationMs / setupNumber / 1000;
1991 result.push(speed);
1992 if (cooldownIntervalMs > 0.0 && (i % repeatsToCooldown) === 0) {
1993 await new Promise(r => setTimeout(r, cooldownIntervalMs));
1994 }
1995 }
1996 const ret = new Float64Array(result.length);
1997 ret.set(result);
1998
1999 // dispose finvoke
2000 finvoke.dispose();
2001 return new Uint8Array(ret.buffer);
2002 };
2003
2004 const addOne = async (x: number): Promise<number> => {
2005 await new Promise(resolve => setTimeout(resolve, 100));

Callers

nothing calls this directly

Calls 5

scalarMethod · 0.95
maxMethod · 0.80
syncMethod · 0.45
disposeMethod · 0.45

Tested by

no test coverage detected