Скорость обработки не имеет значения в C-программе

Я программирую инструмент, который генерирует несколько цифр квадратного корня из 2. Библиотека, которую я использую, - это GMP для получения большего количества цифр. Я отлаживал программу на двухъядерном процессоре с тактовой частотой 1,4 ГГц и на четырехъядерном процессоре с тактовой частотой 3,4 ГГц. Также я измерил время с помощью функции time(0), которую я использовал до вызова функции и после, а затем вычел результат. Я заметил, что нет абсолютно никакой разницы во времени, когда я пробую программу на разных компьютерах с разными процессорами. Может быть, мне нужно включить что-то вроде многопоточности или чтобы он использовал всю мощность процессора. Я должен также упомянуть, что все было скомпилировано с GCC с флагами компоновщика -lgmp.

Вот код

/*
 * sqrt2.c
 *
 *  Created on: 18.02.2015
 *      Author: iPh1ps99
 */

#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include "helper.h"

/*
 * @param decimals: Holds the amount of digits
 * @return Returns the malloc'd string holding the digits
 */
char *sqrt2(unsigned long decimals) {
    mpf_t result;
    mp_exp_t exp;
    char *output;

    /*
     * Initializing
     */
    mpf_set_default_prec(decimals * BINARYLOG10);
    mpf_inits(result, NULL);

    /*
     * Calculation
     */
    mpf_sqrt_ui(result, 2);

    /*
     * Converting number to a string
     */
    output = mpf_get_str(NULL, &exp, 10, 0, result);

    /*
     * Cleaning up
     */
    mpf_clears(result, NULL);

    return output;
}

А вот как я называю функцию

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "helper.h"

int main() {
    unsigned long decimals = 100000000;
    char *output = NULL;
    FILE *out = NULL;
    out = fopen("sqrt2.txt", "w");
    if (out == NULL) {
        printf("Error occured while opening file!");
        return 1;
    }

    int start = time(NULL);
    output = sqrt2(decimals);
    int end = time(NULL);
    fprintf(out, "%.1s.%s\n", output, output + 1);
    printf("It took me about %d seconds to calculate %lu decimals\n", end - start,
            decimals);

    fclose(out);
    free(output);
    return 0;
}

0 ответов

Другие вопросы по тегам