任务说明:有36篇文档,现在要读入,并统计词频,字典长度25,希望能够比较串并行读写操作的时间差距。

  1. 串行读入并统计词频
    // LoadDocsInUbuntu.cpp//#include <iostream>#include <stdio.h>#include <vector>using namespace std;int main(){char filename[100];size_t d;FILE *fileptr;int word;vector< vector<int> > corpus;printf("load data ...\n");for (d = 1; d < 37; d++){sprintf(filename, "..//data/doc_%d.txt", d);fileptr = fopen(filename, "r");vector<int> doc;int ff[25] = { 0 };while (fscanf(fileptr, "%d", &word) != EOF){ff[word - 1] = ff[word - 1] + 1;doc.push_back(word);}corpus.push_back(doc);fclose(fileptr);sprintf(filename, "..//result/freqUbuntuSerial_%d.txt", d);fileptr = fopen(filename, "w");for (int f = 0; f < 25; f++){    fprintf(fileptr, "%d ", ff[f]);}fclose(fileptr);}cout <<"corpus.size()="<< corpus.size() << endl;return 0;}
    

  2. 这里讨论并行有三种思路:一,按照文档序号进行分组读入统计等操作;二,在文档内按单词数目分组进行统计;三,将统计与读写操作并行处理。

    针对第一种思路,使用openmp做多线程处理:

    

// LoadDocsByOpenMP.cpp
//
#include <omp.h>
#include <iostream>
#include <stdio.h>
#include <vector>
#include <stdlib.h>
#include <time.h>
#include <string>
using namespace std;int main()
{char filename[100],resultname[100];int d;FILE *fileptr[360];int word;int ff[360][25] = { 0 };//vector< vector<int> > corpus;clock_t start,finish;int f[360]={0};start=clock();printf("load data ...\n");
#pragma omp parallel for num_threads(4)for (d = 1; d < 361; d++){printf("Hello world, I am %d, docs index %d.\n",omp_get_thread_num(),d);sprintf(filename, "..//data/doc_%d.txt", d);fileptr[d-1] = fopen(filename, "r");//int ff[25]={0};vector<int> doc;while (fscanf(fileptr[d-1], "%d", &word) != EOF){ff[d-1][word - 1] = ff[d-1][word - 1] + 1;//ff[word-1]=ff[word-1]+1;//    //doc.push_back(word);}corpus.push_back(doc);fclose(fileptr[d-1]);sprintf(resultname, "..//result/freqByOpenMP_%d.txt", d);//Be CAREFUL!For the name "filename" has been used before, we must name the string differently here.fileptr[d-1] = fopen(resultname, "w");for (f[d-1] = 0; f[d-1] < 25; f[d-1]++){fprintf(fileptr[d-1], "%d ", ff[f[d-1]]);}fclose(fileptr[d-1]);}//cout <<"corpus.size()="<< corpus.size() << endl;finish=clock();cout<<"time cost : "<< (double)(finish-start)/ CLOCKS_PER_SEC<<endl;return 0;
}

但初步比较openmp对串行读取的速度并没有太多提升,反而是当进程数多于系统物理核数的时候,程序时间会加长。

另外两种实现思路在后续学习中继续实现。

转载于:https://www.cnblogs.com/simayuhe/p/7208393.html

C++ 对TXT 的串并行读写相关推荐

  1. c语言按行存储数据库,C语言实现按行读写文件

    本文实例为大家分享了C语言按行读写文件的具体代码,供大家参考,具体内容如下 #define _CRT_SECURE_NO_WARNINGS #include #include #include voi ...

  2. Java读取UTF-8格式txt文件第一行出现乱码及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法(转载)...

    原文地址:http://blog.csdn.net/jackpk/article/details/5702964/ Java读取UTF-8的txt文件第一行出现乱码"?"及解决 t ...

  3. matlab 职坐标,C/C++知识点之Matlab 与 c++对txt 文档的读写格式

    本文主要向大家介绍了 C/C++知识点之Matlab 与 c++对txt 文档的读写格式,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助. 学习g++能够读取什么格式的txt文件. ...

  4. iOS 9应用开发教程之多行读写文本ios9文本视图

    iOS 9应用开发教程之多行读写文本ios9文本视图 多行读写文本--ios9文本视图 文本视图也是输入控件,与文本框不同的是,文本视图可以让用户输入多行,如图2.23所示.在此图中字符串" ...

  5. .Net Framework 4.0 中利用Task实现并行处理、串并行混合处理

    我们常常会遇到需要利用并行处理,尽量发挥多核或多CPU的潜能,提高程序运行效率的场景.在.NET环境下,常用的做法是使用Thread,多线程方式进行并行处理.但在.Net4.0中,微软提供一种新的概念 ...

  6. python 文件写入多个参数_pandas 把数据写入txt文件每行固定写入一定数量的值方法...

    我遇到的情况是:把数据按一定的时间段提出.比如提出每天6:00-8:00的每个数据,可以这样做: # -*-coding: utf-8 -*- import pandas as pd import d ...

  7. VS配合VSS时,编译报错:未能向文件“....csproj.FileListAbsolute.txt”写入命令行,对路径的访问被拒绝。...

    最近帮别人调试的时候,出现这个问题.环境:VS2008+VSS2005,多人配合完成一个项目. 在编译的时候报错:未能向文件"....csproj.FileListAbsolute.txt& ...

  8. python提取txt数据到excel_python 读取txt中每行数据,并且保存到excel中的实例

    使用xlwt读取txt文件内容,并且写入到excel中,代码如下,已经加了注释. 代码简单,具体代码如下: # coding=utf-8 ''' main function:主要实现把txt中的每行数 ...

  9. python如何输入多行数据合并_python 实现将txt文件多行合并为一行并将中间的空格去掉方法...

    有一个txt文本如下: 151 151 1234561 156421 214156 1523132 031320 现希望将两行合并为一行,并将中间所有的空格都去掉: (python编程第十章) 代码如 ...

最新文章

  1. JavaScript实现使用 BACKTRACKING 方法查找集合的幂集算法
  2. C语言试题二十五之编写一个函数float function(double h),函数的功能使对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值位正数)。
  3. PJSIP学习笔记——从simple_pjsua.c示例程序了解PJSUA-LIB的基本使用流程
  4. numpy 生成任意shape的随机整数
  5. 想考华为HCIA,但不知道选择什么方向,点进来~
  6. 富文本编辑器NicEdit的使用
  7. 使用智遥工作流,优化SAP请购流程
  8. download.php是什么文件,qmdownload是什么文件?
  9. 第九届中国云计算大会讲师团探秘 ——数位院士领衔、近20个国家的学者共聚、多个行业领头人及专家参与, 共话云计算大数据生态、应用...
  10. petalinux-build 报错解决
  11. 2014年实习生招聘之多益网络实习生招聘笔试题—2014/04/17
  12. Python中用Matplotlib做多个纵轴(多y轴)
  13. POJ1655 树重心模板题
  14. CSS3 变形:平移、旋转与缩放
  15. 欧拉角表示以及万向节死锁
  16. 我思故我在-记录我的困惑
  17. 导览系统定制开发_景区公园导览互动查询触摸屏一体机系统软件开发定制
  18. OpenGL点精灵(Point Sprite)
  19. HDOJ 1598 find the most comfortable road(并查集+贪心)
  20. (万能通用模板)--- SpringBoot导入、导出Excel文件

热门文章

  1. mysql flush 使用
  2. 服务都启用的情况下XP远程桌面还是出现“此计算机无法连接到远程计算机”...
  3. 在featureDataset和workspace下創建featureclass
  4. Hamilton Verissimo的blog
  5. 编码互换变量c语言,【剑仙教程】TC。字符 和字符编码 互换。
  6. 【Python-ML】神经网络-多层感知器增加梯度检验
  7. 【正一专栏】儿时的夏天——似水流年
  8. 机器学习知识点(三十)LDA话题模型Java实现
  9. Hadoop系列七:Hadoop之sqoop篇
  10. 使用Rainbow tables和Ophcrack的组合工具破解Windows密码