Give ior a more reasonable plugin system.

master
Christopher J. Morrone 2011-10-27 16:50:05 -07:00
parent 87d8bc19fb
commit ca832bb46e
15 changed files with 238 additions and 553 deletions

View File

@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.67])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT()
AC_CONFIG_AUX_DIR([config])
AC_CONFIG_SRCDIR([src/IOR.c])
AC_CONFIG_HEADERS([config.h])
@ -28,6 +28,54 @@ AC_TYPE_SIZE_T
AC_FUNC_MALLOC
AC_CHECK_FUNCS([getpagesize gettimeofday memset mkdir pow putenv realpath regcomp sqrt strcasecmp strchr strerror strncasecmp strstr uname])
# Check for system capabilities
AC_SYS_LARGEFILE
# POSIX IO support
AC_ARG_WITH([posix],
[AS_HELP_STRING([--with-posix],
[support IO with POSIX backend @<:@default=yes@:>@])],
[],
[with_posix=yes])
AM_CONDITIONAL([USE_POSIX_AIORI], [test x$with_posix = xyes])
AM_COND_IF([USE_POSIX_AIORI],[
AC_DEFINE([USE_POSIX_AIORI], [], [Build POSIX backend AIORI])
])
# MPIIO support
AC_ARG_WITH([mpiio],
[AS_HELP_STRING([--with-mpiio],
[support IO with MPI-IO backend @<:@default=yes@:>@])],
[],
[with_mpiio=yes])
AM_CONDITIONAL([USE_MPIIO_AIORI], [test x$with_mpiio = xyes])
AM_COND_IF([USE_MPIIO_AIORI],[
AC_DEFINE([USE_MPIIO_AIORI], [], [Build MPIIO backend AIORI])
])
# HDF5 support
AC_ARG_WITH([hdf5],
[AS_HELP_STRING([--with-hdf5],
[support IO with HDF5 backend @<:@default=no@:>@])],
[],
[with_hdf5=no])
AM_CONDITIONAL([USE_HDF5_AIORI], [test x$with_hdf5 = xyes])
AM_COND_IF([USE_HDF5_AIORI],[
AC_DEFINE([USE_HDF5_AIORI], [], [Build HDF5 backend AIORI])
])
# NCMPI (Parallel netcdf) support
AC_ARG_WITH([ncmpi],
[AS_HELP_STRING([--with-ncmpi],
[support IO with NCMPI backend @<:@default=no@:>@])],
[],
[with_ncmpi=no])
AM_CONDITIONAL([USE_NCMPI_AIORI], [test x$with_ncmpi = xyes])
AM_COND_IF([USE_NCMPI_AIORI],[
AC_DEFINE([USE_NCMPI_AIORI], [], [Build NCMPI backend AIORI])
])
AC_CONFIG_FILES([Makefile
src/Makefile
src/cbif/Makefile])

View File

@ -1,31 +0,0 @@
/******************************************************************************\
* *
* Copyright (c) 2003, The Regents of the University of California *
* See the file COPYRIGHT for a complete copyright notice and license. *
* *
********************************************************************************
*
* Abstract prototypes
*
\******************************************************************************/
#ifndef _IOR_AIORI_H
#define _IOR_AIORI_H
#include "IOR.h"
/**************************** P R O T O T Y P E S *****************************/
/* abstract IOR interfaces used in aiori-*.c */
void * (*IOR_Create) (char *, IOR_param_t *);
void * (*IOR_Open) (char *, IOR_param_t *);
IOR_offset_t (*IOR_Xfer) (int, void *, IOR_size_t *,
IOR_offset_t, IOR_param_t *);
void (*IOR_Close) (void *, IOR_param_t *);
void (*IOR_Delete) (char *, IOR_param_t *);
void (*IOR_SetVersion) (IOR_param_t *);
void (*IOR_Fsync) (void *, IOR_param_t *);
IOR_offset_t (*IOR_GetFileSize) (IOR_param_t *, MPI_Comm, char *);
#endif /* not _IOR_AIORI_H */

135
src/IOR.c
View File

@ -8,8 +8,6 @@
#include "aiori.h" /* IOR I/O interfaces */
#include "IOR.h" /* IOR definitions
and prototypes */
#include "IOR-aiori.h" /* IOR abstract
interfaces */
#include <ctype.h> /* tolower() */
#include <errno.h> /* sys_errlist */
#include <math.h>
@ -40,6 +38,37 @@ double wall_clock_delta = 0;
double wall_clock_deviation;
MPI_Comm testComm;
ior_aiori_t *backend;
#ifdef USE_POSIX_AIORI
extern ior_aiori_t posix_aiori;
#endif
#ifdef USE_MPIIO_AIORI
extern ior_aiori_t mpiio_aiori;
#endif
#ifdef USE_HDF5_AIORI
extern ior_aiori_t hdf5_aiori;
#endif
#ifdef USE_NCMPI_AIORI
extern ior_aiori_t ncmpi_aiori;
#endif
ior_aiori_t *available_aiori[] = {
#ifdef USE_POSIX_AIORI
&posix_aiori,
#endif
#ifdef USE_MPIIO_AIORI
&mpiio_aiori,
#endif
#ifdef USE_HDF5_AIORI
&hdf5_aiori,
#endif
#ifdef USE_NCMPI_AIORI
&ncmpi_aiori,
#endif
NULL
};
/********************************** M A I N ***********************************/
int
@ -109,51 +138,27 @@ main(int argc,
/******************************************************************************/
/*
* Bind abstract I/O function pointers to API-specific functions.
* Bind the global "backend" pointer to the requested backend AIORI's
* function table.
*/
void
AioriBind(char * api)
{
if (strcmp(api, "POSIX") == 0) {
IOR_Create = IOR_Create_POSIX;
IOR_Open = IOR_Open_POSIX;
IOR_Xfer = IOR_Xfer_POSIX;
IOR_Close = IOR_Close_POSIX;
IOR_Delete = IOR_Delete_POSIX;
IOR_SetVersion = IOR_SetVersion_POSIX;
IOR_Fsync = IOR_Fsync_POSIX;
IOR_GetFileSize = IOR_GetFileSize_POSIX;
} else if (strcmp(api, "MPIIO") == 0) {
IOR_Create = IOR_Create_MPIIO;
IOR_Open = IOR_Open_MPIIO;
IOR_Xfer = IOR_Xfer_MPIIO;
IOR_Close = IOR_Close_MPIIO;
IOR_Delete = IOR_Delete_MPIIO;
IOR_SetVersion = IOR_SetVersion_MPIIO;
IOR_Fsync = IOR_Fsync_MPIIO;
IOR_GetFileSize = IOR_GetFileSize_MPIIO;
} else if (strcmp(api, "HDF5") == 0) {
IOR_Create = IOR_Create_HDF5;
IOR_Open = IOR_Open_HDF5;
IOR_Xfer = IOR_Xfer_HDF5;
IOR_Close = IOR_Close_HDF5;
IOR_Delete = IOR_Delete_HDF5;
IOR_SetVersion = IOR_SetVersion_HDF5;
IOR_Fsync = IOR_Fsync_HDF5;
IOR_GetFileSize = IOR_GetFileSize_HDF5;
} else if (strcmp(api, "NCMPI") == 0) {
IOR_Create = IOR_Create_NCMPI;
IOR_Open = IOR_Open_NCMPI;
IOR_Xfer = IOR_Xfer_NCMPI;
IOR_Close = IOR_Close_NCMPI;
IOR_Delete = IOR_Delete_NCMPI;
IOR_SetVersion = IOR_SetVersion_NCMPI;
IOR_Fsync = IOR_Fsync_NCMPI;
IOR_GetFileSize = IOR_GetFileSize_NCMPI;
} else {
WARN("unrecognized IO API");
ior_aiori_t **tmp;
backend = NULL;
for (tmp = available_aiori; *tmp != NULL; tmp++) {
if (strcmp(api, (*tmp)->name) == 0) {
backend = *tmp;
break;
}
}
if (backend == NULL) {
ERR("unrecognized IO API");
}
} /* AioriBind() */
@ -1130,7 +1135,7 @@ ReadCheck(void *fd,
IOR_offset_t segmentSize, segmentNum;
memset(buffer, 'a', transfer);
*amtXferred = IOR_Xfer(access, fd, buffer, transfer, test);
*amtXferred = backend->xfer(access, fd, buffer, transfer, test);
tmpOffset = test->offset;
if (test->filePerProc == FALSE) {
/* offset changes for shared file, not for file-per-proc */
@ -1159,10 +1164,10 @@ ReadCheck(void *fd,
#endif /* USE_UNDOC_OPT - corruptFile */
MPI_CHECK(MPI_Barrier(testComm), "barrier error");
if (test->filePerProc) {
*amtXferred = IOR_Xfer(access, test->fd_fppReadCheck,
*amtXferred = backend->xfer(access, test->fd_fppReadCheck,
checkBuffer, transfer, test);
} else {
*amtXferred = IOR_Xfer(access, fd, checkBuffer, transfer, test);
*amtXferred = backend->xfer(access, fd, checkBuffer, transfer, test);
}
test->offset = tmpOffset;
if (*amtXferred != transfer)
@ -1312,7 +1317,7 @@ RemoveFile(char * testFileName,
}
if (access(testFileName, F_OK) == 0)
{
IOR_Delete(testFileName, test);
backend->delete(testFileName, test);
}
if (test->reorderTasksRandom == TRUE)
{
@ -1321,7 +1326,7 @@ RemoveFile(char * testFileName,
}
} else {
if ((rank == 0) && (access(testFileName, F_OK) == 0)) {
IOR_Delete(testFileName, test);
backend->delete(testFileName, test);
}
}
} /* RemoveFile() */
@ -1941,7 +1946,7 @@ TestIoSys(IOR_param_t *test)
MPI_CHECK(MPI_Barrier(testComm), "barrier error");
test->open = WRITE;
timer[0][rep] = GetTimeStamp();
fd = IOR_Create(testFileName, test);
fd = backend->create(testFileName, test);
timer[1][rep] = GetTimeStamp();
if (test->intraTestBarriers)
MPI_CHECK(MPI_Barrier(testComm), "barrier error");
@ -1955,7 +1960,7 @@ TestIoSys(IOR_param_t *test)
if (test->intraTestBarriers)
MPI_CHECK(MPI_Barrier(testComm), "barrier error");
timer[4][rep] = GetTimeStamp();
IOR_Close(fd, test);
backend->close(fd, test);
#if USE_UNDOC_OPT /* includeDeleteTime */
if (test->includeDeleteTime) {
@ -1981,7 +1986,7 @@ TestIoSys(IOR_param_t *test)
/* get the size of the file just written */
test->aggFileSizeFromStat[rep]
= IOR_GetFileSize(test, testComm, testFileName);
= backend->get_file_size(test, testComm, testFileName);
/* check if stat() of file doesn't equal expected file size,
use actual amount of byte moved */
@ -2027,9 +2032,9 @@ TestIoSys(IOR_param_t *test)
}
GetTestFileName(testFileName, test);
test->open = WRITECHECK;
fd = IOR_Open(testFileName, test);
fd = backend->open(testFileName, test);
dataMoved = WriteOrRead(test, fd, WRITECHECK);
IOR_Close(fd, test);
backend->close(fd, test);
rankOffset = 0;
}
/*
@ -2098,7 +2103,7 @@ TestIoSys(IOR_param_t *test)
MPI_CHECK(MPI_Barrier(testComm), "barrier error");
test->open = READ;
timer[6][rep] = GetTimeStamp();
fd = IOR_Open(testFileName, test);
fd = backend->open(testFileName, test);
if (rank == 0 && verbose >= VERBOSE_2) {
fprintf(stdout, "[RANK %03d] open for reading file %s XXCEL\n", rank,testFileName);
}
@ -2115,12 +2120,12 @@ TestIoSys(IOR_param_t *test)
if (test->intraTestBarriers)
MPI_CHECK(MPI_Barrier(testComm), "barrier error");
timer[10][rep] = GetTimeStamp();
IOR_Close(fd, test);
backend->close(fd, test);
timer[11][rep] = GetTimeStamp();
/* get the size of the file just read */
test->aggFileSizeFromStat[rep] = IOR_GetFileSize(test, testComm,
testFileName);
test->aggFileSizeFromStat[rep] = backend->get_file_size(
test, testComm, testFileName);
/* check if stat() of file doesn't equal expected file size,
use actual amount of byte moved */
@ -2153,7 +2158,7 @@ TestIoSys(IOR_param_t *test)
GetTestFileName(testFileName, test);
MPI_CHECK(MPI_Barrier(testComm), "barrier error");
test->open = READCHECK;
fd = IOR_Open(testFileName, test);
fd = backend->open(testFileName, test);
if (test->filePerProc) {
int tmpRankOffset;
tmpRankOffset = rankOffset;
@ -2165,17 +2170,17 @@ TestIoSys(IOR_param_t *test)
GetTestFileName(test->testFileName_fppReadCheck, test);
rankOffset = tmpRankOffset;
test->fd_fppReadCheck =
IOR_Open(test->testFileName_fppReadCheck, test);
backend->open(test->testFileName_fppReadCheck, test);
}
dataMoved = WriteOrRead(test, fd, READCHECK);
if (test->filePerProc) {
IOR_Close(test->fd_fppReadCheck, test);
backend->close(test->fd_fppReadCheck, test);
test->fd_fppReadCheck = NULL;
}
IOR_Close(fd, test);
backend->close(fd, test);
}
/*
* this final barrier may not be necessary as IOR_Close should
* this final barrier may not be necessary as backend->close should
* be a collective call -- but to make sure that the file has
* has not be removed by a task before another finishes writing,
* the MPI_Barrier() call has been included.
@ -2256,7 +2261,7 @@ ValidTests(IOR_param_t * test)
/* get the version of the tests */
AioriBind(test->api);
IOR_SetVersion(test);
backend->set_version(test);
if (test->repetitions <= 0)
WARN_RESET("too few test repetitions", repetitions);
@ -2545,14 +2550,14 @@ WriteOrRead(IOR_param_t * test,
}
transfer = test->transferSize;
if (access == WRITE) {
amtXferred = IOR_Xfer(access, fd, buffer, transfer, test);
amtXferred = backend->xfer(access, fd, buffer, transfer, test);
if (amtXferred != transfer) ERR("cannot write to file");
} else if (access == READ) {
amtXferred = IOR_Xfer(access, fd, buffer, transfer, test);
amtXferred = backend->xfer(access, fd, buffer, transfer, test);
if (amtXferred != transfer) ERR("cannot read from file");
} else if (access == WRITECHECK) {
memset(checkBuffer, 'a', transfer);
amtXferred = IOR_Xfer(access, fd, checkBuffer, transfer, test);
amtXferred = backend->xfer(access, fd, checkBuffer, transfer, test);
if (amtXferred != transfer)
ERR("cannot read from file write check");
transferCount++;
@ -2576,7 +2581,7 @@ WriteOrRead(IOR_param_t * test,
FreeBuffers(access, checkBuffer, readCheckBuffer, buffer, offsetArray);
if (access == WRITE && test->fsync == TRUE) {
IOR_Fsync(fd, test); /*fsync after all accesses*/
backend->fsync(fd, test); /*fsync after all accesses*/
}
return(dataMoved);
} /* WriteOrRead() */

View File

@ -8,10 +8,13 @@
#ifndef _IOR_H
#define _IOR_H
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "aiori.h" /* abstract IOR interfaces */
#include "iordef.h" /* IOR Definitions */
/*************************** D E F I N I T I O N S ****************************/
/* define the queuing structure for the test parameters */
@ -46,8 +49,6 @@ void GetPlatformName (char *);
void GetTestFileName (char *, IOR_param_t *);
double GetTimeStamp (void);
char * HumanReadable (IOR_offset_t, int);
IOR_offset_t IOR_GetFileSize_POSIX (IOR_param_t *, MPI_Comm, char *);
IOR_offset_t IOR_GetFileSize_MPIIO (IOR_param_t *, MPI_Comm, char *);
char * LowerCase (char *);
void OutputToRoot (int, MPI_Comm, char *);
void PPDouble (int, double, char *);

View File

@ -2,9 +2,21 @@ SUBDIRS = cbif
bin_PROGRAMS = ior
# N.B. "NCMPI" is an outdated name for pnetcdf (parallel netcdf)
ior_SOURCES = IOR.c utilities.c parse_options.c \
IOR.h aiori.h iordef.h defaults.h IOR-aiori.h \
aiori-POSIX.c aiori-noMPIIO.c aiori-noHDF5.c aiori-noNCMPI.c
ior_CFLAGS =
ior_SOURCES = IOR.c utilities.c parse_options.c
ior_SOURCES += IOR.h aiori.h iordef.h defaults.h
ior_LDADD = -lm
if USE_POSIX_AIORI
ior_SOURCES += aiori-POSIX.c
endif
if USE_MPIIO_AIORI
ior_SOURCES += aiori-MPIIO.c
endif
if USE_HDF5_AIORI
ior_SOURCES += aiori-HDF5.c
ior_LDADD += -lhdf5 -lz
endif
if USE_NCMPI_AIORI
ior_SOURCES += aiori-NCMPI.c
ior_LDADD += -lpnetcdf
endif

View File

@ -74,16 +74,36 @@ void SetHints (MPI_Info *, char *);
void SetupDataSet_HDF5(void *, IOR_param_t *);
void ShowHints (MPI_Info *);
void * IOR_Create_HDF5 (char *, IOR_param_t *);
void * IOR_Open_HDF5 (char *, IOR_param_t *);
IOR_offset_t IOR_Xfer_HDF5 (int, void *, IOR_size_t *,
IOR_offset_t, IOR_param_t *);
void IOR_Close_HDF5 (void *, IOR_param_t *);
void IOR_Delete_HDF5 (char *, IOR_param_t *);
void IOR_SetVersion_HDF5 (IOR_param_t *);
void IOR_Fsync_HDF5 (void *, IOR_param_t *);
IOR_offset_t IOR_GetFileSize_HDF5 (IOR_param_t *, MPI_Comm, char *);
/************************** D E C L A R A T I O N S ***************************/
ior_aiori_t hdf5_aiori = {
"HDF5",
IOR_Create_HDF5,
IOR_Open_HDF5,
IOR_Xfer_HDF5,
IOR_Close_HDF5,
IOR_Delete_HDF5,
IOR_SetVersion_HDF5,
IOR_Fsync_HDF5,
IOR_GetFileSize_HDF5
};
extern int errno, /* error number */
rank,
rankOffset,
verbose; /* verbose output */
extern MPI_Comm testComm;
static hid_t xferPropList; /* xfer property list */
hid_t dataSet; /* data set id */
hid_t dataSpace; /* data space id */

View File

@ -28,6 +28,16 @@ static IOR_offset_t SeekOffset_MPIIO (MPI_File, IOR_offset_t,
void SetHints (MPI_Info *, char *);
void ShowHints (MPI_Info *);
void * IOR_Create_MPIIO (char *, IOR_param_t *);
void * IOR_Open_MPIIO (char *, IOR_param_t *);
IOR_offset_t IOR_Xfer_MPIIO (int, void *, IOR_size_t *,
IOR_offset_t, IOR_param_t *);
void IOR_Close_MPIIO (void *, IOR_param_t *);
void IOR_Delete_MPIIO (char *, IOR_param_t *);
void IOR_SetVersion_MPIIO (IOR_param_t *);
void IOR_Fsync_MPIIO (void *, IOR_param_t *);
IOR_offset_t IOR_GetFileSize_MPIIO (IOR_param_t *, MPI_Comm, char *);
/************************** D E C L A R A T I O N S ***************************/
extern int errno;
@ -36,6 +46,18 @@ extern int rankOffset;
extern int verbose;
extern MPI_Comm testComm;
ior_aiori_t mpiio_aiori = {
"MPIIO",
IOR_Create_MPIIO,
IOR_Open_MPIIO,
IOR_Xfer_MPIIO,
IOR_Close_MPIIO,
IOR_Delete_MPIIO,
IOR_SetVersion_MPIIO,
IOR_Fsync_MPIIO,
IOR_GetFileSize_MPIIO
};
/***************************** F U N C T I O N S ******************************/
/******************************************************************************/

View File

@ -42,8 +42,30 @@ int GetFileMode(IOR_param_t *);
void SetHints (MPI_Info *, char *);
void ShowHints (MPI_Info *);
void * IOR_Create_NCMPI (char *, IOR_param_t *);
void * IOR_Open_NCMPI (char *, IOR_param_t *);
IOR_offset_t IOR_Xfer_NCMPI (int, void *, IOR_size_t *,
IOR_offset_t, IOR_param_t *);
void IOR_Close_NCMPI (void *, IOR_param_t *);
void IOR_Delete_NCMPI (char *, IOR_param_t *);
void IOR_SetVersion_NCMPI (IOR_param_t *);
void IOR_Fsync_NCMPI (void *, IOR_param_t *);
IOR_offset_t IOR_GetFileSize_NCMPI (IOR_param_t *, MPI_Comm, char *);
/************************** D E C L A R A T I O N S ***************************/
ior_aiori_t ncmpi_aiori = {
"NCMPI",
IOR_Create_NCMPI,
IOR_Open_NCMPI,
IOR_Xfer_NCMPI,
IOR_Close_NCMPI,
IOR_Delete_NCMPI,
IOR_SetVersion_NCMPI,
IOR_Fsync_NCMPI,
IOR_GetFileSize_NCMPI
};
extern int errno, /* error number */
numTasksWorld,
rank,

View File

@ -39,10 +39,30 @@
/**************************** P R O T O T Y P E S *****************************/
void * IOR_Create_POSIX (char *, IOR_param_t *);
void * IOR_Open_POSIX (char *, IOR_param_t *);
IOR_offset_t IOR_Xfer_POSIX (int, void *, IOR_size_t *,
IOR_offset_t, IOR_param_t *);
void IOR_Close_POSIX (void *, IOR_param_t *);
void IOR_Delete_POSIX (char *, IOR_param_t *);
void IOR_SetVersion_POSIX (IOR_param_t *);
void IOR_Fsync_POSIX (void *, IOR_param_t *);
IOR_offset_t IOR_GetFileSize_POSIX (IOR_param_t *, MPI_Comm, char *);
/************************** D E C L A R A T I O N S ***************************/
ior_aiori_t posix_aiori = {
"POSIX",
IOR_Create_POSIX,
IOR_Open_POSIX,
IOR_Xfer_POSIX,
IOR_Close_POSIX,
IOR_Delete_POSIX,
IOR_SetVersion_POSIX,
IOR_Fsync_POSIX,
IOR_GetFileSize_POSIX
};
extern int errno;
extern int rank;
extern int rankOffset;

View File

@ -1,81 +0,0 @@
/******************************************************************************\
* *
* Copyright (c) 2003, The Regents of the University of California *
* See the file COPYRIGHT for a complete copyright notice and license. *
* *
********************************************************************************
*
* CVS info:
* $RCSfile: aiori-noHDF5.c,v $
* $Revision: 1.2 $
* $Date: 2008/12/02 17:12:14 $
* $Author: rklundt $
*
* Purpose:
* Empty HDF5 functions for when compiling without HDF5 support.
*
\******************************************************************************/
#include "aiori.h"
void *
IOR_Create_HDF5(char * testFileName,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with HDF5 support");
return 0;
}
void *
IOR_Open_HDF5(char * testFileName,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with HDF5 support");
return 0;
}
IOR_offset_t
IOR_Xfer_HDF5(int access,
void * fd,
IOR_size_t * buffer,
IOR_offset_t length,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with HDF5 support");
return 0;
}
void
IOR_Fsync_HDF5(void * fd, IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with HDF5 support");
}
void
IOR_Close_HDF5(void * fd,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with HDF5 support");
}
void
IOR_Delete_HDF5(char * testFileName, IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with HDF5 support");
}
void
IOR_SetVersion_HDF5(IOR_param_t *test)
{
ERR("This copy of IOR was not compiled with HDF5 support");
}
IOR_offset_t
IOR_GetFileSize_HDF5(IOR_param_t * test,
MPI_Comm testComm,
char * testFileName)
{
ERR("This copy of IOR was not compiled with HDF5 support");
return 0;
}

View File

@ -1,81 +0,0 @@
/******************************************************************************\
* *
* Copyright (c) 2003, The Regents of the University of California *
* See the file COPYRIGHT for a complete copyright notice and license. *
* *
********************************************************************************
*
* CVS info:
* $RCSfile: aiori-noMPIIO.c,v $
* $Revision: 1.1.1.1 $
* $Date: 2007/10/15 23:36:54 $
* $Author: rklundt $
*
* Purpose:
* Empty MPIIO functions for when compiling without MPIIO support.
*
\******************************************************************************/
#include "aiori.h"
void *
IOR_Create_MPIIO(char * testFileName,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with MPIIO support");
return 0;
}
void *
IOR_Open_MPIIO(char * testFileName,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with MPIIO support");
return 0;
}
IOR_offset_t
IOR_Xfer_MPIIO(int access,
void * fd,
IOR_size_t * buffer,
IOR_offset_t length,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with MPIIO support");
return 0;
}
void
IOR_Fsync_MPIIO(void * fd, IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with MPIIO support");
}
void
IOR_Close_MPIIO(void * fd,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with MPIIO support");
}
void
IOR_Delete_MPIIO(char * testFileName, IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with MPIIO support");
}
void
IOR_SetVersion_MPIIO(IOR_param_t *test)
{
ERR("This copy of IOR was not compiled with MPIIO support");
}
IOR_offset_t
IOR_GetFileSize_MPIIO(IOR_param_t * test,
MPI_Comm testComm,
char * testFileName)
{
ERR("This copy of IOR was not compiled with MPIIO support");
return 0;
}

View File

@ -1,81 +0,0 @@
/******************************************************************************\
* *
* Copyright (c) 2003, The Regents of the University of California *
* See the file COPYRIGHT for a complete copyright notice and license. *
* *
********************************************************************************
*
* CVS info:
* $RCSfile: aiori-noNCMPI.c,v $
* $Revision: 1.2 $
* $Date: 2008/12/02 17:12:14 $
* $Author: rklundt $
*
* Purpose:
* Empty NCMPI functions for when compiling without NCMPI support.
*
\******************************************************************************/
#include "aiori.h"
void *
IOR_Create_NCMPI(char * testFileName,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with NCMPI support");
return 0;
}
void *
IOR_Open_NCMPI(char * testFileName,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with NCMPI support");
return 0;
}
IOR_offset_t
IOR_Xfer_NCMPI(int access,
void * fd,
IOR_size_t * buffer,
IOR_offset_t length,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with NCMPI support");
return 0;
}
void
IOR_Fsync_NCMPI(void * fd, IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with NCMPI support");
}
void
IOR_Close_NCMPI(void * fd,
IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with NCMPI support");
}
void
IOR_Delete_NCMPI(char * testFileName, IOR_param_t * param)
{
ERR("This copy of IOR was not compiled with NCMPI support");
}
void
IOR_SetVersion_NCMPI(IOR_param_t *test)
{
ERR("This copy of IOR was not compiled with NCMPI support");
}
IOR_offset_t
IOR_GetFileSize_NCMPI(IOR_param_t * test,
MPI_Comm testComm,
char * testFileName)
{
ERR("This copy of IOR was not compiled with NCMPI support");
return 0;
}

View File

@ -168,49 +168,17 @@ typedef struct
/**************************** P R O T O T Y P E S *****************************/
/* functions for aiori-*.c */
/* POSIX-specific functions */
void * IOR_Create_POSIX (char *, IOR_param_t *);
void * IOR_Open_POSIX (char *, IOR_param_t *);
IOR_offset_t IOR_Xfer_POSIX (int, void *, IOR_size_t *,
IOR_offset_t, IOR_param_t *);
void IOR_Close_POSIX (void *, IOR_param_t *);
void IOR_Delete_POSIX (char *, IOR_param_t *);
void IOR_SetVersion_POSIX (IOR_param_t *);
void IOR_Fsync_POSIX (void *, IOR_param_t *);
IOR_offset_t IOR_GetFileSize_POSIX (IOR_param_t *, MPI_Comm, char *);
/* MPIIO-specific functions */
void * IOR_Create_MPIIO (char *, IOR_param_t *);
void * IOR_Open_MPIIO (char *, IOR_param_t *);
IOR_offset_t IOR_Xfer_MPIIO (int, void *, IOR_size_t *,
IOR_offset_t, IOR_param_t *);
void IOR_Close_MPIIO (void *, IOR_param_t *);
void IOR_Delete_MPIIO (char *, IOR_param_t *);
void IOR_SetVersion_MPIIO (IOR_param_t *);
void IOR_Fsync_MPIIO (void *, IOR_param_t *);
IOR_offset_t IOR_GetFileSize_MPIIO (IOR_param_t *, MPI_Comm, char *);
/* HDF5-specific functions */
void * IOR_Create_HDF5 (char *, IOR_param_t *);
void * IOR_Open_HDF5 (char *, IOR_param_t *);
IOR_offset_t IOR_Xfer_HDF5 (int, void *, IOR_size_t *,
IOR_offset_t, IOR_param_t *);
void IOR_Close_HDF5 (void *, IOR_param_t *);
void IOR_Delete_HDF5 (char *, IOR_param_t *);
void IOR_SetVersion_HDF5 (IOR_param_t *);
void IOR_Fsync_HDF5 (void *, IOR_param_t *);
IOR_offset_t IOR_GetFileSize_HDF5 (IOR_param_t *, MPI_Comm, char *);
/* NCMPI-specific functions */
void * IOR_Create_NCMPI (char *, IOR_param_t *);
void * IOR_Open_NCMPI (char *, IOR_param_t *);
IOR_offset_t IOR_Xfer_NCMPI (int, void *, IOR_size_t *,
IOR_offset_t, IOR_param_t *);
void IOR_Close_NCMPI (void *, IOR_param_t *);
void IOR_Delete_NCMPI (char *, IOR_param_t *);
void IOR_SetVersion_NCMPI (IOR_param_t *);
void IOR_Fsync_NCMPI (void *, IOR_param_t *);
IOR_offset_t IOR_GetFileSize_NCMPI (IOR_param_t *, MPI_Comm, char *);
typedef struct ior_aiori {
char *name;
void *(*create)(char *, IOR_param_t *);
void *(*open)(char *, IOR_param_t *);
IOR_offset_t (*xfer)(int, void *, IOR_size_t *,
IOR_offset_t, IOR_param_t *);
void (*close)(void *, IOR_param_t *);
void (*delete)(char *, IOR_param_t *);
void (*set_version)(IOR_param_t *);
void (*fsync)(void *, IOR_param_t *);
IOR_offset_t (*get_file_size)(IOR_param_t *, MPI_Comm, char *);
} ior_aiori_t;
#endif /* not _AIORI_H */

View File

@ -1,69 +0,0 @@
#/*****************************************************************************\
#* *
#* Copyright (c) 2003, The Regents of the University of California *
#* See the file COPYRIGHT for a complete copyright notice and license. *
#* *
#*******************************************************************************
#*
#* CVS info:
#* $RCSfile: Makefile,v $
#* $Revision: 1.1.1.1 $
#* $Date: 2007/10/15 23:36:54 $
#* $Author: rklundt $
#*
#* Purpose:
#* Make IOR executable.
#*
#* gmake posix -- IOR with only POSIX interfaces
#* gmake mpiio -- IOR with only POSIX and MPIIO interfaces
#* gmake hdf5 -- IOR with POSIX, MPIIO, and HDF5 interfaces
#* gmake ncmpi -- IOR with POSIX, MPIIO, and NCMPI interfaces
#* gmake all -- IOR with POSIX, MPIIO, HDF5, and NCMPI interfaces
#* gmake clean -- remove executable and object files
#*
#\*****************************************************************************/
include Makefile.config
# Requires GNU Make
OS=$(shell uname)
SRCS = IOR.c utilities.c parse_options.c
OBJS = $(SRCS:.c=.o)
posix: $(OBJS) aiori-POSIX.o aiori-noMPIIO.o aiori-noHDF5.o aiori-noNCMPI.o
$(CC) -o IOR $(OBJS) \
aiori-POSIX.o aiori-noMPIIO.o aiori-noHDF5.o aiori-noNCMPI.o \
$(LDFLAGS)
mpiio: $(OBJS) aiori-POSIX.o aiori-MPIIO.o aiori-noHDF5.o aiori-noNCMPI.o
$(CC) -o IOR $(OBJS) \
aiori-POSIX.o aiori-MPIIO.o aiori-noHDF5.o aiori-noNCMPI.o \
$(LDFLAGS)
hdf5: $(OBJS) aiori-POSIX.o aiori-MPIIO.o aiori-HDF5.o aiori-noNCMPI.o
$(CC) $(LDFLAGS_HDF5) -o IOR $(OBJS) \
aiori-POSIX.o aiori-MPIIO.o aiori-HDF5.o aiori-noNCMPI.o
ncmpi: $(OBJS) aiori-POSIX.o aiori-MPIIO.o aiori-noHDF5.o aiori-NCMPI.o
$(CC) $(LDFLAGS_NCMPI) -o IOR $(OBJS) \
aiori-POSIX.o aiori-MPIIO.o aiori-noHDF5.o aiori-NCMPI.o
all: $(OBJS) aiori-POSIX.o aiori-MPIIO.o aiori-HDF5.o aiori-NCMPI.o
$(CC) $(LDFLAGS_HDF5) $(LDFLAGS_NCMPI) -o IOR $(OBJS) \
aiori-POSIX.o aiori-MPIIO.o aiori-HDF5.o aiori-NCMPI.o
clean:
-rm -f *.o IOR
aiori-MPIIO.o: aiori-MPIIO.c
$(CC) -c aiori-MPIIO.c
aiori-HDF5.o: aiori-HDF5.c
$(CC) $(CCFLAGS_HDF5) -c aiori-HDF5.c
aiori-NCMPI.o: aiori-NCMPI.c
$(CC) $(CCFLAGS_NCMPI) -c aiori-NCMPI.c
.c.o:
$(CC) $(CCFLAGS) -c $<

View File

@ -1,90 +0,0 @@
#/*****************************************************************************\
#* *
#* Copyright (c) 2003, The Regents of the University of California *
#* See the file COPYRIGHT for a complete copyright notice and license. *
#* *
#*******************************************************************************
#*
#* CVS info:
#* $RCSfile: Makefile.config,v $
#* $Revision: 1.3 $
#* $Date: 2008/12/02 17:12:14 $
#* $Author: rklundt $
#*
#* Purpose:
#* Maintain compilation settings for various platforms.
#*
#\*****************************************************************************/
################
# AIX SETTINGS #
################
CC.AIX = mpcc -q64
CCFLAGS.AIX = -g -D_LARGE_FILES
# -qwarn64 -qinfo=all -D_NO_MPI_TIMER
LDFLAGS.AIX = #-bmaxdata:0x80000000
HDF5_DIR.AIX = /usr/local/tools/hdf5/hdf5-1.6.5/parallel
#NCMPI_DIR.AIX = /usr/local/netcdf/parallel-netcdf-0.9.4_64bit
NCMPI_DIR.AIX = /g/g0/$(shell whoami)/LIBS/INSTALLS/parallel-netcdf-1.0.2pre2/aix_5_64_fed
###################
# IRIX64 SETTINGS #
###################
CC.IRIX64 = /usr/local/mpich-1.2.2/irix-n32/bin/mpicc
CCFLAGS.IRIX64 = -g
# -D_NO_MPI_TIMER
LDFLAGS.IRIX64 =
HDF5_DIR.IRIX64 = /usr/local/tools/hdf5/hdf5-1.6.0/parallel
NCMPI_DIR.IRIX64 =
##################
# LINUX SETTINGS #
##################
CC.Linux = mpicc
CCFLAGS.Linux = -g -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 #-D_MANUALLY_SET_LUSTRE_STRIPING -Wall -pedantic -D_NO_MPI_TIMER
#LDFLAGS.Linux = -L/usr/lib/mpi/mpi_gnu/lib -lmpio
#LDFLAGS.Linux = -L/usr/lib/mpi/mpi_intel/lib -lmpio
LDFLAGS.Linux =
#HDF5_DIR.Linux = /usr/local/tools/hdf5/hdf5-1.6.5/parallel
#NCMPI_DIR.Linux = /g/g0/$(shell whoami)/LIBS/INSTALLS/parallel-netcdf-1.0.2pre2/chaos_3_x86_elan3
##################
# SunOS SETTINGS #
##################
CC.SunOS = mpicc
CCFLAGS.SunOS = -g -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
LDFLAGS.SunOS = -Llib -lmpich
HDF5_DIR.SunOS =
NCMPI_DIR.SunOS =
################
# BGL SETTINGS #
################
CC.BGL = mpgcc
CCFLAGS.BGL = -g -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
LDFLAGS.BGL =
HDF5_DIR.BGL =
NCMPI_DIR.BGL =
#########################
# OSF1 (TRU64) SETTINGS #
#########################
CC.OSF1 = /usr/local/new_mpi/bin/mpicc
CCFLAGS.OSF1 = -g -ieee
LDFLAGS.OSF1 =
HDF5_DIR.OSF1 = /usr/local/hdf5/hdf5-1.4.5/mpich-1.2.4shm/prod/bit64/shared
NCMPI_DIR.OSF1 =
################################################################################
CC = $(CC.$(OS))
CCFLAGS = $(CCFLAGS.$(OS))
LDFLAGS = $(LDFLAGS.$(OS)) -lm
CCFLAGS_HDF5 = $(CCFLAGS.$(OS)) -I$(HDF5_DIR.$(OS))/include
LDFLAGS_HDF5 = $(LDFLAGS.$(OS)) -L$(HDF5_DIR.$(OS))/lib -lhdf5 -lm -lz
CCFLAGS_NCMPI = $(CCFLAGS.$(OS)) -I$(NCMPI_DIR.$(OS))/include
LDFLAGS_NCMPI = $(LDFLAGS.$(OS)) -L$(NCMPI_DIR.$(OS))/lib -lpnetcdf -lm