Changeset 887

Show
Ignore:
Timestamp:
03/07/08 20:27:18
Author:
robert
Message:

Added nesting of secondary split level task directories, task and log files

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/applications/osgdem/osgdem.cpp

    r832 r887  
    225225            if (bo && !(bo->getLogFileName().empty())) 
    226226            { 
    227                 dataset->setBuildLog(new vpb::BuildLog); 
     227                dataset->setBuildLog(new vpb::BuildLog(bo->getLogFileName())); 
    228228            } 
    229229 
  • trunk/applications/vpbmaster/vpbmaster.cpp

    r833 r887  
    8686    { 
    8787        std::string sourceFileName = taskManager->getBuildName() + std::string("_master.source"); 
     88        taskManager->setSourceFileName(sourceFileName); 
     89        taskManager->generateTasksFromSource(); 
     90 
    8891        taskManager->writeSource(tasksOutputFileName); 
    89  
    90         taskManager->generateTasksFromSource(); 
    9192        taskManager->writeTasks(tasksOutputFileName, true); 
    9293        return 1; 
     
    104105            tasksOutputFileName = taskManager->getBuildName() + std::string("_master.tasks"); 
    105106 
     107            taskManager->setSourceFileName(sourceFileName); 
     108            taskManager->generateTasksFromSource(); 
     109 
    106110            taskManager->writeSource(sourceFileName); 
    107  
    108             taskManager->generateTasksFromSource(); 
    109111            taskManager->writeTasks(tasksOutputFileName, true); 
    110112             
  • trunk/include/vpb/BuildLog

    r828 r887  
    185185        const BuildLog* getBuildLog() const { return _buildLog.get(); } 
    186186 
    187         void log(osg::NotifySeverity level, const char* format, ...) 
     187        void log(osg::NotifySeverity level, const char* format, ...) const 
    188188        { 
    189189            if (level>osg::getNotifyLevel()) return; 
  • trunk/include/vpb/System

    r868 r887  
    3535extern VPB_EXPORT std::string& getMachineFileName(); 
    3636extern VPB_EXPORT std::string& getCacheFileName(); 
     37extern VPB_EXPORT unsigned int getMaxNumberOfFilesPerDirectory(); 
    3738 
    3839inline bool getAttributeValue(const std::string& field, const std::string& name, std::string& value) 
     
    110111        unsigned long getFileSize(const std::string& filename); 
    111112 
     113        unsigned int getMaxNumberOfFilesPerDirectory() const { return _maxNumberOfFilesPerDirectory; }  
     114 
    112115    protected: 
    113116     
     
    122125        std::string                 _machineFileName; 
    123126        std::string                 _cacheFileName; 
    124          
     127        unsigned int                _maxNumberOfFilesPerDirectory;         
    125128         
    126129        bool                        _trimOldestTiles; 
  • trunk/include/vpb/TaskManager

    r829 r887  
    6666        const std::string& getBuildName() const { return _buildName; } 
    6767         
     68        void setSourceFileName(const std::string& sourceFileName) { _sourceFileName = sourceFileName; } 
     69        const std::string& getSourceFileName() const { return _sourceFileName; } 
     70 
    6871        /** read the task list from file.*/ 
    6972        bool writeSource(const std::string& filename); 
  • trunk/src/vpb/DataSet.cpp

    r886 r887  
    23542354bool DataSet::generateTasks(TaskManager* taskManager) 
    23552355{ 
    2356     if (!getLogFileName().empty()) 
    2357     { 
    2358         if (!getBuildLog()) setBuildLog(new BuildLog()); 
    2359      
    2360         getBuildLog()->openLogFile(getLogFileName()); 
     2356    if (!getLogFileName().empty() && !getBuildLog()) 
     2357    { 
     2358        setBuildLog(new BuildLog(getLogFileName())); 
    23612359    } 
    23622360 
     
    24632461    else 
    24642462    { 
    2465         std::ostringstream taskfile; 
    2466         taskfile<<_tileBasename<<"_subtile_L"<<level<<"_X"<<X<<"_Y"<<Y; 
    2467         return taskfile.str(); 
     2463        if (getDistributedBuildSecondarySplitLevel()!=0 && level>=getDistributedBuildSecondarySplitLevel()-1) 
     2464        { 
     2465            unsigned int deltaLevels =  getDistributedBuildSecondarySplitLevel()-getDistributedBuildSplitLevel(); 
     2466            unsigned int divisor = 1 << deltaLevels; 
     2467            unsigned int nestedX = X / divisor; 
     2468            unsigned int nestedY = Y / divisor; 
     2469            unsigned int nestedLevel = getDistributedBuildSplitLevel()-1;  
     2470            log(osg::NOTICE,"getTaskName(%i,%i,%i) requires nesting, divisor = %i (%i,%i,%i)",level,X,Y,divisor,nestedLevel, nestedX,nestedY); 
     2471 
     2472            std::ostringstream taskfile; 
     2473            taskfile<<_tileBasename<<"_subtile_L"<<nestedLevel<<"_X"<<nestedX<<"_Y"<<nestedY<<"/"; 
     2474            taskfile<<_tileBasename<<"_subtile_L"<<level<<"_X"<<X<<"_Y"<<Y; 
     2475            return taskfile.str(); 
     2476        } 
     2477        else 
     2478        { 
     2479            log(osg::NOTICE,"getTaskName(%i,%i,%i) no nest, %i %i",level,X,Y,getDistributedBuildSplitLevel(),getDistributedBuildSecondarySplitLevel()); 
     2480 
     2481            std::ostringstream taskfile; 
     2482            taskfile<<_tileBasename<<"_subtile_L"<<level<<"_X"<<X<<"_Y"<<Y; 
     2483            return taskfile.str(); 
     2484        } 
    24682485    } 
    24692486} 
     
    25812598        taskManager->addTask(taskfile.str(), app.str(), sourceFile); 
    25822599    } 
    2583      
    2584      
     2600 
     2601    // create the tilemaps for the required split levels 
     2602    TilePairMap intermediateTileMap; 
     2603    if (getDistributedBuildSecondarySplitLevel()!=0) 
     2604    { 
     2605        createTileMap(getDistributedBuildSplitLevel()-1, intermediateTileMap); 
     2606    } 
     2607 
     2608    TilePairMap bottomTileMap; 
     2609    createTileMap(bottomDistributedBuildLevel-1, bottomTileMap); 
     2610 
     2611    unsigned int totalNumOfTasksSansRoot = intermediateTileMap.size() + bottomTileMap.size();  
     2612    unsigned int taskCount = 0; 
     2613    unsigned int numTasksPerDirectory = getMaxNumberOfFilesPerDirectory(); 
     2614 
     2615    bool tooManyTasksForOneDirectory = totalNumOfTasksSansRoot > numTasksPerDirectory; 
     2616     
     2617    log(osg::NOTICE,"totalNumOfTasksSansRoot = %d", totalNumOfTasksSansRoot); 
     2618 
     2619    // initialize the variables used for nested secondary tasks within primary tasks 
     2620    unsigned int deltaLevels = 0; 
     2621    unsigned int divisor = 1; 
     2622    unsigned int nestedLevel = getDistributedBuildSplitLevel()-1; 
     2623 
    25852624    // need to create an intermediate level if required. 
    25862625    if (getDistributedBuildSecondarySplitLevel()!=0) 
     
    25882627        unsigned int level = getDistributedBuildSplitLevel()-1; 
    25892628 
    2590         TilePairMap tilepairMap; 
    2591         createTileMap(level, tilepairMap); 
    2592  
    2593         for(TilePairMap::iterator itr = tilepairMap.begin(); 
    2594             itr != tilepairMap.end(); 
     2629        for(TilePairMap::iterator itr = intermediateTileMap.begin(); 
     2630            itr != intermediateTileMap.end(); 
    25952631            ++itr) 
    25962632        { 
     
    25982634            unsigned int tileY = itr->first.second; 
    25992635 
     2636            unsigned int taskSet = taskCount / numTasksPerDirectory; 
     2637 
    26002638            std::ostringstream taskfile; 
    2601             taskfile<<taskDirectory<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".task"; 
     2639            taskfile<<taskDirectory; 
     2640            taskfile<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".task"; 
    26022641 
    26032642 
     
    26152654                std::ostringstream logfile; 
    26162655 
    2617                 logfile<<logDirectory<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".log"; 
     2656                logfile<<logDirectory; 
     2657                logfile<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".log"; 
    26182658                app<<" --log "<<logfile.str(); 
    26192659            } 
    26202660 
    26212661            taskManager->addTask(taskfile.str(), app.str(), sourceFile); 
    2622         } 
    2623     } 
     2662             
     2663            ++taskCount; 
     2664        } 
     2665         
     2666        // we have an intermediated level so the bottom level will need to be nested, so initiliaze 
     2667        // the deltaLevels and divisor for use in below. 
     2668        deltaLevels = getDistributedBuildSecondarySplitLevel()-getDistributedBuildSplitLevel(); 
     2669        divisor = 1 << deltaLevels;         
     2670    } 
     2671     
    26242672     
    26252673    // create the bottom level split 
     
    26272675        unsigned int level = bottomDistributedBuildLevel-1; 
    26282676 
    2629         TilePairMap tilepairMap; 
    2630         createTileMap(level, tilepairMap); 
    2631  
    2632         for(TilePairMap::iterator itr = tilepairMap.begin(); 
    2633             itr != tilepairMap.end(); 
     2677        for(TilePairMap::iterator itr = bottomTileMap.begin(); 
     2678            itr != bottomTileMap.end(); 
    26342679            ++itr) 
    26352680        { 
     
    26372682            unsigned int tileY = itr->first.second; 
    26382683 
     2684            unsigned int taskSet = taskCount / numTasksPerDirectory; 
     2685 
    26392686            std::ostringstream taskfile; 
    2640             taskfile<<taskDirectory<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".task"; 
     2687            taskfile<<taskDirectory; 
     2688            if (deltaLevels) 
     2689            { 
     2690                unsigned int nestedX = tileX / divisor; 
     2691                unsigned int nestedY = tileY / divisor; 
     2692                taskfile<<basename<<"_subtile_L"<<nestedLevel<<"_X"<<nestedX<<"_Y"<<nestedY<<"/"; 
     2693                 
     2694                std::string path = taskfile.str(); 
     2695                vpb::mkpath(path.c_str(), S_IRWXU | S_IRWXG | S_IRWXO); 
     2696            } 
     2697            taskfile<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".task"; 
    26412698 
    26422699 
     
    26532710                std::ostringstream logfile; 
    26542711 
    2655                 logfile<<logDirectory<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".log"; 
     2712                logfile<<logDirectory; 
     2713                if (deltaLevels) 
     2714                { 
     2715                    unsigned int nestedX = tileX / divisor; 
     2716                    unsigned int nestedY = tileY / divisor; 
     2717                    logfile<<basename<<"_subtile_L"<<nestedLevel<<"_X"<<nestedX<<"_Y"<<nestedY<<"/"; 
     2718 
     2719                    std::string path = logfile.str(); 
     2720                    vpb::mkpath(path.c_str(), S_IRWXU | S_IRWXG | S_IRWXO); 
     2721                } 
     2722                logfile<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".log"; 
    26562723                app<<" --log "<<logfile.str(); 
    26572724            } 
    26582725 
    26592726            taskManager->addTask(taskfile.str(), app.str(), sourceFile); 
     2727 
     2728            ++taskCount; 
    26602729        } 
    26612730    } 
     
    26672736int DataSet::run() 
    26682737{ 
    2669     if (!getLogFileName().empty()) 
    2670     { 
    2671         if (!getBuildLog()) setBuildLog(new BuildLog()); 
    2672          
    2673         getBuildLog()->openLogFile(getLogFileName()); 
     2738    if (!getLogFileName().empty() && !getBuildLog()) 
     2739    { 
     2740        setBuildLog(new BuildLog(getLogFileName())); 
    26742741    } 
    26752742 
     
    26932760{ 
    26942761     
     2762    log(osg::NOTICE,"DataSet::_run() %i %i",getDistributedBuildSplitLevel(),getDistributedBuildSecondarySplitLevel()); 
     2763 
    26952764    bool requiresGraphicsContextInMainThread = true; 
    26962765     
  • trunk/src/vpb/System.cpp

    r885 r887  
    4949std::string& vpb::getMachineFileName() { return System::instance()->getMachineFileName(); } 
    5050std::string& vpb::getCacheFileName() { return System::instance()->getCacheFileName(); } 
     51unsigned int vpb::getMaxNumberOfFilesPerDirectory() { return System::instance()->getMaxNumberOfFilesPerDirectory(); } 
    5152 
    5253/////////////////////////////////////////////////////////////////////////////////////////////////// 
     
    6970    _taskDirectory = "tasks"; 
    7071     
     72    _maxNumberOfFilesPerDirectory = 1000; 
     73     
    7174    readEnvironmentVariables(); 
    7275     
     
    152155    } 
    153156     
     157 
     158    str = getenv("VPB_MAXIMUM_OF_FILES_PER_DIRECTORY"); 
     159    if (str)  
     160    { 
     161        _maxNumberOfFilesPerDirectory = atoi(str); 
     162    } 
    154163} 
    155164