397 karma · joined April 5, 2022
edit: For dual channel RAM, I would suspect the throughput depends on how the kernel decides to map physical memory to virtual addresses.
Well, I intend to finish high school at a minimum before pursuing employment :)
fpnge (which I wasn’t aware of until now) appears to already be using a very similar (identical?) algorithm, so I suspect the relative performance of fpng and fpnge would not be significantly impacted by this change.
* An avx96/avx128 version, which requires more care than avx32/avx64 because you will overflow a 16 bit signed number if you simply extend the coefficient vectors from 0..32 to 0..96/128 (e.g. 255*96 + 254*96 > 32767), but looking at it now, I realize you shouldn't actually need more than one 0..32 coefficient vector.
* The chunk length could be longer because there are 8 separate 32 bit counters in each vector, which can be summed into a uint64_t instead of a uint32_t when computing the modulo.
* As you said, aligning the loads and deferring the `_mm256_madd_epi16` outside of the loop. For deferring the madd specifically, using two separate sum2 vectors and splitting the `mad` vector into two by using `_mm256_and_si256(mad, _mm256_set1_epi32(0xFFFF)` and `_mm256_srli(mad, 16)` which should improve upon the 5 cycle latency hit incurred by the madd.
Plus I am sure there are many other opportunities to optimize this I have not thought of :)
I used to think that application was the best way to fully understand a topic, but I think writing is equally important and effective.
* Solidify my knowledge in a given topic (the best way to find out how well you really know something is to try to teach it)
* Improve at technical writing
* Create reference material that will be useful for myself (which may be useful to other people)
While it’s certainly nice to see that others visit my sites, it’s not the primary reason that I continue to produce content. However, knowing that it’s public, even if it’s possible that nobody will see it forces me to a higher standard.
I also just happen to enjoy writing about things I am passionate about, after thinking writing wasn’t for me after working on countless overly restrictive school essays.
edit: I also use it in an attempt to create the resources I wish I had when I was researching something for the first time. Many topics I find myself interested in can be hard to approach due to requiring some area of math I am not familiar with, but I feel I can explain in a simpler way compared to the encyclopedic descriptions, lecture notes, etc available online which assume some level of domain knowledge.
While I'm not a massive fan of their writing, they cover quite a few interesting topics. I generally find clicking straight through to the paper/research they are covering is a much better use of my time.
Outside of Tk, Tcl pops up in a couple of odd places, usually as part of some testing system (expect(1) and SQLite use it) or build system, though use has fallen off quite a bit since the 1990s.
Placing somewhere between a lisp and shell, it's incredibly effective as a language for gluing things together and creating DSLs, and is fairly easy to embed in a manner similar to Lua.
Definitely not a perfect language, but one that I find extremely comfortable to work in and iterate quickly for certain projects.
Antirez's blog has a pretty concise explanation of Tcl's features and what makes it special:
The format of your machine learning notes is also nice, I like the loose structure of it.
The colorscheme is also pleasant, nice to see something that isn't the typical light/dark mode, though you may want to change the color of your copyright notice though, it has very low contrast with the background.
Also love how the 3D visual has a similar alien feel to the OS/menu UI of 6th generation consoles.
Recently rewrote my old site after feeling limited by markdown and decided to start from a clean slate and write a blog engine in TCL.
Though I don't have a post up yet that uses any new features, it supports LaTeX without requiring client side JS, as well as collapsible elements.
It's also easy to add new types of content (such as a graphviz element), since an article is just a TCL script, for example:
https://github.com/wooosh/blog/blob/master/pages/articles/fr...
I intend to replace utteranc.es for comments with a self-hosted solution, as I'm not super happy with relying on an external resource without subresource-integrity, especially for something that requires login (making it a great target for phishing).
edit: valgrind's callgrind utility can also produce exact instruction execution counts for a given block of code