<html>
<head>
<style>
P
{
margin:0px;
padding:0px
}
body
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body>OK, I have changed to all the new non-deprecated libraries, except for time.h, I don't have &lt;time&gt;. Everything compiles fine, and still have the same problem. I&nbsp;cout the buf just before the Write operation and buf contains the correct record "11111111111111111111", it is still failing on the write, even with just one process.<BR>
&nbsp;<BR>
Here is the revised code, I am now just referencing the files directly in the code. <BR>
&nbsp;<BR>
PS - I know it is not a permission thing, I gave full permission to out.dat.<BR>
&nbsp;<BR>
#include "RecordRetrieval.h"<BR>#include "mpi.h"<BR>#include &lt;time.h&gt;<BR>#include &lt;iostream&gt;<BR>
using namespace std;<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>
&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>
&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; buf = (char *) malloc(20); <BR>
&nbsp;&nbsp;&nbsp; input_file = MPI::File::Open(MPI::COMM_WORLD, "test.dat", 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, "out.dat", MPI::MODE_CREATE | MPI::MODE_WRONLY, MPI::INFO_NULL);<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <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, MPI_BYTE, input_file_status);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "Loop: " &lt;&lt; i &lt;&lt; "Buffer; " &lt;&lt; buf;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output_file.Write_shared(buf, 20, MPI_BYTE, output_file_status);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp; free(buf); <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; <BR>&nbsp;&nbsp;&nbsp; MPI::Finalize();<BR>}<BR><BR>
&nbsp;<BR>
<BR>&nbsp;<BR>Regards,<BR>Erich&nbsp;<BR><BR><BR><BR><BR><BR>
<BLOCKQUOTE>
<HR id=EC_stopSpelling>
From: samm@sammiller.org<BR>Subject: Re: [MPICH] Help With I/O<BR>Date: Wed, 18 Apr 2007 18:03:40 -0500<BR>To: erichpeterson@hotmail.com<BR><BR><BR>
<DIV>
<DIV>On Apr 18, 2007, at 5:45 PM, Erich Peterson wrote:</DIV><BR class=EC_Apple-interchange-newline>
<BLOCKQUOTE><SPAN class=EC_Apple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate"><SPAN class=EC_Apple-style-span style="FONT-SIZE: 13px; FONT-FAMILY: Tahoma">UPDATE: I tried to use gdb a little bit, running only one process, and it is throwing the exception on the first&nbsp;Write_shared call. But, I still don't know what the underlying problem is. I've re-arranged the code like we have discussed below:</SPAN><BR style="FONT-SIZE: 13px; FONT-FAMILY: Tahoma"><SPAN class=EC_Apple-style-span style="FONT-SIZE: 13px; FONT-FAMILY: Tahoma">&nbsp;</SPAN><BR style="FONT-SIZE: 13px; FONT-FAMILY: Tahoma"><SPAN class=EC_Apple-style-span style="FONT-SIZE: 13px; FONT-FAMILY: Tahoma">#include "RecordRetrieval.h"</SPAN><BR style="FONT-SIZE: 13px; FONT-FAMILY: Tahoma"><SPAN class=EC_Apple-style-span style="FONT-SIZE: 13px; FONT-FAMILY: Tahoma">#include "mpi.h"</SPAN><BR style="FONT-SIZE: 13px; FONT-FAMILY: Tahoma"><SPAN class=EC_Apple-style-span style="FONT-SIZE: 13px; FONT-FAMILY: Tahoma">#include "time.h"</SPAN><BR style="FONT-SIZE: 13px; FONT-FAMILY: Tahoma"><SPAN class=EC_Apple-style-span style="FONT-SIZE: 13px; FONT-FAMILY: Tahoma">#include "iostream.h"</SPAN></SPAN></BLOCKQUOTE></DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV>Erich, 
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV>I believe Matthew previously mentioned this in his first reply, and I noticed you have not changed it yet.&nbsp; I&nbsp;suggest you use the correct header names and namespace scoping:</DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV>#include &lt;iostream&gt; rather than #include "iostream.h"</DIV>
<DIV>#include &lt;ctime&gt; rather than #include "time.h"</DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV>While it won't make your problem disappear, it's good practice to follow.&nbsp; Your compiler should warn you about using the incorrect header names, like so:</DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV>furlong:~ samm$ cat badheader.cc </DIV>
<DIV>#include &lt;iostream.h&gt;</DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV>int main() {</DIV>
<DIV>&nbsp; &nbsp; cout &lt;&lt; "hello world" &lt;&lt; endl;</DIV>
<DIV>}</DIV>
<DIV>furlong:~ samm$ g++ badheader.cc&nbsp;&nbsp; </DIV>
<DIV>In file included from /usr/include/c++/4.0.0/backward/iostream.h:31,</DIV>
<DIV>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; from badheader.cc:1:</DIV>
<DIV>/usr/include/c++/4.0.0/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the &lt;X&gt; header for the &lt;X.h&gt; header for C++ includes, or &lt;iostream&gt; instead of the deprecated header &lt;iostream.h&gt;. To disable this warning use -Wno-deprecated.</DIV>
<DIV>furlong:~ samm$ ./a.out </DIV>
<DIV>hello world</DIV>
<DIV>furlong:~ samm$ cat goodheader.cc </DIV>
<DIV>#include &lt;iostream&gt;</DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV>using std::cout;</DIV>
<DIV>using std::endl;</DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV>int main() {</DIV>
<DIV>&nbsp; &nbsp; cout &lt;&lt; "hello world" &lt;&lt; endl;</DIV>
<DIV>}</DIV>
<DIV>furlong:~ samm$ g++ goodheader.cc </DIV>
<DIV>furlong:~ samm$ ./a.out </DIV>
<DIV>hello world</DIV>
<DIV>furlong:~ samm$</DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV>This was on a mac w/ gcc 4.0.1 but you should see similar results on a Linux box or cluster.</DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV>Cheers,<BR>
<DIV><SPAN class=EC_Apple-style-span style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate">
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV>Sam Miller</DIV>
<DIV><A href="http://www.sammiller.org/" target=_blank>http://www.sammiller.org</A></DIV>
<DIV>"Generally speaking, people provide better maintenance for their cars&nbsp;than for their own bodies." - Scott Adams</DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV>
<DIV><BR class=EC_khtml-block-placeholder></DIV><BR class=EC_Apple-interchange-newline></SPAN></DIV><BR></DIV></BLOCKQUOTE><br /><hr />Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy! <a href='http://spaces.live.com/spacesapi.aspx?wx_action=create&wx_url=/friends.aspx&mkt=en-us' target='_new'>Try it!</a></body>
</html>