Скорость обработки не имеет значения в 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;
}