>The actual issue is that Windows and Linux don't properly use a ‘super’ key―while the ‘Win’ key is sitting there uselessly.
>These keys are great to use on Mac
The use of the super key on Mac is horrible. It should sit there uselessly, until I tell it to do otherwise. On Mac, here are no safe hotkeys to bind anything to. On Linux, my WM configuration has a ton of actions bound to the super key, and I never have to worry that it will conflict with another application.
You communicate via channels, like in Go. Objects passed through a channel are deep copied. To share an object, you can create an actor thread that owns it, or if you're sure the object won't be GCed (i.e. by exempting it with the `GC_ref` function), you can pass a pointer through the channel.
EHT team tested for some biases, but did not test for the most significant bias.
Because they try to make an image of a black hole, their strongest bias is to see a black hole in anything.
So they should have tested if their final implementation of "imaging method" does NOT see black hole when incoming sparse data does not contain the black hole.
Unfortunately, there is no such test in the presentation.
EHT team tested that "imaging method" that was trained for recognizing a disk (without a hole) - is still able to recognize black hole. See it at [31:55]
But they did not test the reverse: train an imaging method for recognizing black hole, but then feed sparse disk data to that imaging method. Would it be able to see disk or still would see a black hole?
How about trying to feed sparse data of 2 bright stars. Would this imaging method that was trained to recognize black holes -- still be able to see these 2 stars?
Unfortunately, there was no testing like that ... or worse -- they did such testing, but then discarded the results, because it does not impress the public and financial sponsors.
>And so our "two loops" are usually just "do two simple SIMD operations". Not quite so offensive when you say it like that!
No, it's not quite so offensive, but this doesn't explain why it's the best option. Is there no equally-fast way to write the first-tombstone implementation with SIMD instructions? The answer seems to be in the sketch of the implementation, which I'm having trouble understanding.
EDIT: I'm watching the original SwissTable talk now... would it really have been worse to use 2 bits for empty/tombstone/full/sentinel, and 6 bits for hash prefix?
EDIT 2: More implementation info. Tombstones are actually rare, because if any element in your 16-wide chunk is empty, you don't have to create a tombstone. In the very best case (a perfectly distributed hash function), your hashmap has to be ~94% full before it's even possible to fail this. Because tombstones are so rare, it's better to save the single bit for extra confidence in the hash prefix.
So, here is my understanding of the implementation and its rationale:
* Every bucket in the backing array has a corresponding byte in a metadata array
* 1 bit of this byte stores whether the bucket is empty, the other 7 bits are for a hash prefix
* SIMD instructions search 16 bytes at a time, checking: this bucket is not empty, this bucket's key matches the first 7 bits of my key
* Since 16 buckets are checked for emptiness at the same time, you can avoid creating a tombstone for a bucket if any of the other 15 buckets are empty (just set it to empty, i.e. set the first bit to 0)
* This means that tombstones are very unlikely- you'll probably rehash before you get to the load factor where you start seeing tombstones
* Since tombstones are so unlikely, it's more valuable to add an extra bit to the hash prefix than it is to quickly find tombstones
Ok, I got it. They're exactly the same. Either way you'd need to do a second search, because you're trying to differentiate between 3 states: "probably a match", "empty", or "deleted". A much better way than stealing a bit from the hash prefix is using a special value that represents "empty or deleted", and that's exactly what SwissTable does: https://github.com/abseil/abseil-cpp/blob/256be563447a315f2a...
I would argue that "the table" is not mutated, only the internal state of its implementation. Every time you access any information, a cache at some layer below you is updated. Is that also gross?
Yes. Normally you can have one thread writing to a data structure OR many threads reading the data structure at any given time and not need to worry about them causing problems. (This situation is common enough that we have things called "reader-writer mutexes" or "shared-exclusive" mutexes.)
As soon as your reads can modify the internal state of the data structure, it might modify the state in a way which trips up another read; so you can no longer have many threads reading the data structure at once.
But you don't need to write every time, only on occasion, so you can actually use a read write lock and in the nominal case many threads can read just fine.
That said, it's probably still better to avoid this unless it's absolutely necessary to modify the underlying structure sometimes, I recently had to do this for an LRU cache.
Right. And in Rust implementing the hash table that way will suddenly make the table no longer flagged as "Sync" by the compiler, so you will be unable to share it between threads.
I always assumed that the loud noise reduces sensitivity, tuning out some quiet signals like tinnitus. Same thing as not being able to hear well after a loud concert.
Such a compression algorithm could make it much cheaper for the community to volunteer capacity to the network (short-range relays? data storage nodes? crowdfunded cell towers?), which could make it much more feasible to build a reliable P2P network.
If this were true, there would be much more P2P networks today than fifteen years ago, but that’s not the case. According to [1], in 2004 BitTorrent accounted "from 20 to 35% of all traffic on the Internet". At that time the bandwidth cost was at least two orders of magnitude higher than today. The price of hard drive has since been divided by 40 [2] and the total Internet traffic has been multiplied by 40 [3].
My argument was only that bringing the cost down would make it easier to build a more reliable P2P network. I doubt that reliability/cost are the main reasons P2P networks aren't more popular, rather that the average person doesn't really care or even know about their existence.
>These keys are great to use on Mac
The use of the super key on Mac is horrible. It should sit there uselessly, until I tell it to do otherwise. On Mac, here are no safe hotkeys to bind anything to. On Linux, my WM configuration has a ton of actions bound to the super key, and I never have to worry that it will conflict with another application.