summaryrefslogtreecommitdiffhomepage
path: root/misc/benchmarks/various/cspan_bench.c
diff options
context:
space:
mode:
Diffstat (limited to 'misc/benchmarks/various/cspan_bench.c')
-rw-r--r--misc/benchmarks/various/cspan_bench.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/misc/benchmarks/various/cspan_bench.c b/misc/benchmarks/various/cspan_bench.c
index 589df13a..f4b067f8 100644
--- a/misc/benchmarks/various/cspan_bench.c
+++ b/misc/benchmarks/various/cspan_bench.c
@@ -1,4 +1,4 @@
-#define STC_NDEBUG
+#define NDEBUG
#include <stc/cspan.h>
#include <stdio.h>
#include <time.h>
@@ -12,8 +12,7 @@ enum {
nz = 64
};
int lx = 15, ly = 10, lz = 5;
-int hx = 20, hy = 15, hz = 15;
-intptr_t n = 1000000;
+int hx = 30, hy = 15, hz = 15;
// define the contents of two nx x ny x nz arrays in and out
double Vout[nx * ny * nz];
@@ -21,12 +20,12 @@ double Vin[nx * ny * nz]; //, 1.23;
// define some slice indices for each dimension
-static void MDRanges_setup(intptr_t state)
+static void MDRanges_setup(intptr_t n)
{
double sum = 0;
clock_t t = clock();
- for (intptr_t s = 0; s < state; ++s)
+ for (intptr_t s = 0; s < n; ++s)
{
MD3 r_in = cspan_md(Vin, nx, ny, nz);
MD3 r_out = cspan_md(Vout, nx, ny, nz);
@@ -41,18 +40,18 @@ static void MDRanges_setup(intptr_t state)
printf("setup: %.1f ms, %f\n", 1000.0f * t / CLOCKS_PER_SEC, sum);
}
-static void TraditionalForLoop(intptr_t state)
+static void TraditionalForLoop(intptr_t n)
{
clock_t t = clock();
double sum = 0;
- for (int s = 0; s < state; ++s) {
+ for (int s = 0; s < n; ++s) {
for (int x = lx; x < hx; ++x) {
for (int y = ly; y < hy; ++y) {
- for (int z = lz; z < hz; ++z)
- {
- double d = Vin[nz*(ny*x + y) + z];
- Vout[nz*(ny*x + y) + z] += d;
+ for (int z = lz; z < hz; ++z) {
+ int i = nz*(ny*x + y) + z;
+ double d = Vin[i];
+ Vout[i] += d;
sum += d;
}
}
@@ -62,18 +61,18 @@ static void TraditionalForLoop(intptr_t state)
printf("forloop: %.1f ms, %f\n", 1000.0f * t / CLOCKS_PER_SEC, sum);
}
-static void MDRanges_nested_loop(intptr_t state)
+static void MDRanges_nested_loop(intptr_t n)
{
+ clock_t t = clock();
MD3 r_in = cspan_md(Vin, nx, ny, nz);
MD3 r_out = cspan_md(Vout, nx, ny, nz);
r_in = cspan_slice(MD3, &r_in, {lx, hx}, {ly, hy}, {lz, hz});
r_out = cspan_slice(MD3, &r_out, {lx, hx}, {ly, hy}, {lz, hz});
// C++23: for (auto [o, i] : std::views::zip(flat(r_out), flat(r_in))) { o = i; }
- clock_t t = clock();
double sum = 0;
- for (intptr_t s = 0; s < state; ++s) {
+ for (intptr_t s = 0; s < n; ++s) {
for (int x = 0; x < r_in.shape[0]; ++x) {
for (int y = 0; y < r_in.shape[1]; ++y) {
for (int z = 0; z < r_in.shape[2]; ++z)
@@ -89,7 +88,7 @@ static void MDRanges_nested_loop(intptr_t state)
printf("nested: %.1f ms, %f\n", 1000.0f * t / CLOCKS_PER_SEC, sum);
}
-static void MDRanges_loop_over_joined(intptr_t state)
+static void MDRanges_loop_over_joined(intptr_t n)
{
MD3 r_in = cspan_md(Vin, nx, ny, nz);
MD3 r_out = cspan_md(Vout, nx, ny, nz);
@@ -100,7 +99,7 @@ static void MDRanges_loop_over_joined(intptr_t state)
double sum = 0;
clock_t t = clock();
- for (intptr_t s = 0; s < state; ++s) {
+ for (intptr_t s = 0; s < n; ++s) {
MD3_iter i = MD3_begin(&r_in);
MD3_iter o = MD3_begin(&r_out);
@@ -114,8 +113,9 @@ static void MDRanges_loop_over_joined(intptr_t state)
printf("joined: %.1f ms, %f\n", 1000.0f * t / CLOCKS_PER_SEC, sum);
}
-int main()
+int main(void)
{
+ intptr_t n = 100000;
for (int i = 0; i < nx * ny * nz; ++i)
Vin[i] = i + 1.23;