<html>
<head>
<style>
P
{
margin:0px;
padding:0px
}
body
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body>Hi all, I'm trying to write this little routine which is part of my graduate project. What I'm trying to do is pass a vector of bools in to the QueryData method. In that method I split the vector up into equal parts among the number of processes, have each process open a datafile which as 20 byte records (no new lines), read that record from the file if the&nbsp;vector they are checking has "true" (basically if vector[0] = true, it means grab the first record of the file), and lastly, it should output that record into a new file.<BR>&nbsp;<BR>I have been able to determine it is messing up on the for-loop. The error is:<BR>
&nbsp;<BR>
[Student@cluster1 erich_test_area]$ mpiexec -n 3 /mnt/pvfs2/acxiom/erich_test_area/RecordRetrieval<BR>terminate called after throwing an instance of 'MPI::Exception'<BR>terminate called after throwing an instance of 'MPI::Exception'<BR>terminate called after throwing an instance of 'MPI::Exception'<BR>rank 0 in job 1&nbsp; cluster1_33602&nbsp;&nbsp; caused collective abort of all ranks<BR>&nbsp; exit status of rank 0: killed by signal 6&nbsp;<BR><BR>If someone could please tell me or edit the code if they see what is wrong. Thanks!<BR>&nbsp;<BR>Main.cpp:<BR>
<BR>#include "RecordRetrieval.h"<BR>#include &lt;vector.h&gt;<BR>
int main()<BR>{<BR>&nbsp;&nbsp; vector&lt;bool&gt; vec;<BR>
&nbsp;&nbsp; vec.push_back(true);<BR>&nbsp;&nbsp; vec.push_back(false);<BR>&nbsp;&nbsp; vec.push_back(true);<BR>&nbsp;&nbsp; vec.push_back(false);<BR>&nbsp;&nbsp; vec.push_back(true);<BR>&nbsp;&nbsp; vec.push_back(false);<BR>
&nbsp;&nbsp; RecordRetrieval rec;<BR>
&nbsp;&nbsp; rec.QueryData(vec, "test.dat");<BR>
&nbsp;&nbsp; return 0;<BR>}<BR><BR>
RecordRetrieval.cpp:<BR>
&nbsp;<BR>
#include "RecordRetrieval.h"<BR>#include "mpi.h"<BR>#include "time.h"<BR>#include "iostream.h"<BR>
void RecordRetrieval::QueryData(vector&lt;bool&gt; unencoded_vector, char * filename)<BR>{<BR>&nbsp;&nbsp;&nbsp; int num_processes;<BR>&nbsp;&nbsp;&nbsp; int num_vector_elements;<BR>&nbsp;&nbsp;&nbsp; float num_elements_per_rank;<BR>&nbsp;&nbsp;&nbsp; int local_start_position;<BR>&nbsp;&nbsp;&nbsp; int local_end_position;<BR>&nbsp;&nbsp;&nbsp; char * buf;<BR>&nbsp;&nbsp;&nbsp; int my_rank;<BR>
&nbsp;&nbsp;&nbsp; MPI::File input_file;<BR>&nbsp;&nbsp;&nbsp; MPI::Status input_file_status;<BR>
&nbsp;&nbsp;&nbsp; MPI::File output_file;<BR>&nbsp;&nbsp;&nbsp; MPI::Status output_file_status;<BR>&nbsp;&nbsp;&nbsp; //MPI::Offset filesize;<BR>
&nbsp;&nbsp;&nbsp; char output_filename[30];<BR>&nbsp;&nbsp;&nbsp; size_t i;<BR>&nbsp;&nbsp;&nbsp; struct tm tim;<BR>&nbsp;&nbsp;&nbsp; time_t now;<BR>&nbsp;&nbsp;&nbsp; now = time(NULL);<BR>&nbsp;&nbsp;&nbsp; tim = *(localtime(&amp;now));<BR>&nbsp;&nbsp;&nbsp; i = strftime(output_filename, 30, "%m_%d_%Y_%H_%M_%S", &amp;tim);<BR>
<BR>&nbsp;&nbsp;&nbsp; /* Let the system do what it needs to start up MPI */<BR>&nbsp;&nbsp;&nbsp; MPI::Init();<BR>
&nbsp;&nbsp;&nbsp; /* Get my process rank */<BR>&nbsp;&nbsp;&nbsp; my_rank = MPI::COMM_WORLD.Get_rank();<BR>
&nbsp;&nbsp;&nbsp; /* Find out how many processes are being used */<BR>&nbsp;&nbsp;&nbsp; num_processes = MPI::COMM_WORLD.Get_size();<BR>
&nbsp;&nbsp;&nbsp; num_vector_elements = unencoded_vector.size();<BR><BR>
&nbsp;&nbsp;&nbsp;&nbsp;num_elements_per_rank = num_vector_elements / num_processes;<BR>
&nbsp;&nbsp;&nbsp; local_start_position = my_rank * (int)num_elements_per_rank;<BR>
&nbsp;&nbsp;&nbsp; if(my_rank == num_processes - 1)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(num_elements_per_rank * num_processes == (int)num_elements_per_rank * num_processes)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local_end_position = local_start_position + ((int)num_elements_per_rank - 1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local_end_position = (local_start_position + (int)num_elements_per_rank - 1) +<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (((int)num_elements_per_rank * num_processes) - ((int)num_elements_per_rank * num_processes));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local_end_position = local_start_position + ((int)num_elements_per_rank - 1);<BR>&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp; input_file = MPI::File::Open(MPI::COMM_WORLD, filename, MPI::MODE_RDONLY,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MPI::INFO_NULL);<BR>
&nbsp;&nbsp;&nbsp; output_file = MPI::File::Open(MPI::COMM_WORLD, output_filename, MPI::MODE_CREATE | MPI::MODE_WRONLY, MPI::INFO_NULL);<BR>
&nbsp;&nbsp;&nbsp; // filesize = input_file.Get_size();<BR>
&nbsp;&nbsp;&nbsp; for(int i = local_start_position; i &lt; local_end_position + 1; i++)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(unencoded_vector[i])<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input_file.Read_at(i * 20, buf, 20, <FONT face="">MPI_CHAR</FONT>, input_file_status);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output_file.Write_shared(buf, 20, <FONT face="">MPI_CHAR</FONT>, output_file_status);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "Error";<BR>&nbsp;&nbsp;&nbsp; input_file.Close();<BR>&nbsp;&nbsp;&nbsp; output_file.Close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; MPI::Finalize();<BR>}<BR><BR><br /><hr />Discover the new Windows Vista <a href='http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE' target='_new'>Learn more!</a></body>
</html>