c++ - 尝试对缓存进行跨步测试,但程序没有结束
问题描述
我正在尝试对缓存进行跨步测试,但我的代码中有一个错误导致程序永远不会结束。我不得不自己终止我的文件。这应该是代码中的一个简单错误,但我真的找不到它在哪里。任何帮助将不胜感激。这是代码:
#include <iostream>
using namespace std;
#include <fstream>
#include<time.h>
#include<stdlib.h>
typedef unsigned char byte;
int main(int argc, char **argv)
{
if(argc!=3)
{
cout<<"Usage is: "<<argv[0]<< " [stride] [steps]"<<endl;
return 0;
}
int stride = atoi(argv[1]);
int steps = atoi(argv[2]);
int totalSize = stride * steps;
// print some info about the system
cout<<"size of int: "<<sizeof(int)<<endl;
cout<<"stride: "<<stride<<endl;
cout<<"total size: "<<totalSize<<endl;
byte *dataArray = new byte[totalSize];
// init array data
//for(int i=0;i<totalSize;i++)
// dataArray[i] = 1;
// traverse array and measure time
struct timespec start, stop;
//save start time
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
long result = 0;
for(int i=0; i<totalSize;i + stride)
{
result += dataArray[i];
}
for(int i=0;i<totalSize;i+=stride)
result += dataArray[i];
//save end time
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &stop);
ofstream myfile;
// myfile.open("data.csv");
// calc elapsed time
double cpuTime = (stop.tv_sec - start.tv_sec) * 1e6 + (stop.tv_nsec - start.tv_nsec) / 1e3; // in micros
// myfile << "%d",cpuTime;
// myfile.close();
// report results
cout<<"Calculation: "<<result<<endl;
cout<<"CPU time micro: "<<cpuTime<<endl;
return 0;
}
解决方案
for(int i=0; i<totalSize;i + stride)
你永远不会增加i
.
推荐阅读
- node.js - 超过 1 条记录的 Lambda SQS 队列消费者错误处理?
- c++ - 无法将参数从“LPITEMIDLIST *”转换为“LPITEMIDLIST *”
- c# - 试图将我的 void 方法写为字符串数组方法
- php - 登录实时服务器时出现 CSS 和导航栏问题
- sed - 使用 sed,如何将字符串附加到包含模式且尚未附加字符串的行?
- r - 带有 ggplot2 的 geom_bar 中的名称
- reactjs - 如何使用 react react-router v4 在 axios 拦截器中进行 history.push 定位?
- java - Hibernate/SQL Server:无法创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
- jquery - jQuery 查找没有指定祖先的元素
- java - Spring Boot 开发人员工具自动重启在 IntelliJ 中不起作用