小编ezz*_*rem的帖子

如何在非常大的文本文件上直接有效地访问?

我有一个非常大的文本文件(+ 10GB),我想阅读一些数据挖掘技术.为此,我使用MPI并行技术,因此许多进程可以一起访问同一个文件.
实际上,我希望每个进程读取N行数.由于文件没有结构化(相同数量的字段,但每个字段可以包含不同数量的字符),我有义务解析文件,这是不平行的,需要花费很多时间.有没有办法直接访问特定数量的行,并且需要解析和计算行数?谢谢你的帮助.

c c++ file-io mpi

20
推荐指数
2
解决办法
1327
查看次数

为什么ftell()在fread()之后显示错误的位置?

尝试使用c fread()调用从简单的文本文件中读取时,我收到一个非常奇怪的错误.
我做了一个非常简单的程序来显示错误:

int main(int argc ,char ** argv) {
  FILE* fh = fopen("adult.txt","r");
  if(fh==NULL){
    printf("error opening file\n");
    exit(0);
  }

  int s = 1000;
  printf("cur before=%d\n",ftell(fh));
  char* b = malloc (sizeof(char)*s);
  int k =fread(b,sizeof(char),s,fh);
  printf("cur after reading %d bytes =%d\n",k,ftell(fh));

  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我得到的是输出:

cur before=0
cur after reading 1000 bytes =1007
Run Code Online (Sandbox Code Playgroud)

这是正常的吗?fread返回数字'1000',但光标(用ftell())显示1007,任何帮助将不胜感激.

c file fread

5
推荐指数
2
解决办法
1120
查看次数

winsock2线程安全吗?

我正在写一个小型3服务器和1个客户端程序.2个服务器发送tcp消息,最后一个使用winsock2发送upd数据报.

我想知道我是否可以通过使用线程(OpenMP或boost :: threads)来模拟recvfrom(),以便2个线程同时从同一端口上的同一个套接字进行监听.

我在windows7上使用VC++ 2010.

谢谢您的帮助.

c++ multithreading winsock2

5
推荐指数
1
解决办法
6282
查看次数

将主/从模型与MPI同步

我有一个使用MPI同步主/从进程的问题.我希望主控制从属执行的顺序.Eeach奴隶必须做:1-读2过程.这是我的代码:

int main(int argc, char* argv []){

int rank,numprocess;

MPI_Init( &argc, &argv );
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &numprocess );


if(rank==0){ //master

    MPI_Status s;int Sstate=1;int Rstate;

    int p;
    for(p=1;p<numprocess;p++){

        fflush(stdout);printf("master : order P%d to start reading\n",p);
        MPI_Send(&Sstate, sizeof(int), MPI_INT, p, 20, MPI_COMM_WORLD);

        MPI_Recv(&Rstate,sizeof(int),MPI_INT,p,21,MPI_COMM_WORLD,&s);
        fflush(stdout);printf("master : P%d finished reading\n",p);
    }

}
else{ //workers

    int state; MPI_Status s;
    MPI_Recv(&state,sizeof(int),MPI_INT,0,20,MPI_COMM_WORLD,&s);

    //read here
    Sleep(1000);

    //send to master : finish reading
    state=2;
    MPI_Send(&state, sizeof(int), MPI_INT, 0, 21, MPI_COMM_WORLD);

    //processing
    Sleep(3000);
    fflush(stdout);printf("worker %d ended processing\n",rank); …
Run Code Online (Sandbox Code Playgroud)

c synchronization mpi master-slave

4
推荐指数
1
解决办法
4111
查看次数

多线程程序生产者/消费者[boost]

我正在玩boost库和C++.我想创建一个包含生产者,conumer和堆栈的多线程程序.procuder填充堆栈,消费者从堆栈中删除items(int).一切正常(pop,push,mutex)但是当我把pop/push winthin称为线程时,我没有任何效果

我做了这个简单的代码:

#include "stdafx.h"
#include <stack>
#include <iostream>
#include <algorithm>
#include <boost/shared_ptr.hpp>
#include <boost/thread.hpp>
#include <boost/date_time.hpp> 
#include <boost/signals2/mutex.hpp>
#include <ctime>

using namespace std;

/ *
* this class reprents a stack which is proteced by mutex
* Pop and push are executed by one thread each time.
*/
class ProtectedStack{
private : 
stack<int> m_Stack;
boost::signals2::mutex m;

public : 
ProtectedStack(){
}
ProtectedStack(const ProtectedStack & p){

}
void push(int x){
    m.lock();
    m_Stack.push(x);
    m.unlock();
}

void pop(){
    m.lock();
    //return m_Stack.top();
    if(!m_Stack.empty())
        m_Stack.pop(); …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading boost-thread boost-mutex

0
推荐指数
1
解决办法
2279
查看次数