当前位置: 首页 > news >正文

Benchmark:大数组随机访问,和取模乘法

#include <iostream>
#include <chrono>
#include <vector>
#include <random>
#include <cstdint>// ========== 大数组随机访问基准 ==========
double random_access_bench(size_t array_size_mb, size_t iterations) {size_t size = array_size_mb * 1024 * 1024 / sizeof(uint64_t); // 转换为元素个数std::vector<uint64_t> data(size);// 用随机数填充数组(同时作为伪随机跳转表)std::mt19937_64 rng(12345);for (auto& x : data) x = rng();uint64_t index = 0;uint64_t sum = 0;auto start = std::chrono::high_resolution_clock::now();for (size_t i = 0; i < iterations; ++i) {// 随机跳转:用当前值作为下一个索引index = data[index % size];sum ^= index; // 简单操作,防止优化}auto end = std::chrono::high_resolution_clock::now();std::chrono::duration<double> elapsed = end - start;// 输出结果,避免 sum 被优化std::cout << "Random access sum (dummy): " << sum << std::endl;return elapsed.count();
}// ========== 模乘运算基准 ==========
double modmul_bench(size_t iterations, uint32_t mod) {std::mt19937 rng(12345);uint32_t a = rng(), b = rng();uint64_t result = 0;auto start = std::chrono::high_resolution_clock::now();for (size_t i = 0; i < iterations; ++i) {// 执行 1ull * a * b % mod,并更新 a,b 以避免重复result ^= (1ull * a * b) % mod;a = (a + 1) % mod;b = (b + 3) % mod; // 简单变化,保持随机性}auto end = std::chrono::high_resolution_clock::now();std::chrono::duration<double> elapsed = end - start;std::cout << "Modmul result (dummy): " << result << std::endl;return elapsed.count();
}int main() {std::cout << "=== Machine Benchmark (C++14) ===\n";// 配置参数(可根据需要调整)const size_t ARRAY_MB = 64;          // 数组大小 64MB(大于 L3 缓存)const size_t ACCESS_ITER = 100'000'000; // 随机访问次数const size_t MODMUL_ITER = 200'000'000; // 模乘运算次数const uint64_t MOD = 1'000'000'007;   // 常用模数std::cout << "\n[Random Access Bench] array=" << ARRAY_MB << "MB, iter=" << ACCESS_ITER << "\n";double t1 = random_access_bench(ARRAY_MB, ACCESS_ITER);std::cout << "Time: " << t1 << " s\n";std::cout << "\n[Modular Multiplication Bench] iter=" << MODMUL_ITER << ", mod=" << MOD << "\n";double t2 = modmul_bench(MODMUL_ITER, MOD);std::cout << "Time: " << t2 << " s\n";return 0;
}

在某学校机器(算比较好的机器)上的测试,编译选项 g++ 1.cpp -o 1 -O2 -std=c++14

=== Machine Benchmark (C++14) ===[Random Access Bench] array=64MB, iter=100000000
Random access sum (dummy): 8013025525817178743
Time: 0.845384 s[Modular Multiplication Bench] iter=200000000, mod=1000000007
Modmul result (dummy): 733859746
Time: 0.911595 s
http://www.jsqmd.com/news/432993/

相关文章:

  • 【机器人】四足机器人+正运动设计+逆运动学解算+步态设计Matlab程序
  • 降AI工具年度盘点:2026上半年哪些工具值得续费? - 还在做实验的师兄
  • 2026年3月市场青睐的超高压反应釜厂商,速来了解,深海设备水压测试/等静压设备,超高压反应釜厂家口碑推荐 - 品牌推荐师
  • 【电力系统】PMSM电机定子绕组匝间短路故障、电机故障诊断+转子磁场损失Matlab代码
  • 知网AIGC检测不通过?别慌,这套方案帮我一次过关 - 还在做实验的师兄
  • GitHub上那些star过千的C++学习仓库与面试资源,我都整理好了!
  • 第二类斯特林数列
  • 供应链计划到底怎么做?三层计划、六个动作,一次讲清!
  • 免费降AI神器2026:新用户必看的省钱攻略 - 还在做实验的师兄
  • 信息类专业毕业设计中常见问题与难点总结
  • 蓝桥/16/B.4/水质检测
  • 多维衰老表型的蛋白质组图谱
  • 京东e卡回收,闲置秒变真金白银 - 京顺回收
  • Kriging代理模型+RSM响应面分析+NSGAII多目标优化+熵权法-TOPSIS决策MATLAB代码
  • 从0到1搭建企业数据中心:AI应用架构师的实战步骤
  • 论文AI率100%怎么降?过来人的三步降AI攻略(附实测截图) - 还在做实验的师兄
  • 龙虾机器人:让 AI 替你动手,效率直接拉满!
  • 2026最新降AI率工具测评:花了800块测完这些,帮你省踩坑的钱 - 还在做实验的师兄
  • 年薪128万!2026年转行AI大模型岗,是普通IT人最后的“阶级跃迁”机会
  • 多肽定制合成丨Peforelin CAS号:147859-97-0
  • AI率从92%降到5%:我的实操复盘和工具组合方案 - 还在做实验的师兄
  • 太空光伏电池的联合环境试验
  • 【Proteus仿真-开源】基于51单片机的智能温室大棚【详细流程介绍】 - 少年
  • DeepSeek降AI指令怎么写?附15条实测有效的Prompt模板 - 还在做实验的师兄
  • 2026降AI工具第一梯队:知网实测数据说话 - 还在做实验的师兄
  • 毕业论文AI率高于30%怎么办?学长答辩前三天的自救指南 - 还在做实验的师兄
  • 2026庭院灯市场口碑榜:哪些厂商值得你选择?6米庭院灯/9米市政路灯/中华灯景观灯,庭院灯实力厂家哪个好 - 品牌推荐师
  • 2026毕业季降AI工具怎么选?学姐的血泪推荐 - 还在做实验的师兄
  • 开源高性能文档提取利器Kreuzberg:支持75+格式、OCR及Docker部署
  • 降AI工具三步工作流:检测→处理→验证的标准化流程 - 还在做实验的师兄