on CUDA, you gain more from single pass processing (fusion), so you may not need any special “optimizing” beyond that; if you replace your 3 (max,min,+) kernel calls with 1, speedup will be significant, as most overhead is from memory IO (esp. if data doesn’t fit in cache).
As for AVX, “Intel® 64 and IA-32 Architectures Software Developer’s Manual” is the canonical guide, search for pdf, it is on Intel’s site somewhere. Reference is at Intel® Intrinsics Guide 1
But this is assembler level programming really, as such it is not portable. It is better to write auto-vectorizable code, by satisfying some compiler specific requirements.