public unsafe Tuple <int, int> MinMaxSse() { var vmin = Vector128.Create(int.MaxValue); var vmax = Vector128.Create(int.MinValue); int vecSize = Vector128 <int> .Count; fixed(int *pNumbers = numbers) { int i; for (i = 0; i < numbers.Length; i += vecSize) { var d = Sse42.LoadVector128(pNumbers + i); vmin = Sse42.Min(vmin, d); vmax = Sse42.Max(vmax, d); } // tail is pretty much irrelevant int tailLen = (numbers.Length % vecSize); for (i = 0; i < tailLen; ++i) { var d = Sse42.LoadScalarVector128(pNumbers + numbers.Length - i - 1); vmin = Sse42.Min(vmin, d); vmax = Sse42.Max(vmax, d); } } int min = int.MaxValue, max = int.MinValue; for (int i = 0; i < vecSize; ++i) { min = Math.Min(min, vmin.GetElement(i)); max = Math.Max(max, vmax.GetElement(i)); } return(new Tuple <int, int>(min, max)); }