Changeset 177 for trunk/ADOL-C


Ignore:
Timestamp:
Oct 12, 2010 7:11:11 AM (9 years ago)
Author:
kulshres
Message:

Allow for changing the directory where tapes are written.

one can change the definition of TAPE_DIR in dvlparms.h before compiling
or on runtime by writing in .adolcrc file
"TAPE_DIR" "/path/to/dir" (unix)
"TAPE_DIR" "C:\path\to\dir" (windwos)

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

Location:
trunk/ADOL-C/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ADOL-C/src/dvlparms.h

    r109 r177  
    2121/*--------------------------------------------------------------------------*/
    2222/* Directory where tapes are created */
    23 #define ADOLC_TAPE_DIR        "."
     23#define TAPE_DIR              "."
    2424/* File names for the tapes */
    2525#define ADOLC_TAYLORS_NAME    "ADOLC-Taylors_"
  • trunk/ADOL-C/src/tape_handling.cpp

    r144 r177  
    610610
    611611    ADOLC_OPENMP_RESTORE_THREAD_NUMBER;
     612    clearTapeBaseNames();
    612613}
    613614
  • trunk/ADOL-C/src/taping.c

    r109 r177  
    2020#include <adolc/oplate.h>
    2121#include "taping_p.h"
     22
     23#include <sys/types.h>
     24#include <sys/stat.h>
     25
     26#if defined(_WINDOWS) && !__STDC__
     27#define stat _stat
     28#define S_IFDIR _S_IFDIR
     29#define S_IFMT _S_IFMT
     30#endif
     31
     32#ifndef S_ISDIR
     33#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
     34#endif
    2235
    2336/*--------------------------------------------------------------------------*/
     
    300313
    301314/* the base names of every tape type */
    302 const char *tapeBaseNames[] = {
    303             ADOLC_TAPE_DIR PATHSEPARATOR ADOLC_LOCATIONS_NAME,
    304             ADOLC_TAPE_DIR PATHSEPARATOR ADOLC_VALUES_NAME,
    305             ADOLC_TAPE_DIR PATHSEPARATOR ADOLC_OPERATIONS_NAME,
    306             ADOLC_TAPE_DIR PATHSEPARATOR ADOLC_TAYLORS_NAME
    307         };
     315char *tapeBaseNames[4];
     316
     317void clearTapeBaseNames() {
     318    int i;
     319    for(i=0;i<4;i++)
     320        free(tapeBaseNames[i]);
     321}
    308322
    309323/****************************************************************************/
     
    394408    char *pos1 = NULL, *pos2 = NULL, *pos3 = NULL, *pos4 = NULL, *end = NULL;
    395409    long int number = 0;
     410    char *path = NULL;
     411    int defdirsize = strlen(TAPE_DIR PATHSEPARATOR);
     412    tapeBaseNames[0] = strdup(
     413        TAPE_DIR PATHSEPARATOR ADOLC_LOCATIONS_NAME);
     414    tapeBaseNames[1] = strdup(
     415        TAPE_DIR PATHSEPARATOR ADOLC_VALUES_NAME);
     416    tapeBaseNames[2] = strdup(
     417        TAPE_DIR PATHSEPARATOR ADOLC_OPERATIONS_NAME);
     418    tapeBaseNames[3] = strdup(
     419        TAPE_DIR PATHSEPARATOR ADOLC_TAYLORS_NAME);
     420
    396421    ADOLC_OPENMP_THREAD_NUMBER;
    397422    ADOLC_OPENMP_GET_THREAD_NUMBER;
     
    431456                number = strtol(pos3 + 1, &end, 10);
    432457                if (end == (pos3 + 1)) {
    433                     fprintf(DIAG_OUT, "ADOL-C warning: Unable to parse number in "
    434                             ".adolcrc!\n");
     458                    *pos2 = 0;
     459                    *pos4 = 0;
     460                    if (strcmp(pos1 + 1, "TAPE_DIR") == 0) {
     461                        struct stat st;
     462                        int err;
     463                        path = pos3 + 1;
     464                        err = stat(path,&st);
     465                        if (err == 0 && S_ISDIR(st.st_mode)) {
     466                            int pathlen, pathseplen, namelen[4];
     467                            int i;
     468                            pathlen=strlen(path);
     469                            pathseplen=strlen(PATHSEPARATOR);
     470                            for(i = 0; i < 4; i++)
     471                                namelen[i] = strlen(tapeBaseNames[i]);
     472                            clearTapeBaseNames();
     473                            for(i = 0; i < 4; i++) {
     474                                char *currpos;
     475                                int fnamelen;
     476                                tapeBaseNames[i] = (char*)calloc(namelen[i] - defdirsize + pathlen + pathseplen + 1, sizeof(char));
     477                                currpos = tapeBaseNames[i];
     478                                strncpy(currpos,path,pathlen);
     479                                currpos += pathlen;
     480                                strncpy(currpos,PATHSEPARATOR,pathseplen);
     481                                currpos += pathseplen;
     482                                switch (i) {
     483                                case 0:
     484                                    fnamelen = strlen(ADOLC_LOCATIONS_NAME);
     485                                    strncpy(currpos,ADOLC_LOCATIONS_NAME,fnamelen);
     486                                    break;
     487                                case 1:
     488                                    fnamelen = strlen(ADOLC_VALUES_NAME);
     489                                    strncpy(currpos,ADOLC_VALUES_NAME,fnamelen);
     490                                    break;
     491                                case 2:
     492                                    fnamelen = strlen(ADOLC_OPERATIONS_NAME);
     493                                    strncpy(currpos,ADOLC_OPERATIONS_NAME,fnamelen);
     494                                    break;
     495                                case 3:
     496                                    fnamelen = strlen(ADOLC_TAYLORS_NAME);
     497                                    strncpy(currpos,ADOLC_TAYLORS_NAME,fnamelen);
     498                                    break;
     499                                }
     500                                currpos += fnamelen;
     501                                *currpos = '\0';
     502                            }
     503                            fprintf(DIAG_OUT, "ADOL-C info: using TAPE_DIR %s for all disk bound tapes\n",path);
     504                        } else
     505                            fprintf(DIAG_OUT, "ADOL-C warning: TAPE_DIR %s in .adolcrc is not an existing directory,\n will continue using %s for writing tapes\n", path, TAPE_DIR);
     506                    }
     507                    else
     508                        fprintf(DIAG_OUT, "ADOL-C warning: Unable to parse number in "
     509                                ".adolcrc!\n");
    435510                } else {
    436511                    *pos2 = 0;
  • trunk/ADOL-C/src/taping_p.h

    r144 r177  
    613613void readConfigFile();
    614614
     615/* clear the tapeBaseNames that were alocated above in readConfigFile() */
     616void clearTapeBaseNames();
     617
    615618/****************************************************************************/
    616619/* This function sets the flag "newTape" if either a taylor buffer has been */
Note: See TracChangeset for help on using the changeset viewer.