Untitled

Anonymous
plain_text
08/27/2026 10:44 PM
2.5 KB
12
Indexable
#include <stdio.h>
#include <mach/mach_time.h>
#include <stdlib.h>

typedef struct timer_t timer_t;
struct timer_t {
    uint64_t start_time;
    mach_timebase_info_data_t timebase_info;
};

void timer_reset(timer_t *timer) {
    timer->start_time = mach_absolute_time();
    mach_timebase_info(&timer->timebase_info);
}

double timer_msec_elapsed(timer_t *timer) {
    uint64_t end_time = mach_absolute_time();
    uint64_t elapsed_time = end_time - timer->start_time;

    double elapsed_msec = (double)elapsed_time * timer->timebase_info.numer / timer->timebase_info.denom / 1e6;

    return elapsed_msec;
}

int counter = 0;

__attribute__((noinline))
int f(int i) {
    counter += i;
    return counter;
}

__attribute__((noinline))
int g(int i) {
    counter += i*2;
    return counter;
}

bool flag = false;

int main(int argc, char **argv) {
    timer_t timer = {0};

    // int n = 1000000000;
    int n = 10000000;
    int *a = malloc(sizeof(int) * n);

    double msec_inner_if = 0.0;
    double msec_outer_if = 0.0;

    for (int j = 0; j < 100; ++j) {
        flag = arc4random() % 2;

        timer_reset(&timer);

        for (int i = 0; i < n; ++i) {
            if (flag) {
                a[i] = f(i);
            } else {
                a[i] = g(i);
            }
        }

        double msec_elapsed = timer_msec_elapsed(&timer);
        msec_inner_if += msec_elapsed;

        timer_reset(&timer);

        if (flag) {
            for (int i = 0; i < n; ++i)
                a[i] = f(i);
        } else {
            for (int i = 0; i < n; ++i)
                a[i] = g(i);
        }

        msec_elapsed = timer_msec_elapsed(&timer);
        msec_outer_if += msec_elapsed;

        if (j % 10 == 0) {
            printf("Iteration: %d\n", j);
        }
    }

    msec_inner_if /= 100.0;
    msec_outer_if /= 100.0;

    printf("Inner if msec: %.3f\n", msec_inner_if);
    printf("Outer if msec: %.3f\n", msec_outer_if);
}
Editor is loading...
Leave a Comment