Statistics

The IVM collects various statistics during execution. The Vine and Ivy CLIs display these statistics after running a program.

Let's take a look at a sample stat block, section by section.

Interactions

Interactions
  Total           11_106_946
  Annihilate       4_319_083
  Commute             33_750
  Copy             2_378_685
  Erase              315_132
  Expand             556_910
  Call             3_227_767
  Branch             275_619

Total shows the total number of interactions performed in the execution of the program. This measures how much "work" was done, in a deterministic and universal way; the same program will always have the exact same interaction count, no matter what machine it is run on.

The other numbers break down the various types of interactions.

Memory

Memory
  Heap                   784 B
  Allocated      242_850_688 B
  Freed          242_850_688 B

Heap shows the greatest size of the runtime's heap over the course of the program, measured in bytes. In this case, it never needed to use more than a kilobyte of heap space throughout the entire program.

Allocated shows the total number of bytes allocated through the program, and Freed shows the total number of bytes freed. These numbers should always match; if they differ, that indicates that there was a vicious circle in the interaction net.

In this case, Allocated and Freed are much greater than Heap; this shows that the evaluator was reusing its memory buffer very effectively. (This is very common for the IVM.)

These numbers are deterministic when the program is executed sequentially, but can vary when executed in parallel (since the OS's thread scheduling is non-deterministic).

Performance

Performance
  Time                   175 ms
  Speed           63_375_794 IPS

Time is the amount of time elapsed over the execution of the program.

Speed is the speed of the execution, measured in IPS (interactions per second), and equal to Interactions / Time.

Parallel Statistics

Some statistics only apply to parallel execution.

Workload

Workload
  Workers                 16
  Active                  16
  Minimum            312_096
  Average            694_184
  Maximum            855_071
  Moved                  111

Workers is the number of worker threads available to the IVM.

Active is the number of worker threads that were used.

Minimum, Average, and Maximum describe the statistics of the number of interactions performed by each active worker.

Moved is the number of active pairs that were moved between workers.

Performance

Performance
  Time                    19 ms
  Speed          569_167_395 IPS
  Working                230 ms
  Rate            48_201_985 IPS

Time and Speed are the same as in sequential execution.

Working is the total of the amounts of time each worker was active.

Rate is the average speed of an individual worker, and equal to Interactions / Working.