1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
6 using Microsoft.Xunit.Performance;
8 using System.Runtime.CompilerServices;
11 [assembly: OptimizeForBenchmarks]
13 namespace Benchstone.BenchI
15 public static class MulMatrix
19 public const int Iterations = 1;
21 public const int Iterations = 100;
25 static volatile object VolatileObject;
27 static void Escape(object obj) {
31 static T[][] AllocArray<T>(int n1, int n2) {
32 T[][] a = new T[n1][];
33 for (int i = 0; i < n1; ++i) {
39 static void Inner(int[][] a, int[][] b, int[][] c) {
44 for (j = 0; j < Size; j++) {
45 for (i = 0; i < Size; i++) {
48 c[i][j] = a[i][j] + b[i][j];
53 for (j = 0; j < Size; j++) {
54 for (k = 0; k < Size; k++) {
55 for (l = 0; l < Size; l++) {
56 c[j][k] += a[j][l] * b[l][k];
62 for (j = 0; j < Size; j++) {
63 for (l = 0; l < Size; l++) {
64 for (k = 0; k < Size; k++) {
65 c[j][k] += a[j][l] * b[l][k];
71 for (k = 0; k < Size; k++) {
72 for (j = 0; j < Size; j++) {
73 for (l = 0; l < Size; l++) {
74 c[j][k] += a[j][l] * b[l][k];
80 for (k = 0; k < Size; k++) {
81 for (l = 0; l < Size; l++) {
82 for (j = 0; j < Size; j++) {
83 c[j][k] += a[j][l] * b[l][k];
89 for (l = 0; l < Size; l++) {
90 for (j = 0; j < Size; j++) {
91 for (k = 0; k < Size; k++) {
92 c[j][k] += a[j][l] * b[l][k];
98 for (l = 0; l < Size; l++) {
99 for (k = 0; k < Size; k++) {
100 for (j = 0; j < Size; j++) {
101 c[j][k] += a[j][l] * b[l][k];
109 [MethodImpl(MethodImplOptions.NoInlining)]
110 static bool Bench() {
111 int[][] a = AllocArray<int>(Size, Size);
112 int[][] b = AllocArray<int>(Size, Size);
113 int[][] c = AllocArray<int>(Size, Size);
115 for (int i = 0; i < Iterations; ++i) {
124 public static void Test() {
125 foreach (var iteration in Benchmark.Iterations) {
126 using (iteration.StartMeasurement()) {
132 static bool TestBase() {
133 bool result = Bench();
137 public static int Main() {
138 bool result = TestBase();
139 return (result ? 100 : -1);