处理速度与C程序没有区别

时间:2015-02-18 13:49:33

标签: c multithreading gmp sqrt

我正在编写一个生成2的平方根数字的工具。我使用的库是GMP来获得更多数字。我用1.4Ghz的双核和3.4Ghz的四核调试程序。我还用函数调用之前和之后使用的time(0)函数测量了时间,然后我减去了结果。我注意到,当我在不同的PC上尝试使用不同的CPU时,完全没有时间差异。也许我需要启用像多线程这样的东西,或者它使用CPU的全部功能。我还应该提到,所有内容都是使用链接器标志-lgmp与GCC编译的。

这是代码

/*
 * 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 个答案:

没有答案