Ejemplo n.º 1
0
        PairedBench vMulPerf(int samples, long cycles)
        {
            var lhs1 = RVec <double>(samples);
            var rhs1 = RVec <double>(samples);
            var dst1 = RowVectors.blockalloc <double>(samples);

            var sw1 = Time.stopwatch(true);

            for (var i = 0; i < cycles; i++)
            {
                Calcs.mul(lhs1, rhs1, dst1.Unblocked);
            }
            var time1 = BenchmarkRecord.Define(cycles, Time.snapshot(sw1), "gmath");

            var lhs2 = lhs1.Replicate();
            var rhs2 = rhs1.Replicate();
            var dst2 = dst1.Replicate();

            var sw2 = Time.stopwatch(true);

            for (var i = 0; i < cycles; i++)
            {
                mkl.mul(lhs2, rhs2, ref dst2);
            }
            var time2 = BenchmarkRecord.Define(cycles, Time.snapshot(sw2), "mkl");

            return(time1, time2);
        }
Ejemplo n.º 2
0
Archivo: t_gemm.cs Proyecto: 0xCM/z0
        BenchmarkRecord Gemv64 <M, N>(IEnumerable <double> src, int cycles, M m = default, N n = default)
            where M : unmanaged, ITypeNat
            where N : unmanaged, ITypeNat
        {
            var A  = Matrix.blockalloc <M, N, double>();
            var x  = RowVectors.blockalloc <N, double>();
            var y  = RowVectors.blockalloc <M, double>();
            var z  = RowVectors.blockalloc <M, double>();
            var sw = stopwatch(false);

            for (var i = 0; i < cycles; i++)
            {
                src.StreamTo(A.Unsized);
                src.StreamTo(x.Unsized);
                src.StreamTo(y.Unsized);

                sw.Start();
                mkl.gemv(A, x, ref y);
                sw.Stop();
                refmul(A, x, z);
                Claim.require(z == y);
            }

            var label = $"gemv<{nat32i<M>()},{nat32i<N>()},{typeof(double).DisplayName()}>";

            return(Benchmark(cycles, snapshot(sw), label));
        }
Ejemplo n.º 3
0
        public void vMulF64()
        {
            var lhs  = Random.VectorBlock <N256, double>();
            var rhs  = Random.VectorBlock <N256, double>();
            var dst1 = RowVectors.blockalloc <N256, double>();

            mkl.mul(lhs, rhs, ref dst1);

            var dst2 = lhs.Replicate();

            Calcs.mul(lhs.Unsized, rhs.Unsized, dst2.Unsized);
            Claim.require(dst1 == dst2);
        }
Ejemplo n.º 4
0
        public void vMulF32()
        {
            var lhs  = RVec <float>();
            var rhs  = RVec <float>();
            var dst1 = RowVectors.blockalloc <float>(lhs.Length);

            mkl.mul(lhs, rhs, ref dst1);

            var dst2 = lhs.Replicate();

            Calcs.mul(lhs, rhs, dst2.Unblocked);
            Claim.require(dst1 == dst2);
        }
Ejemplo n.º 5
0
Archivo: tvml_add.cs Proyecto: 0xCM/z0
        public void vaddF64()
        {
            var lhs  = RVec <double>();
            var rhs  = RVec <double>();
            var dst1 = RowVectors.blockalloc <double>(lhs.Length);

            mkl.add(lhs, rhs, ref dst1);

            var dst2 = lhs.Replicate();

            Calcs.add(lhs, rhs, dst2.Unblocked);
            Claim.require(dst1 == dst2);
        }