aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/cblas/dsdot.c
diff options
context:
space:
mode:
authorshmel1k <shmel1k@ydb.tech>2022-09-02 12:44:59 +0300
committershmel1k <shmel1k@ydb.tech>2022-09-02 12:44:59 +0300
commit90d450f74722da7859d6f510a869f6c6908fd12f (patch)
tree538c718dedc76cdfe37ad6d01ff250dd930d9278 /contrib/libs/cblas/dsdot.c
parent01f64c1ecd0d4ffa9e3a74478335f1745f26cc75 (diff)
downloadydb-90d450f74722da7859d6f510a869f6c6908fd12f.tar.gz
[] add metering mode to CLI
Diffstat (limited to 'contrib/libs/cblas/dsdot.c')
-rw-r--r--contrib/libs/cblas/dsdot.c135
1 files changed, 135 insertions, 0 deletions
diff --git a/contrib/libs/cblas/dsdot.c b/contrib/libs/cblas/dsdot.c
new file mode 100644
index 00000000000..26e66df9e51
--- /dev/null
+++ b/contrib/libs/cblas/dsdot.c
@@ -0,0 +1,135 @@
+/* dsdot.f -- translated by f2c (version 20061008).
+ You must link the resulting object file with libf2c:
+ on Microsoft Windows system, link with libf2c.lib;
+ on Linux or Unix systems, link with .../path/to/libf2c.a -lm
+ or, if you install libf2c.a in a standard place, with -lf2c -lm
+ -- in that order, at the end of the command line, as in
+ cc *.o -lf2c -lm
+ Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
+
+ http://www.netlib.org/f2c/libf2c.zip
+*/
+
+#include "f2c.h"
+#include "blaswrap.h"
+
+doublereal dsdot_(integer *n, real *sx, integer *incx, real *sy, integer *
+ incy)
+{
+ /* System generated locals */
+ integer i__1, i__2;
+ doublereal ret_val;
+
+ /* Local variables */
+ integer i__, ns, kx, ky;
+
+/* .. Scalar Arguments .. */
+/* .. */
+/* .. Array Arguments .. */
+/* .. */
+
+/* AUTHORS */
+/* ======= */
+/* Lawson, C. L., (JPL), Hanson, R. J., (SNLA), */
+/* Kincaid, D. R., (U. of Texas), Krogh, F. T., (JPL) */
+
+/* Purpose */
+/* ======= */
+/* Compute the inner product of two vectors with extended */
+/* precision accumulation and result. */
+
+/* Returns D.P. dot product accumulated in D.P., for S.P. SX and SY */
+/* DSDOT = sum for I = 0 to N-1 of SX(LX+I*INCX) * SY(LY+I*INCY), */
+/* where LX = 1 if INCX .GE. 0, else LX = 1+(1-N)*INCX, and LY is */
+/* defined in a similar way using INCY. */
+
+/* Arguments */
+/* ========= */
+
+/* N (input) INTEGER */
+/* number of elements in input vector(s) */
+
+/* SX (input) REAL array, dimension(N) */
+/* single precision vector with N elements */
+
+/* INCX (input) INTEGER */
+/* storage spacing between elements of SX */
+
+/* SY (input) REAL array, dimension(N) */
+/* single precision vector with N elements */
+
+/* INCY (input) INTEGER */
+/* storage spacing between elements of SY */
+
+/* DSDOT (output) DOUBLE PRECISION */
+/* DSDOT double precision dot product (zero if N.LE.0) */
+
+/* REFERENCES */
+/* ========== */
+
+/* C. L. Lawson, R. J. Hanson, D. R. Kincaid and F. T. */
+/* Krogh, Basic linear algebra subprograms for Fortran */
+/* usage, Algorithm No. 539, Transactions on Mathematical */
+/* Software 5, 3 (September 1979), pp. 308-323. */
+
+/* REVISION HISTORY (YYMMDD) */
+/* ========================== */
+
+/* 791001 DATE WRITTEN */
+/* 890831 Modified array declarations. (WRB) */
+/* 890831 REVISION DATE from Version 3.2 */
+/* 891214 Prologue converted to Version 4.0 format. (BAB) */
+/* 920310 Corrected definition of LX in DESCRIPTION. (WRB) */
+/* 920501 Reformatted the REFERENCES section. (WRB) */
+/* 070118 Reformat to LAPACK style (JL) */
+
+/* ===================================================================== */
+
+/* .. Local Scalars .. */
+/* .. */
+/* .. Intrinsic Functions .. */
+/* .. */
+ /* Parameter adjustments */
+ --sy;
+ --sx;
+
+ /* Function Body */
+ ret_val = 0.;
+ if (*n <= 0) {
+ return ret_val;
+ }
+ if (*incx == *incy && *incx > 0) {
+ goto L20;
+ }
+
+/* Code for unequal or nonpositive increments. */
+
+ kx = 1;
+ ky = 1;
+ if (*incx < 0) {
+ kx = (1 - *n) * *incx + 1;
+ }
+ if (*incy < 0) {
+ ky = (1 - *n) * *incy + 1;
+ }
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ ret_val += (doublereal) sx[kx] * (doublereal) sy[ky];
+ kx += *incx;
+ ky += *incy;
+/* L10: */
+ }
+ return ret_val;
+
+/* Code for equal, positive, non-unit increments. */
+
+L20:
+ ns = *n * *incx;
+ i__1 = ns;
+ i__2 = *incx;
+ for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) {
+ ret_val += (doublereal) sx[i__] * (doublereal) sy[i__];
+/* L30: */
+ }
+ return ret_val;
+} /* dsdot_ */