public override void BinaryElementWiseOperation(NArray <double> a, NArray <double> b,
                                                        NArray <double> result, ExpressionType operation)
        {
            VectorVectorOperation vectorVectorOperation = null;

            switch (operation)
            {
            case ExpressionType.Add: vectorVectorOperation = IntelMathKernelLibrary.Add; break;

            case ExpressionType.Subtract: vectorVectorOperation = IntelMathKernelLibrary.Subtract; break;

            case ExpressionType.Multiply: vectorVectorOperation = IntelMathKernelLibrary.Multiply; break;

            case ExpressionType.Divide: vectorVectorOperation = IntelMathKernelLibrary.Divide; break;
            }
            VectorVectorOperation(a, b, result, vectorVectorOperation);
        }
        private void VectorVectorOperation(NArray <double> a, NArray <double> b, NArray <double> result, VectorVectorOperation operation)
        {
            double[] aArray, bArray, resultArray;
            int      aStart, bStart, resultStart;

            GetArray(a, out aArray, out aStart);
            GetArray(b, out bArray, out bStart);
            GetArray(result, out resultArray, out resultStart);
            operation(aArray, aStart, bArray, bStart, resultArray, resultStart, result.Length);
        }