dot product function in vectorIC and vectorCupy
Currently using native numpy and cupy dot product function which accumulates summation in a single-precision variable. For large vectors, we may encounter overflow with single-precision. Our dot product function should call a matrix multiplication and then sum it into a double-precision number, finally casting to a single-precision number before returning the value.