Text archives Help
- From: abe@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r513 - in branches/AFR: Engine/Control Engine/ImageTraversers Engine/ImageTraversers/AFR Interface StandAlone UserInterface
- Date: Mon, 29 Aug 2005 15:49:05 -0600 (MDT)
Author: abe
Date: Mon Aug 29 15:49:04 2005
New Revision: 513
Added:
branches/AFR/UserInterface/NullUI.h
- copied unchanged from r511, branches/itanium2/UserInterface/NullUI.h
Modified:
branches/AFR/Engine/Control/AFRPipeline.cc
branches/AFR/Engine/Control/AFRPipeline.h
branches/AFR/Engine/Control/RTRT.h
branches/AFR/Engine/Control/RTRT_register.cc
branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc
branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
branches/AFR/Engine/ImageTraversers/AFR/stats.cc
branches/AFR/Interface/RTRTInterface.h
branches/AFR/StandAlone/manta.cc
branches/AFR/UserInterface/CMakeLists.txt
Log:
Added "-ui null" option from itanium2 branch for batch benchmarks.
Also added Afr::BenchHelper which outputs samples/second after all threads
initialize.
M StandAlone/manta.cc
M UserInterface/CMakeLists.txt
A UserInterface/NullUI.h
M Interface/RTRTInterface.h
M Engine/Control/RTRT.h
M Engine/Control/AFRPipeline.cc
M Engine/Control/RTRT_register.cc
M Engine/Control/AFRPipeline.h
M Engine/ImageTraversers/AFR/stats.cc
M Engine/ImageTraversers/AFImageTraverser.cc
M Engine/ImageTraversers/AFImageTraverser.h
Modified: branches/AFR/Engine/Control/AFRPipeline.cc
==============================================================================
--- branches/AFR/Engine/Control/AFRPipeline.cc (original)
+++ branches/AFR/Engine/Control/AFRPipeline.cc Mon Aug 29 15:49:04 2005
@@ -156,17 +156,15 @@
///////////////////////////////////////////////////////////////////////////////
// ADD CALLBACKS
///////////////////////////////////////////////////////////////////////////////
-void AFRPipeline::addOneShotCallback(Whence /*whence*/, long frame,
+void AFRPipeline::addOneShotCallback(Whence whence, long frame,
CallbackBase_2Data<int, int>* callback)
{
-#if NOTFINISHED
// What about adding callbacks during anim cycle?
-#endif
callbackLock.writeLock();
-#if NOTFINISHED
+
if(whence == RTRTInterface::Relative)
- frame += current Fame;
-#endif
+ frame += animFrameState.frameNumber;
+
oneShots.insert(OneShotMapType::value_type(frame, callback));
callbackLock.writeUnlock();
}
@@ -677,7 +675,6 @@
int numChannels = static_cast<int>(channels.size());
- std::cout << "Thread in setupPipelines" << std::endl;
// Create a setup context.
SetupContext globalcontext(this, numChannels, 0, numProcs,
Modified: branches/AFR/Engine/Control/AFRPipeline.h
==============================================================================
--- branches/AFR/Engine/Control/AFRPipeline.h (original)
+++ branches/AFR/Engine/Control/AFRPipeline.h Mon Aug 29 15:49:04 2005
@@ -78,6 +78,7 @@
bool
changePipeline);
// Image Traversers
+ virtual ImageTraverser *getImageTraverser() { return
currentImageTraverser; };
virtual bool selectImageTraverser(const string& spec);
virtual void registerComponent(const string& name,
ImageTraverserCreator creator);
virtual listType listImageTraversers() const;
Modified: branches/AFR/Engine/Control/RTRT.h
==============================================================================
--- branches/AFR/Engine/Control/RTRT.h (original)
+++ branches/AFR/Engine/Control/RTRT.h Mon Aug 29 15:49:04 2005
@@ -43,6 +43,7 @@
bool changePipeline);
// Image Traversers
+ virtual ImageTraverser *getImageTraverser() { return
currentImageTraverser; };
virtual bool selectImageTraverser(const string& spec);
virtual void registerComponent(const string& name, ImageTraverserCreator
creator);
virtual listType listImageTraversers() const;
Modified: branches/AFR/Engine/Control/RTRT_register.cc
==============================================================================
--- branches/AFR/Engine/Control/RTRT_register.cc (original)
+++ branches/AFR/Engine/Control/RTRT_register.cc Mon Aug 29 15:49:04
2005
@@ -39,6 +39,7 @@
#include <Model/Groups/Group.h>
#include <UserInterface/PromptUI.h>
#include <UserInterface/XWindowUI.h>
+#include <UserInterface/NullUI.h>
namespace Manta {
@@ -101,6 +102,7 @@
rtrt->registerComponent("zoom", &ZoomIdleMode::create);
// Register user interfaces
+ rtrt->registerComponent("null", &NullUI::create);
rtrt->registerComponent("prompt", &PromptUI::create);
rtrt->registerComponent("X", &XWindowUI::create);
Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc Mon Aug 29
15:49:04 2005
@@ -563,6 +563,7 @@
{
if(samples_done[context.proc].value >= (xres*yres)) {
initpass[context.proc] = true;
+ std::cerr << "Thread: " << context.proc << " initialized" << std::endl;
}
}
else
@@ -673,4 +674,50 @@
}
while(minError/maxError<MAX_MIN_RATIO && count<MAX_MERGE_SPLIT_LIMIT);
}
+}
+
+#include <Interface/RTRTInterface.h>
+#include <Interface/Callback.h>
+
+
+// If all of the threads have initialized start the benchmark.
+void BenchHelper::tryStart( int, int ) {
+
+ AFImageTraverser *traverser = (AFImageTraverser
*)rtrt->getImageTraverser();
+
+ // Check to see if all threads initialized.
+ if (!traverser->allThreadsInitialized()) {
+ // std::cout << "Try setup failed" << std::endl;
+ rtrt->addOneShotCallback(RTRTInterface::Relative, 10,
+ Callback::create(this, &BenchHelper::tryStart));
+ return;
+ }
+
+ // std::cout << "Beginning benchmark" << std::endl;
+
+ // Otherwise
+ start_time = SCIRun::Time::currentSeconds();
+ start_samples = traverser->getSamplesDone();
+
+ rtrt->addOneShotCallback(RTRTInterface::Relative, outer_loops,
+ Callback::create(this, &BenchHelper::stop));
+}
+
+// Take the final measurement.
+void BenchHelper::stop (int, int) {
+
+ AFImageTraverser *traverser = (AFImageTraverser
*)rtrt->getImageTraverser();
+
+ double end_time = SCIRun::Time::currentSeconds();
+ unsigned int end_samples = traverser->getSamplesDone();
+
+ // Determine samples per second.
+ double sps = (double)(end_samples - start_samples) / (end_time -
start_time);
+
+ // Output performance.
+ std::cout << sps << std::endl;
+
+ delete this;
+
+ SCIRun::Thread::exitAll(0);
}
Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.h (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.h Mon Aug 29
15:49:04 2005
@@ -2,6 +2,9 @@
#ifndef Manta_Engine_AFImageTraverser_h
#define Manta_Engine_AFImageTraverser_h
+#include <SCIRun/Core/Thread/Time.h>
+#include <SCIRun/Core/Thread/Thread.h>
+
#include <Interface/ImageTraverser.h>
#include <Interface/Fragment.h>
#include <sgi_stl_warnings_off.h>
@@ -115,7 +118,7 @@
// ??????????????
double *chunkTimeStamp;
- bool *initpass;
+ bool *initpass;
/////////////////////////////////////////////////////////////////////////
// Arguments.
@@ -131,8 +134,42 @@
}
return total;
};
+
+ inline bool allThreadsInitialized() {
+ bool all = true;
+ for (int i=0;(i<num_clients)&&all;++i) {
+ all = initpass[i] && all;
+ }
+
+ return all;
+ }
};
+
+
///////////////////////////////////////////////////////////////////////////
+
///////////////////////////////////////////////////////////////////////////
+ // SAMPLES PER SECOND BENCH SAMPLES PER SECOND BENCH SAMPLES PER SECOND
+
///////////////////////////////////////////////////////////////////////////
+
///////////////////////////////////////////////////////////////////////////
+ class BenchHelper {
+ private:
+ RTRTInterface *rtrt;
+ long outer_loops;
+
+ double start_time;
+ unsigned int start_samples;
+
+
+ public:
+ BenchHelper( RTRTInterface *rtrt_, long outer_loops_ ) :
+ rtrt( rtrt_ ), outer_loops( outer_loops_ ) { };
+
+ void tryStart( int, int );
+ void stop( int, int );
+
+ };
+
+
};
};
Modified: branches/AFR/Engine/ImageTraversers/AFR/stats.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFR/stats.cc (original)
+++ branches/AFR/Engine/ImageTraversers/AFR/stats.cc Mon Aug 29 15:49:04
2005
@@ -21,7 +21,10 @@
n++;
//assert(xi>=0);
assert(wi>0);
- assert(uniform_decrease>0);
+ // assert(uniform_decrease>0);
+ if (uniform_decrease > 0)
+ return;
+
sigma_wi *= uniform_decrease;
sigma_xi_wi *= uniform_decrease;
Modified: branches/AFR/Interface/RTRTInterface.h
==============================================================================
--- branches/AFR/Interface/RTRTInterface.h (original)
+++ branches/AFR/Interface/RTRTInterface.h Mon Aug 29 15:49:04 2005
@@ -49,6 +49,7 @@
bool changePipeline) = 0;
// Image Traversers
+ virtual ImageTraverser *getImageTraverser() = 0;
typedef ImageTraverser* (*ImageTraverserCreator)(const vector<string>&
args);
virtual bool selectImageTraverser(const string& spec) = 0;
virtual void registerComponent(const string& name, ImageTraverserCreator
creator) = 0;
Modified: branches/AFR/StandAlone/manta.cc
==============================================================================
--- branches/AFR/StandAlone/manta.cc (original)
+++ branches/AFR/StandAlone/manta.cc Mon Aug 29 15:49:04 2005
@@ -9,8 +9,10 @@
#include <Core/Exceptions/InternalError.h>
#include <Core/Thread/Time.h>
#include <strings.h>
+#include <SCIRun/Core/Thread/Thread.h>
#include <Engine/Control/AFRPipeline.h>
+#include <Engine/ImageTraversers/AFImageTraverser.h>
#include <sgi_stl_warnings_off.h>
#include <iostream>
@@ -20,7 +22,8 @@
using namespace Manta;
using SCIRun::InternalError;
-using SCIRun::Time;
+// using SCIRun::Time;
+using SCIRun::Thread;
#if HAVE_IEEEFP_H
#include <ieeefp.h>
@@ -91,17 +94,22 @@
void BenchHelper::start(int, int)
{
- startTime = Time::currentSeconds();
+ startTime = SCIRun::Time::currentSeconds();
}
void BenchHelper::stop(int, int)
{
- double dt = Time::currentSeconds()-startTime;
+ double dt = SCIRun::Time::currentSeconds()-startTime;
double fps = static_cast<double>(numFrames)/dt;
// cout << "Benchmark completed in " << dt << " seconds (" << numFrames <<
" frames, " << fps << " frames per second)\n";
+
std::cout << fps << std::endl;
- rtrt->finish();
- delete this;
+
+ Thread::exitAll(0);
+
+
+ // rtrt->finish();
+ // delete this;
}
int
@@ -152,6 +160,7 @@
if(arg == "-help"){
usage(rtrt);
} else if(arg == "-bench"){
+#if 0
long numFrames = 100;
long warmup = 10;
if(getLongArg(i, args, numFrames)){
@@ -164,6 +173,23 @@
Callback::create(b,
&BenchHelper::start));
rtrt->addOneShotCallback(RTRTInterface::Absolute, warmup+numFrames,
Callback::create(b,
&BenchHelper::stop));
+#endif
+ // Number of outer loops to measure after initialization.
+ long outer_loops;
+
+ if (!getLongArg(i,args,outer_loops)) {
+ cerr << "Usage -bench <outer_loops>" << endl;
+ exit(1);
+ }
+
+ // Create the benchmark helper.
+ Afr::BenchHelper *b = new Afr::BenchHelper( rtrt, outer_loops );
+
+ // Check to see if all threads are initialized in 100 "frames"
+ rtrt->addOneShotCallback(RTRTInterface::Relative, 10,
+
Callback::create(b,
&Afr::BenchHelper::tryStart));
+
+
} else if(arg == "-camera"){
string s;
if(!getStringArg(i, args, s))
Modified: branches/AFR/UserInterface/CMakeLists.txt
==============================================================================
--- branches/AFR/UserInterface/CMakeLists.txt (original)
+++ branches/AFR/UserInterface/CMakeLists.txt Mon Aug 29 15:49:04 2005
@@ -1,5 +1,10 @@
-ADD_LIBRARY (Manta_UserInterface PromptUI.cc XWindowUI.cc)
+ADD_LIBRARY (Manta_UserInterface
+ PromptUI.h
+ PromptUI.cc
+ XWindowUI.h
+ XWindowUI.cc
+ NullUI.h)
TARGET_LINK_LIBRARIES(Manta_UserInterface Manta_Interface
Manta_Core_XUtils Manta_Core)
TARGET_LINK_LIBRARIES(Manta_UserInterface ${OPENGL_LIBRARIES}
${X11_LIBRARIES})
- [MANTA] r513 - in branches/AFR: Engine/Control Engine/ImageTraversers Engine/ImageTraversers/AFR Interface StandAlone UserInterface, abe, 08/29/2005
Archive powered by MHonArc 2.6.16.