绝望了,INTEL编程大赛第一题。

yyc520 yyc520 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
为什么读取整个文件的开销要比读取整个文件且求出最大值的开销还要大呢?

我用的测试文件大小为1GB;内存1GB,CPU双核3.39G,硬盘STAT2接口160G

两个原代码如下:

// Float2.cpp
#include <stdio.h>
#include <time.h>

//#define _MY_DBG_

#ifdef _MY_DBG_
#define print(x) printf x;
#else
#define print(x) ;
#endif

#define DATA_PRE_COUNT (1024*4+3)


int main(int argc, char * argv[])
{
FILE * fp = NULL;
register float fMaxT;
register float fMin=0.0;
register float fMax=0.0;
float buf[DATA_PRE_COUNT];
int offset=0;
int baseOffset=0;

fp = fopen(argv[1], "rb");

clock_t c_start = clock();

int readlen = fread(buf, sizeof(float), DATA_PRE_COUNT, fp);
while (!feof(fp))
{
for (int i=0;i<DATA_PRE_COUNT-3;i++)
{
fMaxT = buf[i]*buf[i+1]*buf[i+2]*buf[i+3];
if (fMaxT>fMax)
{
fMax = fMaxT;
offset = baseOffset+i;
fMin=fMax/1e12f;
print(("[%9d] (%8.2f,%8.2f,%8.2f,%8.2f) <%8.2f>\n",
offset, buf[i],buf[i+1],buf[i+2],buf[i+3],fMax/1e12f));
}
}
baseOffset += DATA_PRE_COUNT-3;
buf[0] = buf[DATA_PRE_COUNT-3];
buf[1] = buf[DATA_PRE_COUNT-2];
buf[2] = buf[DATA_PRE_COUNT-1];
readlen = fread(buf+3, sizeof(float), DATA_PRE_COUNT-3, fp);
if (readlen != (DATA_PRE_COUNT-3))
{
int cnt = readlen-3;
if (cnt < 0)
{
break;
}
for (int j=0;j<cnt;j++)
{
fMaxT = buf[j]*buf[j+1]*buf[j+2]*buf[j+3];
if (fMaxT>fMax)
{
fMax = fMaxT;
offset = baseOffset+j;
fMin=fMax/1e12f;
print(("[%9d] (%8.2f,%8.2f,%8.2f,%8.2f) <%8.2f>\n",
offset, buf[j],buf[j+1],buf[j+2],buf[j+3],fMax/1e12f));
}
}
break;
}
}
clock_t c_end = clock();

printf("乘积=%f 首数的序号=%d\n", fMax, offset);
printf("clocks is %d\n", c_end-c_start);
return 0;
}


// Float3.cpp
#include <stdio.h>
#include <time.h>

//#define _MY_DBG_

#ifdef _MY_DBG_
#define print(x) printf x;
#else
#define print(x) ;
#endif

#define DATA_PRE_COUNT (1024*4+3)


int main(int argc, char * argv[])
{
FILE * fp = NULL;
register float fMaxT;
register float fMin=0.0;
register float fMax=0.0;
float buf[DATA_PRE_COUNT];
int offset=0;
int baseOffset=0;

fp = fopen(argv[1], "rb");

clock_t c_start = clock();

int readlen = fread(buf, sizeof(float), DATA_PRE_COUNT, fp);
while (!feof(fp))
{
/* for (int i=0;i<DATA_PRE_COUNT-3;i++)
{
fMaxT = buf[i]*buf[i+1]*buf[i+2]*buf[i+3];
if (fMaxT>fMax)
{
fMax = fMaxT;
offset = baseOffset+i;
fMin=fMax/1e12f;
print(("[%9d] (%8.2f,%8.2f,%8.2f,%8.2f) <%8.2f>\n",
offset, buf[i],buf[i+1],buf[i+2],buf[i+3],fMax/1e12f));
}
}
baseOffset += DATA_PRE_COUNT-3;
buf[0] = buf[DATA_PRE_COUNT-3];
buf[1] = buf[DATA_PRE_COUNT-2];
buf[2] = buf[DATA_PRE_COUNT-1];
*/
readlen = fread(buf+3, sizeof(float), DATA_PRE_COUNT-3, fp);
/* if (readlen != (DATA_PRE_COUNT-3))
{
int cnt = readlen-3;
if (cnt < 0)
{
break;
}
for (int j=0;j<cnt;j++)
{
fMaxT = buf[j]*buf[j+1]*buf[j+2]*buf[j+3];
if (fMaxT>fMax)
{
fMax = fMaxT;
offset = baseOffset+j;
fMin=fMax/1e12f;
print(("[%9d] (%8.2f,%8.2f,%8.2f,%8.2f) <%8.2f>\n",
offset, buf[j],buf[j+1],buf[j+2],buf[j+3],fMax/1e12f));
}
}
break;
}
*/
}
clock_t c_end = clock();

printf("乘积=%f 首数的序号=%d\n", fMax, offset);
printf("clocks is %d\n", c_end-c_start);
return 0;
}

Float2 data1.dat
乘积=9861133242466304.000000 首数的序号=110335127
clocks is 25812

Float3 data1.dat
乘积=0.000000 首数的序号=0
clocks is 26687

Float2 data1.dat
乘积=9861133242466304.000000 首数的序号=110335127
clocks is 26828

Float3 data1.dat
乘积=0.000000 首数的序号=0
clocks is 27140
...全文

相关推荐

科技服务机构如何通过数据分析增强服务专业性?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

全国大学生电子设计大赛项目合集全国电赛优秀作品全国大学生电子设计竞赛,简易风洞及控制系统(主控板+供电驱动)工程文件分享

全国大学生电子设计大赛项目合集全国电赛优秀作品全国大学生电子设计竞赛,简易风洞及控制系统(主控板+供电驱动)工程文件分享

zz_ll9023

国央企如何准确把握行业发展趋势,优化创新资源配置,提升核心竞争力?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

利用MATLAB和NASA GMAT实现自动近地轨道传播、地面站可见性和电池EPS分析.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

海神之光

科技服务机构如何借助大数据提升服务客户的精准度?.docx

科技服务机构如何借助大数据提升服务客户的精准度?

BIZKEEN
评论 4
收藏 已收藏
分享
返回顶部