A single MPSC queue per core works very well and this is what VoltDB does. For most sane task sizes this works fine and it scales because you can only process so many tasks at a single core so queue contention isn't an issue.
If you want to crank things to 11 you can do an SPSC queue between every core, and this is what ScyllaDB does and is suggested in the article. This does relieve CAS failure, but outside of microbenchmarks I am not sure it is a real world issue.
I had never considered the advantages of atomic instructions that never fail. In the context of things like Disrupor or Agrona those choices start to make more sense.