我的并行程序是使用c ++和OpenMPI实现的。 当我测试它时,我发现如果我使用更多cpus它会花费更多时间。 怎么会发生这种情况? 我的代码结构如下: 开始 结束 我很困惑。 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
在以下情况下,以“ w”模式打开时,fopen和fclose是否花费比“ a”模式更多的时间1.文件已经存在2.在以下日志文件的行中没有文件存在内容logFile = fopen(log,“ a”) ; 和logFile = fopen(log,“ w”);
我有以下代码,我对其进行了快速的跟踪分析,以获取每个系统调用的时钟周期,而在测试开始时没有文件。
int main(int argc, char **argv)
{
const char* log = "log.txt";
FILE* logFile = NULL;
char timeBuf[100];
time_t now;
struct tm *logtime1;
time(&now);
logtime1 = localtime(&now);
strftime(timeBuf,sizeof(timeBuf),"[%Y-%m-%d %H:%M:%S]",logtime1);
int i;
char *inMessage = "The Quick Brown Fox Jumps Over The Lazy Dog";
for(i=0;i<50000;i++)
{
logFile = fopen(log,"a"); //or **logFile = fopen(log,"w");**
if(logFile != NULL)
{
fflush( 0 );
int error = 0;
fprintf(logFile, "%s\t%s %d at (%s:%d)\n",timeBuf,
inMessage, error,__FILE__, __LINE__);
fclose(logFile);
}
}
return 0;
}
当我以“ w”模式打开文件时,strace分析表明在打开系统调用中它花费了更多时间。 这背后有原因吗?
以下是两个配置文件
---------- 在“ w”模式下对代码进行跟踪
strace -c ./test.out -o报告
%时间秒usecs /呼叫错误syscal
76.17 0.522555 10 50006打开
12.13 0.083197 2 50006关闭
4.61 0.031626 1 50000写
3.96 0.027151 1 50002 munmap
1.57 0.010737 0 50017毫安
1.55 0.010663 0 50007 fstat
100.00 0.686068 300060共1
---------- strace -c ./test.out -o报告
%时间秒usecs / call调用错误syscall
22.08 0.020467 0 50002 munmap
20.24 0.018763 0 50000写
16.76 0.015542 0 100007 fstat
13.43 0.012450 0 50006打开
9.90 0.009177 0 50006关闭
9.44 0.008756 0 50017毫安
8.15 0.007558 0 50001 lseek
100.00 0.092713 400060 1总计
如果使用mode =“ w”,则在写入之前将文件清空,因此系统必须:
使用mode =“ a”,系统仅具有:
显然,mode =“ w”做更多的工作将花费更多的时间...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.