00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "mpioimpl.h"
00010
00011 #ifdef HAVE_WEAK_SYMBOLS
00012
00013 #if defined(HAVE_PRAGMA_WEAK)
00014 #pragma weak MPI_File_read_all_begin = PMPI_File_read_all_begin
00015 #elif defined(HAVE_PRAGMA_HP_SEC_DEF)
00016 #pragma _HP_SECONDARY_DEF PMPI_File_read_all_begin MPI_File_read_all_begin
00017 #elif defined(HAVE_PRAGMA_CRI_DUP)
00018 #pragma _CRI duplicate MPI_File_read_all_begin as PMPI_File_read_all_begin
00019
00020 #endif
00021
00022
00023 #define MPIO_BUILD_PROFILING
00024 #include "mpioprof.h"
00025 #endif
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 int MPI_File_read_all_begin(MPI_File fh, void *buf, int count,
00041 MPI_Datatype datatype)
00042 {
00043 int error_code, datatype_size;
00044 #ifndef PRINT_ERR_MSG
00045 static char myname[] = "MPI_FILE_READ_ALL_BEGIN";
00046 #endif
00047 MPI_Status status;
00048
00049 #ifdef PRINT_ERR_MSG
00050 if ((fh <= (MPI_File) 0) || (fh->cookie != ADIOI_FILE_COOKIE)) {
00051 FPRINTF(stderr, "MPI_File_read_all_begin: Invalid file handle\n");
00052 MPI_Abort(MPI_COMM_WORLD, 1);
00053 }
00054 #else
00055 ADIOI_TEST_FILE_HANDLE(fh, myname);
00056 #endif
00057
00058 if (count < 0) {
00059 #ifdef PRINT_ERR_MSG
00060 FPRINTF(stderr, "MPI_File_read_all_begin: Invalid count argument\n");
00061 MPI_Abort(MPI_COMM_WORLD, 1);
00062 #else
00063 error_code = MPIR_Err_setmsg(MPI_ERR_ARG, MPIR_ERR_COUNT_ARG,
00064 myname, (char *) 0, (char *) 0);
00065 return ADIOI_Error(fh, error_code, myname);
00066 #endif
00067 }
00068
00069 if (datatype == MPI_DATATYPE_NULL) {
00070 #ifdef PRINT_ERR_MSG
00071 FPRINTF(stderr, "MPI_File_read_all_begin: Invalid datatype\n");
00072 MPI_Abort(MPI_COMM_WORLD, 1);
00073 #else
00074 error_code = MPIR_Err_setmsg(MPI_ERR_TYPE, MPIR_ERR_TYPE_NULL,
00075 myname, (char *) 0, (char *) 0);
00076 return ADIOI_Error(fh, error_code, myname);
00077 #endif
00078 }
00079
00080 if (fh->access_mode & MPI_MODE_SEQUENTIAL) {
00081 #ifdef PRINT_ERR_MSG
00082 FPRINTF(stderr, "MPI_File_read_all_begin: Can't use this function because file was opened with MPI_MODE_SEQUENTIAL\n");
00083 MPI_Abort(MPI_COMM_WORLD, 1);
00084 #else
00085 error_code = MPIR_Err_setmsg(MPI_ERR_UNSUPPORTED_OPERATION,
00086 MPIR_ERR_AMODE_SEQ, myname, (char *) 0, (char *) 0);
00087 return ADIOI_Error(fh, error_code, myname);
00088 #endif
00089 }
00090
00091 if (fh->split_coll_count) {
00092 #ifdef PRINT_ERR_MSG
00093 FPRINTF(stderr, "MPI_File_read_all_begin: Only one active split collective I/O operation allowed per file handle\n");
00094 MPI_Abort(MPI_COMM_WORLD, 1);
00095 #else
00096 error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ERR_MULTIPLE_SPLIT_COLL,
00097 myname, (char *) 0, (char *) 0);
00098 return ADIOI_Error(fh, error_code, myname);
00099 #endif
00100 }
00101
00102 fh->split_coll_count = 1;
00103
00104 MPI_Type_size(datatype, &datatype_size);
00105 if ((count*datatype_size) % fh->etype_size != 0) {
00106 #ifdef PRINT_ERR_MSG
00107 FPRINTF(stderr, "MPI_File_read_all_begin: Only an integral number of etypes can be accessed\n");
00108 MPI_Abort(MPI_COMM_WORLD, 1);
00109 #else
00110 error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ERR_ETYPE_FRACTIONAL,
00111 myname, (char *) 0, (char *) 0);
00112 return ADIOI_Error(fh, error_code, myname);
00113 #endif
00114 }
00115
00116 ADIO_ReadStridedColl(fh, buf, count, datatype, ADIO_INDIVIDUAL,
00117 0, &status, &error_code);
00118 return error_code;
00119 }