I'm mostly trying to keep the pathtracer simple and performant, so for this reason I would rather not implement bidirectional methods. However, I may end up implementing path guiding instead in order to better sample caustics etc.
I sample the lights proportional to their area times intensity. This is very much less than optimal for scenes with many lights.
As far as opencl goes, I don't have much experience with it so I cant really comment. For my GPU code I do tend to prefer a C-ish coding style, although I still use templates etc here and there.
SOA vs AOS mostly comes down to whatever access pattern you use on the data. On the CPU you mostly have to worry about the cache/prefetcher, on the GPU its more important to get coalesced vector loads in order to make maximum use of bandwidth
Bitcoin will never become a standard currency, it's slow, it has zero privacy (if I send you money once you can see ALL my transactions), it is EXTREMELY energy inefficient. Even if you believe crypto will one day become the standard (which I dont), it won't be bitcoin because there are better alternatives; proof of work is dumb, bitcoin has a finite supply of bitcoins, etc.