{"id":18556780,"url":"https://github.com/urbit/benchmark","last_synced_at":"2026-01-24T14:40:50.105Z","repository":{"id":242747205,"uuid":"805045404","full_name":"urbit/benchmark","owner":"urbit","description":"Benchmark code evaluations for comparing Nock evaluation performance.","archived":false,"fork":false,"pushed_at":"2024-06-07T18:10:36.000Z","size":45,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-12-26T09:41:51.778Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"hoon","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/urbit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-23T19:20:16.000Z","updated_at":"2024-09-24T16:48:35.000Z","dependencies_parsed_at":"2024-06-04T20:21:59.947Z","dependency_job_id":"37ca4868-7989-4af3-ab7a-7a328abaee4d","html_url":"https://github.com/urbit/benchmark","commit_stats":null,"previous_names":["urbit/benchmark"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbit%2Fbenchmark","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbit%2Fbenchmark/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbit%2Fbenchmark/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbit%2Fbenchmark/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/urbit","download_url":"https://codeload.github.com/urbit/benchmark/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239281424,"owners_count":19612861,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T21:33:20.136Z","updated_at":"2025-11-01T10:30:31.040Z","avatar_url":"https://github.com/urbit.png","language":"hoon","funding_links":[],"categories":[],"sub_categories":[],"readme":"#   Nock Benchmarks\n\nBenchmark code evaluations for comparing Nock evaluation performance.\n\nBenchmarks include:\n\n- `.nock` files containing cells of `[subject formula]`\n- `.noun` jamfiles of the Nock code.\n- `.hoon` source files for the Nock code (optional).\n\nGenerally speaking, benchmarks should be self-contained; they should not call out to additional libraries or include dependencies on even `/sys/hoon`.  However, we do supply `tiny.nock` as a compiled version of `/lib/tiny` from Hoon 139K.  This may be preferred for cases (like `ackermann`) which would otherwise require included more than six arms.\n\n##  Benchmarks\n\n### Supplied\n\n- [Ackermann function](https://en.wikipedia.org/wiki/Ackermann_function), `ackermann`\n- [Sieve of Eratosthenes](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes), `sieve`\n- [Naïve decrement](https://moronlab.blogspot.com/2010/01/decrement-in-reck.html), `dec`\n- Naïve addition (similar), `add`\n- Operations on direct atoms ($x \u003c 2^{31}$), `atomcat`\n- Operations on indirect atoms ($x \u003e 2^{31}$), `atomdog`\n- Operations on bignums ($x \u003e 2^{63}$), `atomgmp`\n- Addressing, `bigslot`\n- [Fibonacci sequence (recursive generating function)](https://en.wikipedia.org/wiki/Fibonacci_sequence#Generating_function), `fibonacci`\n- Factorial (tail-recursive), `factorial`\n\n### Desired\n\n- [Fibonacci sequence (Binet's formula)](https://en.wikipedia.org/wiki/Fibonacci_sequence#Relation_to_the_golden_ratio), `fibformula` (requires FP core)\n- [Mandelbrot set](https://en.wikipedia.org/wiki/Mandelbrot_set), `mandelbrot` (easier with FP core)\n- [Matrix multiplication](https://en.wikipedia.org/wiki/Matrix_multiplication), `mmul`\n- [MD5 hash](https://en.wikipedia.org/wiki/MD5), `md5`\n- [SHA-512 hash](https://en.wikipedia.org/wiki/SHA-2), `sha512`\n\n##  Reporting\n\nNock benchmarks supply the subject and the formula as a cell; no arguments are externally specified.  In the Urbit Dojo, a benchmark may be run directly as:\n\n```\n=nok -build-file /=benchmark=/bar/ackermann/hoon\n~\u003e  %bout  .*(-.nok +.nok)\n```\n\nFor cases for which a computation may run unreasonably long, the `%jinx` hint may be used to time-limit the computation:  `~\u003e  %jinx.[~s100]`.\n\nA benchmark report should include the following data:\n\n1. Hardware (CPU chipset):  `cat /proc/cpuinfo`, then report `model name` and number of cores (`siblings`)\n2. Host OS:  `hostnamectl`, then report `Operating System` and `Kernel`.\n3. Runtime version:  `urbit --version`, then report major version.  (With Vere and Ares developer builds, report the commit hash or release candidate number, etc.)\n4. Statistics:  run a given calculation many times, and report $n$, $\\max(t)$, $\\min(t)$, and mean $\\bar{t}$.  Include any critical details about the computation (such as range of input arguments).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furbit%2Fbenchmark","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Furbit%2Fbenchmark","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furbit%2Fbenchmark/lists"}