criterium
clj-fast
criterium | clj-fast | |
---|---|---|
8 | 5 | |
1,160 | 230 | |
- | - | |
0.0 | 0.0 | |
over 1 year ago | about 2 years ago | |
Clojure | Clojure | |
- | Eclipse Public License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
criterium
-
Noob has simple program problem.
(criterium does not work here yet b.t.w., but it probably will be working soon)
-
Question about high execution time
criterium, specifically the quick-bench function, will actually run multiple samples an provide a mean runtime (as well as other useful stats) so you can get an idea of what a jit'd warmed up performance looks like. time is great in a pinch, but you end up needing to run it multiple times to ensure optimizations are kicking and and other artifacts (like gc) aren't throwing the results.
-
Logging in Clojure: jar tidiness
I'm going to leave tooling out of this and run everything through a repl on the command line right from the jar. One other thing I want to do is include the incredible criterium library so we can profile. I'm deliberately including criterium separately like this because you shouldn't have a dev-time tool like criterium in an uberjar. And knowing how to easily combine other jars with your real production jar can be very helpful. I grabbed the jar from my .m2 cache.
-
Notes on Optimizing Clojure Code: Overview
I am just going to leave this here - https://github.com/hugoduncan/criterium
-
"The Genuine Sieve of Eratosthenes"
where crit is criterium. As you can see, you're spending most of your time in the seq transformation part.
-
A casual Clojure / Common Lisp code/performance comparison
It's better to benchmark with something like criterium. time is a bit inaccurate. Though, if it's really 15 seconds, I guess will not be that big of a difference
-
Fast and Elegant Clojure: Idiomatic Clojure without sacrificing performance
>>> One of Clojure's biggest weaknesses in practice is that breaking in to those functional structures to figure out where the time is being spent or to debug them is harder than in other languages. This is a natural trade-off of developing a terse and powerful language.
Not that hard if you use something like YourKit. There's also a quite good Clojure library https://github.com/hugoduncan/criterium .
-
Clojure, Faster
Criterium (the benchmarking library used here) uses multiple runs to obtain tighter bounds on amortized performance, as well as techniques to amortize the effects of garbage collection and JIT compilation. See https://github.com/hugoduncan/criterium for a brief overview, as well as links to the pitfalls and statistical techniques involved in JVM benchmarking.
clj-fast
-
Advent of Clojure - looking for feedback
IIRC clojure.core/merge is another needlessly slow implementation that gets used a lot. If you are leveraging that on hot paths you will probably see some benefit in writing your own variant or copying one (or adding a dep) from a lib that is faster. There are some explorations of these ideas in clj-fast with some early results and trends and plenty of interesting discussions in the issues.
- Notes on Optimizing Clojure Code: Overview
-
How (and When) Clojure Compiles Your Code (2016)
Noticed that code compiled in a defn as opposed to raw evaluation of the body at the repl produces different bytecode (and impacts inlining / jit) in some cases https://github.com/bsless/clj-fast/issues/16 . Kind of a cousin to the original issue you raised.
-
Making the LinkedIn experimentation engine 20x faster
Some interesting exploration in the clj-fast library and discussions in the issues there.
-
Advent of Code 2020 Day 23 Crab Cups in Clojure (optimizing runtime from 10,000 years to 30 minutes)
The only other weird performance regression with array looping code is if you test it at the repl vs inside a defined function that's called. Different bytecode emitted in each case for some reason, with the function wrapper version being substantially faster.
What are some alternatives?
cl-cuda - Cl-cuda is a library to use NVIDIA CUDA in Common Lisp programs.
aoc-2021perfcomp - a fork of https://gitlab.com/slotThe/aoc-2021.git for a reddit exploration
clojure - The Clojure programming language
ultrarand - a demo of random number generation in java, and clojure via performance optimization
skiko - Kotlin MPP bindings to Skia
performancepaper - A reproducible, open examination of the paper "A performance comparison of Clojure and Java" by Gustav Krantz
JWM - Cross-platform window management and OS integration library for Java
ham-fisted - High performance HAMT
magicl - Matrix Algebra proGrams In Common Lisp.
icfpc2019
hash-array-mapped-trie - A hash array mapped trie implementation in c.