Sí, Wolfram Workbench tiene un generador de perfiles, aunque according to the documentation la salida no es del todo el formato que desea.
Debo señalar que el problema planteado por Mr.Wizard en los comentarios, que los resultados almacenados en la memoria caché generarán diferentes tiempos, también puede aplicarse en el perfil.
Si quería hacer algo exclusivamente en Mathematica, podría intentar algo como:
myProfile[fun_Symbol,inputs_List]:=
TableForm[#[[{1,3,2}]]&/@ (Join @@@ ({Timing[f[#]],#} & /@ inputs))]
Si tuvieron la feliz de tener la salida como {sincronización, de salida, de entrada}, en lugar de {tiempo, entrada, salida} como se especifica en su pregunta, puede deshacerse del bit #[[{1,3,2}]]
.
EDITAR
Ya que tengo Banco de trabajo, aquí hay un ejemplo. Tengo un paquete AdvancedPlots
que incluye una función CobwebPlot
(y sí, la función en sí podría mejorarse).
CobwebPlot[x_?MatrixQ, opts___Rule] /;
And @@ (NumericQ /@ Flatten[x]) :=
Module[{n, \[Theta]s, numgrids, grids, struts, gridstyle, min, max,
data, labels, epilabels, pad},
n = Length[First[x]];
\[Theta]s = (2 \[Pi])/n Range[0, n] + If[OddQ[n], \[Pi]/2, 0];
numgrids =
If[IntegerQ[#] && Positive[#], #,
NumberofGrids /.
Options[CobwebPlot] ] & @ (NumberofGrids /. {opts});
{min, max} = {Min[#], Max[#]} &@ Flatten[x];
gridstyle = GridStyle /. {opts} /. Options[CobwebPlot];
pad = CobwebPadding /. {opts} /. Options[CobwebPlot];
grids =
Outer[List, \[Theta]s, FindDivisions[{0, max + 1}, numgrids]];
struts = Transpose[grids];
labels = CobwebLabels /. {opts} /. Options[CobwebPlot];
epilabels =
If[Length[labels] == n,
Thread[Text[
labels, (1.2 max) Transpose[{Cos[Most[\[Theta]s]],
Sin[Most[\[Theta]s]]}]]], None];
data = Map[Reverse,
Inner[List, Join[#, {First[#]}] & /@ x, \[Theta]s, List], {2}];
Show[ListPolarPlot[grids, gridstyle, Joined -> True, Axes -> False,
PlotRangePadding -> pad],
ListPolarPlot[struts, gridstyle, Joined -> True, Axes -> False],
ListPolarPlot[data,
Sequence @@ FilterRules[{opts}, Options[ListPolarPlot]],
Sequence @@
FilterRules[Options[CobwebPlot], Options[ListPolarPlot]],
Joined -> True, Axes -> None] ,
If[Length[labels] == n, Graphics /@ epilabels,
Sequence @@ FilterRules[{opts}, Options[Graphics]] ]]
]
ejecutar el paquete en modo de depuración
Y a continuación, ejecutar este portátil
da el siguiente resultado.
relacionadas: http://stackoverflow.com/questions/3418892/profiling-memory-usage-in-mathematica – abcd
También vea: http://stackoverflow.com/questions/4721171/performance-tuning-in-mathematica –
All: Estoy tratando de hacer esto con 'TraceScan' pero Me estoy encontrando con el problema de que Mathematica almacena en caché los resultados, por lo tanto, las llamadas secuenciales a 'Prime [13!]', por ejemplo, toman tiempos muy diferentes para evaluar. –