我有一个非常大的文本文件(+ 10GB),我想阅读一些数据挖掘技术.为此,我使用MPI并行技术,因此许多进程可以一起访问同一个文件.
实际上,我希望每个进程读取N行数.由于文件没有结构化(相同数量的字段,但每个字段可以包含不同数量的字符),我有义务解析文件,这是不平行的,需要花费很多时间.有没有办法直接访问特定数量的行,并且需要解析和计算行数?谢谢你的帮助.
尝试使用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,任何帮助将不胜感激.
我正在写一个小型3服务器和1个客户端程序.2个服务器发送tcp消息,最后一个使用winsock2发送upd数据报.
我想知道我是否可以通过使用线程(OpenMP或boost :: threads)来模拟recvfrom(),以便2个线程同时从同一端口上的同一个套接字进行监听.
我在windows7上使用VC++ 2010.
谢谢您的帮助.
我有一个使用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) 我正在玩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 ×3
c++ ×3
mpi ×2
boost-mutex ×1
boost-thread ×1
file ×1
file-io ×1
fread ×1
master-slave ×1
winsock2 ×1