news 2026/3/3 3:37:14

C++电脑性能测试代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++电脑性能测试代码

源代码,拷贝到编译器上运行即可

#include <iostream> #include <vector> #include <chrono> #include <cmath> #include <algorithm> #include <random> #include <fstream> #include <iomanip> #include <cstring> #include <functional> #include <numeric> #ifdef _WIN32 #include <windows.h> #include <psapi.h> #elif defined(__linux__) #include <unistd.h> #include <sys/sysinfo.h> #elif defined(__APPLE__) #include <sys/types.h> #include <sys/sysctl.h> #endif class SystemInfo { public: static int getCPUThreads() { // 使用平台特定方法获取CPU核心数 #ifdef _WIN32 SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); return sysInfo.dwNumberOfProcessors; #elif defined(__linux__) return sysconf(_SC_NPROCESSORS_ONLN); #elif defined(__APPLE__) int numCPU; size_t len = sizeof(numCPU); sysctlbyname("hw.ncpu", &numCPU, &len, NULL, 0); return numCPU; #else return 1; // 默认值 #endif } static double getMemoryGB() { #ifdef _WIN32 MEMORYSTATUSEX memInfo; memInfo.dwLength = sizeof(MEMORYSTATUSEX); GlobalMemoryStatusEx(&memInfo); return memInfo.ullTotalPhys / (1024.0 * 1024 * 1024); #elif defined(__linux__) struct sysinfo memInfo; sysinfo(&memInfo); return memInfo.totalram * memInfo.mem_unit / (1024.0 * 1024 * 1024); #elif defined(__APPLE__) int64_t memSize; size_t length = sizeof(memSize); sysctlbyname("hw.memsize", &memSize, &length, NULL, 0); return memSize / (1024.0 * 1024 * 1024); #endif return 0; } }; class Benchmark { private: struct TestResult { std::string name; double score; double weight; double rawValue; std::string unit; }; std::vector<TestResult> results; double normalizeScore(double value, double min, double max, bool higherBetter = true) { if (value < min) return 0.0; if (value > max) return 100.0; if (higherBetter) { return ((value - min) / (max - min)) * 100.0; } else { return ((max - value) / (max - min)) * 100.0; } } public: // CPU性能测试 - 浮点运算 TestResult testCPUFloat() { auto start = std::chrono::high_resolution_clock::now(); const int size = 500000; // 减少数据量以加快测试 std::vector<double> data(size); // 初始化数据 for (int i = 0; i < size; i++) { data[i] = i + 1.0; } // 执行浮点运算 for (int i = 0; i < 50; ++i) { // 减少迭代次数 for (int j = 0; j < size; ++j) { data[j] = std::sin(data[j]) * std::cos(data[j]) + std::sqrt(fabs(data[j])); } } auto end = std::chrono::high_resolution_clock::now(); double duration = std::chrono::duration<double>(end - start).count(); // 计算每秒浮点运算次数 double flops = (size * 50.0 * 5) / duration; // 5 operations per iteration TestResult result; result.name = "CPU浮点性能"; result.rawValue = flops / 1e9; // 转换为GFlops result.unit = "GFlops"; // 评分标准:0.5 GFlops = 10分, 50 GFlops = 100分 result.score = normalizeScore(result.rawValue, 0.5, 50.0); result.weight = 0.30; return result; } // CPU性能测试 - 整数运算 TestResult testCPUInteger() { auto start = std::chrono::high_resolution_clock::now(); const int size = 5000000; // 减少数据量 std::vector<int> data(size); // 初始化数据 for (int i = 0; i < size; i++) { data[i] = i + 1; } // 执行整数运算 for (int i = 0; i < 25; ++i) { // 减少迭代次数 for (int j = 0; j < size; ++j) { data[j] = (data[j] * 3 + 7) % 1000; data[j] = data[j] ^ (data[j] << 13); data[j] = data[j] ^ (data[j] >> 17); data[j] = data[j] ^ (data[j] << 5); } } auto end = std::chrono::high_resolution_clock::now(); double duration = std::chrono::duration<double>(end - start).count(); // 计算每秒整数运算次数 double iops = (size * 25.0 * 4) / duration; TestResult result; result.name = "CPU整数性能"; result.rawValue = iops / 1e9; // 转换为GIOps result.unit = "GIOps"; // 评分标准:0.5 GIOps = 10分, 25 GIOps = 100分 result.score = normalizeScore(result.rawValue, 0.5, 25.0); result.weight = 0.30; return result; } // 内存性能测试 TestResult testMemory() { const size_t size = 50 * 1024 * 1024; // 50MB std::vector<char> buffer(size); // 写入测试 auto startWrite = std::chrono::high_resolution_clock::now(); for (size_t i = 0; i < size; i += 128) { // 增加步长 buffer[i] = static_cast<char>(i % 256); } auto endWrite = std::chrono::high_resolution_clock::now(); // 读取测试 char dummy = 0; // 防止编译器优化 auto startRead = std::chrono::high_resolution_clock::now(); for (size_t i = 0; i < size; i += 128) { dummy += buffer[i]; } auto endRead = std::chrono::high_resolution_clock::now(); // 使用dummy防止优化 if (dummy == 0) {} double writeTime = std::chrono::duration<double>(endWrite - startWrite).count(); double readTime = std::chrono::duration<double>(endRead - startRead).count(); double writeSpeed = (size / writeTime) / (1024.0 * 1024 * 1024); // GB/s double readSpeed = (size / readTime) / (1024.0 * 1024 * 1024); // GB/s double avgSpeed = (writeSpeed + readSpeed) / 2.0; TestResult result; result.name = "内存性能"; result.rawValue = avgSpeed; result.unit = "GB/s"; // 评分标准:1 GB/s = 20分, 20 GB/s = 100分 result.score = normalizeScore(avgSpeed, 1.0, 20.0); result.weight = 0.20; return result; } // 文件I/O性能测试 TestResult testFileIO() { const char* testFile = "benchmark_test.bin"; const size_t fileSize = 25 * 1024 * 1024; // 25MB std::vector<char> buffer(512 * 1024); // 512KB buffer // 填充随机数据 for (size_t i = 0; i < buffer.size(); i++) { buffer[i] = static_cast<char>(i % 256); } // 写入测试 auto startWrite = std::chrono::high_resolution_clock::now(); std::ofstream outFile(testFile, std::ios::binary); if (outFile) { for (size_t i = 0; i < fileSize; i += buffer.size()) { outFile.write(buffer.data(), buffer.size()); } outFile.close(); } auto endWrite = std::chrono::high_resolution_clock::now(); // 读取测试 auto startRead = std::chrono::high_resolution_clock::now(); std::ifstream inFile(testFile, std::ios::binary); if (inFile) { while (inFile.read(buffer.data(), buffer.size())) { // Just reading } inFile.close(); } auto endRead = std::chrono::high_resolution_clock::now(); // 清理测试文件 remove(testFile); double writeTime = std::chrono::duration<double>(endWrite - startWrite).count(); double readTime = std::chrono::duration<double>(endRead - startRead).count(); double writeSpeed = 0, readSpeed = 0; if (writeTime > 0) writeSpeed = (fileSize / writeTime) / (1024.0 * 1024); // MB/s if (readTime > 0) readSpeed = (fileSize / readTime) / (1024.0 * 1024); // MB/s double avgSpeed = (writeSpeed + readSpeed) / 2.0; TestResult result; result.name = "磁盘I/O性能"; result.rawValue = avgSpeed; result.unit = "MB/s"; // 评分标准:30 MB/s = 10分, 500 MB/s = 100分 result.score = normalizeScore(avgSpeed, 30.0, 500.0); result.weight = 0.20; return result; } // 运行所有测试 void runAllTests() { std::cout << "开始性能测试..." << std::endl; std::cout << "==================================" << std::endl; // 显示系统信息 std::cout << "系统信息:" << std::endl; std::cout << " CPU核心数: " << SystemInfo::getCPUThreads() << std::endl; std::cout << " 内存大小: " << std::fixed << std::setprecision(1) << SystemInfo::getMemoryGB() << " GB" << std::endl; std::cout << "==================================" << std::endl; // 运行各个测试 std::cout << "测试 1/4 进行中..." << std::endl; try { results.push_back(testCPUFloat()); std::cout << " CPU浮点性能 完成" << std::endl; } catch (const std::exception& e) { std::cout << " CPU浮点性能测试失败: " << e.what() << std::endl; } std::cout << "测试 2/4 进行中..." << std::endl; try { results.push_back(testCPUInteger()); std::cout << " CPU整数性能 完成" << std::endl; } catch (const std::exception& e) { std::cout << " CPU整数性能测试失败: " << e.what() << std::endl; } std::cout << "测试 3/4 进行中..." << std::endl; try { results.push_back(testMemory()); std::cout << " 内存性能 完成" << std::endl; } catch (const std::exception& e) { std::cout << " 内存性能测试失败: " << e.what() << std::endl; } std::cout << "测试 4/4 进行中..." << std::endl; try { results.push_back(testFileIO()); std::cout << " 磁盘I/O性能 完成" << std::endl; } catch (const std::exception& e) { std::cout << " 磁盘I/O性能测试失败: " << e.what() << std::endl; } std::cout << "==================================" << std::endl; std::cout << "所有测试完成!" << std::endl; } // 显示测试结果 void displayResults() { std::cout << "\n性能测试结果:" << std::endl; std::cout << "==================================" << std::endl; std::cout << std::left << std::setw(20) << "测试项目" << std::setw(12) << "分数" << std::setw(12) << "权重" << std::setw(15) << "原始值" << std::setw(10) << "单位" << std::endl; std::cout << "----------------------------------" << std::endl; double totalScore = 0.0; double totalWeight = 0.0; for (const auto& result : results) { std::cout << std::left << std::setw(20) << result.name << std::setw(12) << std::fixed << std::setprecision(1) << result.score << std::setw(12) << std::fixed << std::setprecision(2) << result.weight << std::setw(15) << std::fixed << std::setprecision(2) << result.rawValue << std::setw(10) << result.unit << std::endl; totalScore += result.score * result.weight; totalWeight += result.weight; } std::cout << "==================================" << std::endl; // 计算综合得分 double finalScore = (totalWeight > 0) ? totalScore / totalWeight : 0; std::cout << "\n综合性能得分: " << std::fixed << std::setprecision(1) << finalScore << "/100" << std::endl; // 性能评级 std::cout << "性能评级: "; if (finalScore >= 90) { std::cout << "极佳"; } else if (finalScore >= 80) { std::cout << "优秀"; } else if (finalScore >= 70) { std::cout << "良好"; } else if (finalScore >= 60) { std::cout << "中等"; } else if (finalScore >= 50) { std::cout << "一般"; } else { std::cout << "较差"; } std::cout << std::endl; } }; int main() { std::cout << "电脑性能测试工具" << std::endl; std::cout << "=====================" << std::endl; std::cout << "注意:测试过程中电脑可能会出现卡顿,这是正常现象。" << std::endl; std::cout << "测试可能需要几分钟时间,请耐心等待..." << std::endl; std::cout << std::endl; Benchmark benchmark; char choice; std::cout << "是否开始性能测试?(y/n): "; std::cin >> choice; if (choice == 'y' || choice == 'Y') { benchmark.runAllTests(); benchmark.displayResults(); } else { std::cout << "测试已取消。" << std::endl; } std::cout << "\n按任意键退出..." << std::endl; std::cin.ignore(); std::cin.get(); return 0; }

测试项目:

  1. CPU浮点性能:测试科学计算能力

  2. CPU整数性能:测试通用计算能力

  3. 内存性能:测试内存读写速度

  4. 磁盘I/O性能:测试硬盘读写速度

权重分配:

  • CPU浮点性能:30%

  • CPU整数性能:30%

  • 内存性能:20%

  • 磁盘I/O性能:20%

这个版本应该能在大多数C++编译器上编译运行,包括较老的编译器版本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/25 17:03:03

TVM量化部署实践:从模型压缩到CUDA加速的工程化方案

TVM量化部署实践&#xff1a;从模型压缩到CUDA加速的工程化方案 【免费下载链接】tvm-cn TVM Documentation in Chinese Simplified / TVM 中文文档 项目地址: https://gitcode.com/gh_mirrors/tv/tvm-cn 挑战&#xff1a;如何在保持精度的同时实现模型加速 在深度学习…

作者头像 李华
网站建设 2026/2/24 12:38:30

12.13 学习笔记

一、权限与认证相关 1. 项目中RBAC模型的权限设计 我在项目中基于RBAC&#xff08;基于角色的访问控制&#xff09;模型&#xff0c;设计了**“用户-角色-权限-资源”四层权限架构**&#xff0c;核心实现如下&#xff1a; &#xff08;1&#xff09;权限粒度划分 功能权限&…

作者头像 李华
网站建设 2026/2/26 22:07:09

3大实战场景:深度解决.NET MAUI在Android平台的适配痛点

3大实战场景&#xff1a;深度解决.NET MAUI在Android平台的适配痛点 【免费下载链接】maui dotnet/maui: .NET MAUI (Multi-platform App UI) 是.NET生态下的一个统一跨平台应用程序开发框架&#xff0c;允许开发者使用C#和.NET编写原生移动和桌面应用&#xff0c;支持iOS、And…

作者头像 李华
网站建设 2026/2/26 21:21:23

基于神经网络的风电机组齿轮箱故障诊断研究与设计

随着全球能源结构向清洁化、低碳化转型&#xff0c;风力发电已成为新能源领域的重要组成部分。风电机组通常运行在高负载、强振动和复杂气候环境中&#xff0c;其中齿轮箱作为风电机组的关键传动部件&#xff0c;承担着转速和扭矩转换的重要任务&#xff0c;其运行状态直接影响…

作者头像 李华
网站建设 2026/3/2 1:51:35

中国移动中兴云电脑W132D-RK3528-2+32G_安卓9_ADB开启线刷包

中国移动中兴云电脑W132D-RK3528-232G_安卓9_ADB开启线刷包 往期固件&#xff1a; 参考&#xff1a;中国移动中兴云电脑W132D-RK3528-232G-刷机固件包&#xff08;非原机制作&#xff09; 链接&#xff1a;https://blog.csdn.net/fatiaozhang9527/article/details/151287241?o…

作者头像 李华
网站建设 2026/3/2 12:39:52

深度学习python项目--垃圾图像分类识别 关键模型:VGG19DenseNet121Res...

深度学习python项目--垃圾图像分类识别 关键模型:VGG19DenseNet121ResNeXt101 包含内容:数据集ppt文档代码搞图像分类项目的时候&#xff0c;选模型总让人头大。这次垃圾识别项目我试了三个经典CNN架构&#xff1a;VGG19、DenseNet121和ResNeXt101。这三个老将放在垃圾数据集上…

作者头像 李华