int main(void) {
    int i, sorted;
    int *arrayS = malloc(sizeof(int) * MAXN);
    int *arrayP = malloc(sizeof(int) * MAXN);

    unsigned int seed = time(NULL);

    long start_sequential, end_sequential, start_parallel, end_parallel;

    double calc, sequential, parallel;

    for (i = 0; i < MAXN; i++) {
        arrayS[i] = rand_r(&seed);
        arrayP[i] = rand_r(&seed);
    }

    arrayIsSorted(arrayS);

    struct timespec start_sequential_time;
    clock_gettime(CLOCK_MONOTONIC, &start_sequential_time);
    start_sequential = start_sequential_time.tv_sec * NANOSECS_PER_SEC + 
        start_sequential_time.tv_nsec;

    sequentialCountSort(arrayS);

    struct timespec end_sequential_time;
    clock_gettime(CLOCK_MONOTONIC, &end_sequential_time);
    end_sequential = end_sequential_time.tv_sec * NANOSECS_PER_SEC + 
        end_sequential_time.tv_nsec;

    sequential = (double)(end_sequential - start_sequential) / NANOSECS_PER_SEC;

    arrayIsSorted(arrayS);
    printf("Sequential time = %.4f sec.\n", sequential);

    arrayIsSorted(arrayP);
    struct timespec start_parallel_time;
    clock_gettime(CLOCK_MONOTONIC, &start_parallel_time);
    start_parallel = start_parallel_time.tv_sec * NANOSECS_PER_SEC + 
        start_parallel_time.tv_nsec;

    parallelCountSort(arrayP);

    struct timespec end_parallel_time;
    clock_gettime(CLOCK_MONOTONIC, &end_parallel_time);
    end_parallel = end_parallel_time.tv_sec * NANOSECS_PER_SEC + 
        end_parallel_time.tv_nsec;

    parallel = (double)(end_parallel - start_parallel) / NANOSECS_PER_SEC;

    arrayIsSorted(arrayP);
    printf("Parallel time = %.4f sec.\n", parallel);

    return 0;
}
Exemple #2
0
double sortArrayWithBenchmark(uint32_t arr[], const unsigned int count, SortBenchmark benchmark)
{
    uint32_t arrCopy[count];
    memcpy(arrCopy, arr, sizeof(uint32_t) * count);

    printf("Running %s sort...\n", benchmark.algorithm);

    double startTime = clock();

    benchmark.func(arrCopy, count);

    double endTime = clock();

    assert(arrayIsSorted(arrCopy, count));

    double totalTime = (endTime - startTime) / CLOCKS_PER_SEC;

    printf("%s sort finished in %lf sec\n\n", benchmark.algorithm, totalTime);

    return totalTime;
}