On Mon, Mar 12, 2007 at 12:37:55PM +0100, Julian Martin Kunkel wrote:
> I found another unexpected behavior :(
Over on the IRC channel Julian found yet another unexpected behavior.
We were not casting values correctly and would end up with large
negative offsets instead of (say) 6.5 GB.
The attached patch will fix that problem. Looks like it's time to
update the MPICH2 patches for PVFS page.
==rob
--
Rob Latham
Mathematics and Computer Science Division A215 0178 EA2D B059 8CDF
Argonne National Lab, IL USA B29D F333 664A 4280 315B
? adio/ad_pvfs2/.swp
? adio/ad_pvfs2/ad_pvfs2_write-tiling-fix.c
? adio/ad_pvfs2/ad_pvfs2_write_debugging.c
Index: adio/ad_pvfs2/ad_pvfs2_read.c
===================================================================
RCS file: /home/MPI/cvsMaster/romio/adio/ad_pvfs2/ad_pvfs2_read.c,v
retrieving revision 1.27
diff -u -p -r1.27 ad_pvfs2_read.c
--- adio/ad_pvfs2/ad_pvfs2_read.c 9 Mar 2007 23:31:42 -0000 1.27
+++ adio/ad_pvfs2/ad_pvfs2_read.c 14 Mar 2007 19:58:03 -0000
@@ -387,7 +387,8 @@ void ADIOI_PVFS2_ReadStrided(ADIO_File f
}
for (k=0; k<MAX_ARRAY_SIZE; k++) {
if (i || k) {
- file_offsets[k] = disp + n_filetypes*filetype_extent
+ file_offsets[k] = disp +
+ (ADIO_Offset) n_filetypes*filetype_extent
+ flat_file->indices[j];
file_lengths[k] = flat_file->blocklens[j];
mem_lengths += file_lengths[k];
@@ -459,7 +460,8 @@ void ADIOI_PVFS2_ReadStrided(ADIO_File f
}
for (k=0; k<extra_blks; k++) {
if(i || k) {
- file_offsets[k] = disp + n_filetypes*filetype_extent +
+ file_offsets[k] = disp +
+ (ADIO_Offset) n_filetypes*filetype_extent +
flat_file->indices[j];
if (k == (extra_blks - 1)) {
file_lengths[k] = bufsize - (int32_t) mem_lengths
@@ -852,8 +854,8 @@ void ADIOI_PVFS2_ReadStrided(ADIO_File f
k = (k + 1)%flat_buf->count;
} /* for (i=0; i<mem_list_count; i++) */
for (i=0; i<file_list_count; i++) {
- file_offsets[i] = disp + flat_file->indices[j] + n_filetypes *
- filetype_extent;
+ file_offsets[i] = disp + flat_file->indices[j] +
+ (ADIO_Offset) n_filetypes*filetype_extent;
if (!i) {
file_lengths[0] = frd_size;
file_offsets[0] += flat_file->blocklens[j] - frd_size;
Index: adio/ad_pvfs2/ad_pvfs2_write.c
===================================================================
RCS file: /home/MPI/cvsMaster/romio/adio/ad_pvfs2/ad_pvfs2_write.c,v
retrieving revision 1.29
diff -u -p -r1.29 ad_pvfs2_write.c
--- adio/ad_pvfs2/ad_pvfs2_write.c 9 Mar 2007 23:31:43 -0000 1.29
+++ adio/ad_pvfs2/ad_pvfs2_write.c 14 Mar 2007 19:58:03 -0000
@@ -330,7 +330,7 @@ void ADIOI_PVFS2_WriteStrided(ADIO_File
n_filetypes++;
for (i=0; i<flat_file->count; i++) {
if (disp + flat_file->indices[i] +
- (ADIO_Offset) n_filetypes*filetype_extent +
+ (ADIO_Offset) (n_filetypes)*filetype_extent +
flat_file->blocklens[i] >= offset) {
st_index = i;
fwr_size = disp + flat_file->indices[i] +
@@ -434,7 +434,8 @@ void ADIOI_PVFS2_WriteStrided(ADIO_File
}
for (k=0; k<MAX_ARRAY_SIZE; k++) {
if (i || k) {
- file_offsets[k] = disp + n_filetypes*filetype_extent
+ file_offsets[k] = disp +
+ (ADIO_Offset) n_filetypes*filetype_extent
+ flat_file->indices[j];
file_lengths[k] = flat_file->blocklens[j];
mem_lengths += file_lengths[k];
@@ -507,7 +508,8 @@ void ADIOI_PVFS2_WriteStrided(ADIO_File
}
for (k=0; k<extra_blks; k++) {
if(i || k) {
- file_offsets[k] = disp + n_filetypes*filetype_extent +
+ file_offsets[k] = disp +
+ (ADIO_Offset) n_filetypes*filetype_extent +
flat_file->indices[j];
if (k == (extra_blks - 1)) {
file_lengths[k] = bufsize - (int32_t) mem_lengths
@@ -908,8 +910,8 @@ void ADIOI_PVFS2_WriteStrided(ADIO_File
k = (k + 1)%flat_buf->count;
} /* for (i=0; i<mem_list_count; i++) */
for (i=0; i<file_list_count; i++) {
- file_offsets[i] = disp + flat_file->indices[j] + n_filetypes *
- filetype_extent;
+ file_offsets[i] = disp + flat_file->indices[j] +
+ (ADIO_Offset) n_filetypes*filetype_extent;
if (!i) {
file_lengths[0] = fwr_size;
file_offsets[0] += flat_file->blocklens[j] - fwr_size;
_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers