萝卜头IT论坛

搜索
查看: 1324|回复: 9
收起左侧

改编:CPU测速工具V2.0

[复制链接]
发表于 2023-7-25 17:09:24 | 显示全部楼层 |阅读模式
源码灵感来源:暑假收官之作:CPU测速工具V2.0 - 原创小软件 - 萝卜头IT论坛 - Powered by Discuz! (luobotou.org)

看到@爱电脑的昕宇 写的CPU测速工具,采用的是python,结合学的C语言进行一些改编,不确定程序是否能合理运行。


源码:

#include <stdio.h>
#include <time.h>

// Function Declarations
void about();
void timeBasedTest();
void countBasedTest();

// Function Definitions
void about() {
    printf("CPU Test V 2.0\n爱电脑的昕宇作品\n结果仅供参考。\n");
}

void timeBasedTest() {
    clock_t start, end;
    double cpu_time_used;
    int looptime = 1;
    int n = 0;
    double total = 0.0;

    while (total <= 5.0) {
        start = clock();
        while (n < (looptime * 1000000)) {
            n = n + 1;
        }
        end = clock();
        cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC;
        total = total + cpu_time_used;
        looptime = looptime + 1;
    }

    printf("n: %d\n", n);
    printf("total: %f\n", total);
    int v = (int)(n / total);
    printf("变量为时间得分:%f\n", (double)v);

}

void countBasedTest() {
    clock_t start, end;
    double cpu_time_used;
    int s = 0;

    start = clock();
    while (s < 100000000) {
        s = s + 1;
    }
    end = clock();
    cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC;
    double ops = s / cpu_time_used;

printf("变量为次数得分:%f\n", ops);

}

int main() {
    printf("这是什么?\n\n在控制变量为时间测试中,程序进行5秒的循环测试,每次测试执行一百万次+1运算;\n\n在控制变量为次数测试中,程序执行一亿次+1运算,直到运算完成后计算速度。\n");

    int choice;

    do {
        printf("\n请选择测试类型:\n1. 控制变量为时间测试\n2. 控制变量为次数测试\n0. 退出\n");
        
        if (scanf("%d", &choice) != 1) {
            printf("无效的选择。\n");
            return 1;
        }

        switch (choice) {
            case 1:
                timeBasedTest();
                break;
            case 2:
                countBasedTest();
                break;
            case 0:
                printf("程序已退出。\n");
                return 0;
            default:
                printf("无效的选择,请重新输入。\n");
                break;
        }

    } while (1);

    return 0;
}




原理:

该C程序是一个简单的CPU测试程序,用于测试CPU的性能。程序提供了两种测试类型:控制变量为时间测试和控制变量为次数测试。

1. 控制变量为时间测试 (`timeBasedTest` 函数):

在这个测试中,程序进行5秒的循环测试,每次测试执行一百万次+1运算。它的主要步骤如下:

- 初始化一个变量 `looptime` 为 1,用于记录测试的轮数。
- 初始化一个变量 `total` 为 0.0,用于记录已经消耗的总时间。
- 进入一个循环,该循环会不断执行下面的步骤直到 `total` 的值超过 5.0 秒为止:
  - 记录当前时间为 `start`。
  - 在一个内层循环中,执行 `looptime * 1000000` 次加一操作,将变量 `n` 递增。
  - 记录当前时间为 `end`。
  - 计算这次测试消耗的 CPU 时间 `cpu_time_used`,通过计算 `end - start` 得到时间差,再除以 `CLOCKS_PER_SEC` 得到秒数。
  - 将本次测试消耗的 CPU 时间累加到 `total` 中。
  - 将 `looptime` 递增,用于下一轮测试。

- 最后,计算变量 `n` 在总时间 `total` 内的平均执行次数,将其转换为整数 `v`。

2. 控制变量为次数测试 (`countBasedTest` 函数):

在这个测试中,程序执行一亿次+1运算,直到运算完成后计算运算速度。它的主要步骤如下:

- 初始化一个变量 `s` 为 0,用于记录执行的次数。
- 记录当前时间为 `start`。
- 进入一个循环,该循环会执行 1 亿次加一操作,将变量 `s` 递增。
- 记录当前时间为 `end`。
- 计算这次测试消耗的 CPU 时间 `cpu_time_used`,通过计算 `end - start` 得到时间差,再除以 `CLOCKS_PER_SEC` 得到秒数。
- 计算每秒钟可以执行的次数 `ops`,通过将 `s` 除以 `cpu_time_used` 得到。




附件一个是源码,还有一个是编译后的.exe
CT.exe (83.12 KB, 下载次数: 104)
CT.c (2.03 KB, 下载次数: 96)

回复

使用道具 举报

发表于 2023-7-25 18:41:41 来自手机 | 显示全部楼层
C语言的性能应该比Python好,可以更准确地反应CPU能力
回复

使用道具 举报

发表于 2023-7-26 12:18:12 | 显示全部楼层
成绩差别,看来C语言真的比python性能高

image.png
回复

使用道具 举报

发表于 2023-7-26 13:10:28 | 显示全部楼层
爱电脑的昕宇 发表于 2023-7-26 12:18
成绩差别,看来C语言真的比python性能高

每个语言都有它的特点,python现在还是非常火的。
回复

使用道具 举报

发表于 2023-7-26 14:16:40 | 显示全部楼层
jyssysz 发表于 2023-7-26 13:10
每个语言都有它的特点,python现在还是非常火的。

Python适合做一些轻量级的程序,编写速度很快,代码简单,但运行速度较慢。c语言适合做对速度敏感的程序,比如说游戏或者大型程序,编写耗时,代码复杂但是运行速度快。
回复

使用道具 举报

发表于 2023-7-26 16:57:05 | 显示全部楼层
c语言好像python的占用低 速度快
回复

使用道具 举报

发表于 2023-7-26 16:57:21 | 显示全部楼层
wtgahz 发表于 2023-7-26 16:57
c语言好像比oython的占用低 速度快

Python,打错字了
回复

使用道具 举报

发表于 2023-7-26 17:40:40 | 显示全部楼层
看来擅长编程的人才论坛很多呢
回复

使用道具 举报

联系我们(Contact)|手机版|萝卜头IT论坛 ( 苏ICP备15050961号-1 )

GMT+8, 2024-4-28 17:31 , Processed in 0.108044 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表