Text archives Help
- From: abe@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r554 - in branches/AFR: Engine/Control Engine/ImageTraversers StandAlone
- Date: Sat, 17 Sep 2005 18:56:33 -0600 (MDT)
Author: abe
Date: Sat Sep 17 18:56:32 2005
New Revision: 554
Added:
branches/AFR/StandAlone/afr.cc
- copied, changed from r553, branches/AFR/StandAlone/manta.cc
Removed:
branches/AFR/Engine/ImageTraversers/AFRImageTraverser.cc
Modified:
branches/AFR/Engine/Control/AFRPipeline.cc
branches/AFR/Engine/Control/AFRPipeline.h
branches/AFR/Engine/Control/RTRT_register.cc
branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc
branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
branches/AFR/Engine/ImageTraversers/AFRImageTraverser.h
branches/AFR/Engine/ImageTraversers/CMakeLists.txt
branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.cc
branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.h
branches/AFR/StandAlone/CMakeLists.txt
branches/AFR/StandAlone/combinestreams.cpp
Log:
Modified as necessary to make previous checkin compile.
M StandAlone/combinestreams.cpp
A StandAlone/afr.cc
M StandAlone/CMakeLists.txt
Added bin/afr to invoke the afr renderer from this branch. Running bin/manta
will run the
original framed version of the pipeline.
Fixed AFRImageTraverser interface so that all of the necessary virtual method
were defined.
M Engine/Control/AFRPipeline.cc
M Engine/Control/RTRT_register.cc
M Engine/Control/AFRPipeline.h
D Engine/ImageTraversers/AFRImageTraverser.cc
M Engine/ImageTraversers/AFRImageTraverser.h
M Engine/ImageTraversers/AFImageTraverser.cc
M Engine/ImageTraversers/GSTAFRImageTraverser.cc
M Engine/ImageTraversers/AFImageTraverser.h
M Engine/ImageTraversers/CMakeLists.txt
M Engine/ImageTraversers/GSTAFRImageTraverser.h
After this, the original code, AFImageTraverser, is performing several orders
of magnitude
slower then in previous versions of the code. What changes were made on
performance critical
paths? Maybe there is some case where a virtual function is being called (a
whole lot) where something
was inline before? We did make a lot of things virtual.
We'll need to make the old code at least as fast as it was, before
continuing. More tomorrow.
Abe
Modified: branches/AFR/Engine/Control/AFRPipeline.cc
==============================================================================
--- branches/AFR/Engine/Control/AFRPipeline.cc (original)
+++ branches/AFR/Engine/Control/AFRPipeline.cc Sat Sep 17 18:56:32 2005
@@ -42,8 +42,11 @@
#include <Interface/IdleMode.h>
#include <Interface/Image.h>
#include <Interface/ImageDisplay.h>
-#include <Engine/ImageTraversers/AFImageTraverser.h>
-//#include <Interface/ImageTraverser.h>
+
+#include <Engine/ImageTraversers/AFRImageTraverser.h>
+
+
+
#include <Interface/Light.h>
#include <Interface/LightSet.h>
#include <Interface/LoadBalancer.h>
@@ -295,6 +298,8 @@
// firstFrame = false;
// goto skipToRendering;
//}
+
+ unsigned int inner_loop_time = currentImageTraverser->getInnerLoopTime();
// Begin the outer rendering loop.
// This updates renderer state and then
@@ -409,20 +414,22 @@
Image* image = channel->images[displayFrame];
if(image && image->isValid()){
- // Compute the current sampling rate.
- Real current_samples = currentImageTraverser->getSamplesDone();
+ // Compute the current sampling rate.
+
+ Real current_samples = currentImageTraverser->getSamplesDone();
- Real delta_samples = (current_samples-last_samples);
- Real currenttime = SCIRun::Time::currentSeconds();
- Real delta_time = currenttime - last_display_time;
- last_display_time = currenttime;
-
- Real sampling_rate = delta_samples / delta_time;
-
- currentImageTraverser->setSamplingRate( (unsigned int)sampling_rate
);
- DisplayContext myContext(proc, workersAnimAndImage);
- channel->display->displayImage(myContext, image,
(current_samples-last_samples));
- last_samples = current_samples;
+ Real delta_samples = (current_samples-last_samples);
+ Real currenttime = SCIRun::Time::currentSeconds();
+ Real delta_time = currenttime - last_display_time;
+ last_display_time = currenttime;
+
+ Real sampling_rate = delta_samples / delta_time;
+
+ currentImageTraverser->setSamplingRate( (unsigned int)sampling_rate
);
+
+ DisplayContext myContext(proc, workersAnimAndImage);
+ channel->display->displayImage(myContext, image,
(current_samples-last_samples));
+ last_samples = current_samples;
}
@@ -442,7 +449,7 @@
/////////////////////////////////////////////////////////////////////////
int inner_iterations = 0;
for (double begin_time=SCIRun::Time::currentSeconds();
-
(SCIRun::Time::currentSeconds()-begin_time)<currentImageTraverser->inner_loop_time;)
+ (SCIRun::Time::currentSeconds()-begin_time)<inner_loop_time;)
{
++inner_iterations;
@@ -486,7 +493,7 @@
} // End of inner loop.
if(proc==0)
{
- if (currentImageTraverser->debug_window)
+ if (currentImageTraverser->hasDebugWindow())
// do the display stuff here
currentImageTraverser->display_stats();
}
@@ -832,14 +839,14 @@
vector<string> args;
parseSpec(spec, name, args);
- // ImageTraverserMapType::iterator iter = imageTraversers.find(name);
- // if(iter == imageTraversers.end())
- // return false;
+ ImageTraverserMapType::iterator iter = imageTraversers.find(name);
+ if(iter == imageTraversers.end())
+ return false;
- // Only create an AFImageTraverser
- currentImageTraverser = new AFImageTraverser( args );
+ // Only create an AFRImageTraverser
+ currentImageTraverser = dynamic_cast<AFRImageTraverser *>((*iter->second)(
args ));
- return true;
+ return (currentImageTraverser != 0);
}
void AFRPipeline::registerComponent(const string& name,
ImageTraverserCreator fun)
Modified: branches/AFR/Engine/Control/AFRPipeline.h
==============================================================================
--- branches/AFR/Engine/Control/AFRPipeline.h (original)
+++ branches/AFR/Engine/Control/AFRPipeline.h Sat Sep 17 18:56:32 2005
@@ -235,7 +235,7 @@
typedef map<string, ImageTraverserCreator>
ImageTraverserMapType;
ImageTraverserMapType imageTraversers;
- AFRImageTraverser* currentImageTraverser;
+ AFRImageTraverser* currentImageTraverser;
typedef map<string, LoadBalancerCreator>
LoadBalancerMapType;
LoadBalancerMapType loadBalancers;
Modified: branches/AFR/Engine/Control/RTRT_register.cc
==============================================================================
--- branches/AFR/Engine/Control/RTRT_register.cc (original)
+++ branches/AFR/Engine/Control/RTRT_register.cc Sat Sep 17 18:56:32
2005
@@ -6,7 +6,13 @@
#include <Engine/ImageTraversers/NullImageTraverser.h>
#include <Engine/ImageTraversers/TiledImageTraverser.h>
#include <Engine/ImageTraversers/FramelessImageTraverser.h>
+
#include <Engine/ImageTraversers/AFRImageTraverser.h>
+#include <Engine/ImageTraversers/AFImageTraverser.h>
+#include <Engine/ImageTraversers/GSTAFRImageTraverser.h>
+// #include <Engine/ImageTraversers/STAFRImageTraverser.h>
+
+
#include <Engine/ImageTraversers/DissolveImageTraverser.h>
#include <Engine/ImageTraversers/DissolveTiledImageTraverser.h>
#include <Engine/LoadBalancers/CyclicLoadBalancer.h>
@@ -45,6 +51,7 @@
namespace Manta {
void registerKnownComponents(RTRTInterface* rtrt)
{
+
// Register display components
rtrt->registerComponent("null", &NullDisplay::create);
rtrt->registerComponent("opengl", &OpenGLDisplay::create);
@@ -54,11 +61,13 @@
rtrt->registerComponent("null", &NullImageTraverser::create);
rtrt->registerComponent("tiled", &TiledImageTraverser::create);
rtrt->registerComponent("frameless", &FramelessImageTraverser::create);
- rtrt->registerComponent("afr", &Afr::AFRImageTraverser::create);
- rtrt->registerComponent("gstafr", &Afr::AFRImageTraverser::create);
- rtrt->registerComponent("stafr", &Afr::AFRImageTraverser::create);
rtrt->registerComponent("dissolve", &DissolveImageTraverser::create);
rtrt->registerComponent("dissolvetiled",
&DissolveTiledImageTraverser::create);
+
+ rtrt->registerComponent("afr", &Afr::AFImageTraverser::create);
+ rtrt->registerComponent("gstafr", &Afr::GSTAFRImageTraverser::create);
+ // rtrt->registerComponent("stafr", &Afr::STAFRImageTraverser::create);
+
// Register image types
rtrt->registerComponent("null", &NullImage::create);
Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.cc Sat Sep 17
18:56:32 2005
@@ -431,7 +431,7 @@
int numlevels = kdtree[i].init(xres, yres, samplingrate); // initialize
the tree
// set a mean number of tiles, i.e. cut at middle of tree
- kdtree[i].resetPseudoRandomSeed();
+ kdtree[i].resetPseudoRandomSeed(myRandomNumber[i]);
}
// chunk_size = 256; // this is a fixed number as of now
@@ -881,7 +881,7 @@
// If all of the threads have initialized start the benchmark.
void BenchHelper::tryStart( int, int ) {
- AFImageTraverser *traverser = (AFImageTraverser
*)rtrt->getImageTraverser();
+ AFRImageTraverser *traverser = (AFRImageTraverser
*)rtrt->getImageTraverser();
// Check to see if all threads initialized.
if (!traverser->allThreadsInitialized()) {
@@ -904,7 +904,7 @@
// Take the final measurement.
void BenchHelper::stop (int, int) {
- AFImageTraverser *traverser = (AFImageTraverser
*)rtrt->getImageTraverser();
+ AFRImageTraverser *traverser = (AFRImageTraverser
*)rtrt->getImageTraverser();
double end_time = SCIRun::Time::currentSeconds();
unsigned int end_samples = traverser->getSamplesDone();
Modified: branches/AFR/Engine/ImageTraversers/AFImageTraverser.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFImageTraverser.h (original)
+++ branches/AFR/Engine/ImageTraversers/AFImageTraverser.h Sat Sep 17
18:56:32 2005
@@ -5,7 +5,7 @@
#include <SCIRun/Core/Thread/Time.h>
#include <SCIRun/Core/Thread/Thread.h>
-#include <Interface/ImageTraverser.h>
+#include <Engine/ImageTraversers/AFRImageTraverser.h>
#include <Interface/Fragment.h>
#include <sgi_stl_warnings_off.h>
#include <string>
@@ -31,7 +31,7 @@
namespace Afr {
enum FrameType { EVEN_FRAME, ODD_FRAME };
- class AFImageTraverser : public ImageTraverser {
+ class AFImageTraverser : public AFRImageTraverser {
friend class AFRPipeline;
@@ -46,7 +46,10 @@
void renderChunk(const RenderContext& context, Image*
image, int xres, int yres);
int renderCrossHair(const RenderContext& context, int
myID, Image *image, const int xres, const int yres, Sample *s, const int
sscount, bool endChunk=false);
-
+
+ // All AFImageTraversers are both master and client.
+ virtual bool isMaster( int id ) { return true; };
+
// Master thread task.
void masterTask(const RenderContext& context, Image*
image);
@@ -78,7 +81,11 @@
if(qSize>maxQSize) qSize = maxQSize;
}
}
- static ImageTraverser* create(const vector<string>&
args);
+
+ // Accessors.
+
+
+ static ImageTraverser* create(const vector<string>& args);
private:
AFImageTraverser(const AFImageTraverser&);
@@ -150,6 +157,8 @@
/////////////////////////////////////////////////////////////////////////
// Arguments.
Real inner_loop_time;
+
+
public:
@@ -170,8 +179,10 @@
return all;
}
- };
+ virtual double getInnerLoopTime() { return inner_loop_time; };
+ virtual bool hasDebugWindow() { return debug_window != 0; };
+ };
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
@@ -182,7 +193,7 @@
private:
RTRTInterface *rtrt;
long outer_loops;
-
+
double start_time;
unsigned int start_samples;
@@ -190,14 +201,14 @@
public:
BenchHelper( RTRTInterface *rtrt_, long outer_loops_ ) :
rtrt( rtrt_ ), outer_loops( outer_loops_ ) { };
-
+
void tryStart( int, int );
void stop( int, int );
-
- };
-
- };
+ };
+
+ };
+
};
#endif
Modified: branches/AFR/Engine/ImageTraversers/AFRImageTraverser.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/AFRImageTraverser.h (original)
+++ branches/AFR/Engine/ImageTraversers/AFRImageTraverser.h Sat Sep 17
18:56:32 2005
@@ -1,6 +1,6 @@
-#ifndef Manta_Engine_AFImageTraverser_h
-#define Manta_Engine_AFImageTraverser_h
+#ifndef Manta_Engine_AFRImageTraverser_h
+#define Manta_Engine_AFRImageTraverser_h
#include <SCIRun/Core/Thread/Time.h>
#include <SCIRun/Core/Thread/Thread.h>
@@ -30,24 +30,27 @@
namespace Afr {
- class AFImageTraverser : public ImageTraverser {
+ class AFRImageTraverser : public ImageTraverser {
friend class AFRPipeline;
- public:
-
- AFImageTraverser(const vector<string>& args);
- virtual ~AFImageTraverser();
- virtual void setupBegin(SetupContext&, int
numChannels);
- virtual void setupDisplayChannel(SetupContext&);
+ public:
+ // AFRImageTraverser(const vector<string>& args);
+ virtual ~AFRImageTraverser() { };
+
+ virtual void setupBegin(SetupContext&, int
numChannels) = 0;
+ virtual void setupDisplayChannel(SetupContext&) = 0;
virtual void setupFrame(const RenderContext& context)
{ /*Undefined for AFRPipeline.*/ };
virtual void renderImage(const RenderContext&
context, Image* image) { /*Undefined for AFRPipeline. */ };
-
+
+#if 0
+ // Do these need to be part of the virtual interface?
virtual void renderChunk(const RenderContext&
context, Image* image, int xres, int yres);
virtual int renderCrossHair(const RenderContext&
context, int myID,
Image *image, const int xres, const int yres,
PartialSampleSet *sampleset, const int sscount,
bool endChunk=false)=0;
+#endif
// Master thread task.
virtual void masterTask(const RenderContext& context,
Image* image)=0;
@@ -55,6 +58,7 @@
// Sampler/Renderer task.
virtual void clientTask(const RenderContext& context,
Image* image)=0;
virtual inline bool isMaster(int id)=0;
+
// Update kdtree-cut.
virtual void adjustTiles(int id, Timestamp
currenttime)=0;
virtual void createStatsWin()=0;
@@ -63,7 +67,21 @@
virtual void initStreams(int xres, int yres)=0;
virtual void write_Tile_and_Camera(RenderContext&
context)=0;
virtual int setSamplingRate(unsigned int srate)=0;
- static ImageTraverser* create(const vector<string>&
args);
+
+ // Accessors.
+ virtual unsigned int getSamplesDone() = 0;
+ virtual double getInnerLoopTime() = 0;
+ virtual bool hasDebugWindow() = 0;
+
+ virtual bool allThreadsInitialized() = 0;
+ // static ImageTraverser* create(const
vector<string>& args);
+ };
+
+
+
+
+ };
};
#endif
+
Modified: branches/AFR/Engine/ImageTraversers/CMakeLists.txt
==============================================================================
--- branches/AFR/Engine/ImageTraversers/CMakeLists.txt (original)
+++ branches/AFR/Engine/ImageTraversers/CMakeLists.txt Sat Sep 17 18:56:32
2005
@@ -7,10 +7,12 @@
ImageTraversers/DissolveTiledImageTraverser.cc
ImageTraversers/AFRImageTraverser.h
+
ImageTraversers/AFImageTraverser.h
ImageTraversers/AFImageTraverser.cc
ImageTraversers/GSTAFRImageTraverser.h
ImageTraversers/GSTAFRImageTraverser.cc
+
ImageTraversers/AFR/CQ.h
ImageTraversers/AFR/evil.h
ImageTraversers/AFR/kdtree.cc
Modified: branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.cc
==============================================================================
--- branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.cc (original)
+++ branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.cc Sat Sep 17
18:56:32 2005
@@ -889,48 +889,3 @@
}
}
-#include <Interface/RTRTInterface.h>
-#include <Interface/Callback.h>
-
-
-// If all of the threads have initialized start the benchmark.
-void BenchHelper::tryStart( int, int ) {
-
- GSTAFRImageTraverser *traverser = (GSTAFRImageTraverser
*)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) {
-
- GSTAFRImageTraverser *traverser = (GSTAFRImageTraverser
*)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/GSTAFRImageTraverser.h
==============================================================================
--- branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.h (original)
+++ branches/AFR/Engine/ImageTraversers/GSTAFRImageTraverser.h Sat Sep 17
18:56:32 2005
@@ -38,6 +38,7 @@
public:
GSTAFRImageTraverser(const vector<string>& args);
+
virtual ~GSTAFRImageTraverser();
virtual void setupBegin(SetupContext&, int
numChannels);
virtual void setupDisplayChannel(SetupContext&);
@@ -132,8 +133,6 @@
int samplingrate;
int *lastxhairindex, *updatecount;
- // Arguments.
- Real inner_loop_time;
/////////////////////////////////////////////////////////////////////////
// Samples done.
struct SamplesDone {
@@ -152,7 +151,16 @@
inline unsigned int load() { return value; };
#endif
};
-
+ SamplesDone *samples_done;
+
+ // Arguments.
+ Real inner_loop_time;
+
+ int *last_samples_done;
+ // ??????????????
+ double *chunkTimeStamp;
+ bool *initpass;
+
public:
// Sum up all of the samples done by all of the threads.
@@ -172,31 +180,11 @@
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 );
-
- };
+ // Accessors.
+ virtual double getInnerLoopTime() { return inner_loop_time; };
+ virtual bool hasDebugWindow() { return debug_window != 0; };
+ };
};
Modified: branches/AFR/StandAlone/CMakeLists.txt
==============================================================================
--- branches/AFR/StandAlone/CMakeLists.txt (original)
+++ branches/AFR/StandAlone/CMakeLists.txt Sat Sep 17 18:56:32 2005
@@ -9,7 +9,22 @@
Manta_Core_XUtils
SCIRun_Core)
- TARGET_LINK_LIBRARIES(manta ${CMAKE_THREAD_LIBS_INIT}
+TARGET_LINK_LIBRARIES(manta ${CMAKE_THREAD_LIBS_INIT}
+ ${OPENGL_LIBRARIES}
+ ${X11_LIBRARIES}
+ -lm)
+
+ADD_EXECUTABLE(afr afr.cc)
+TARGET_LINK_LIBRARIES(afr Manta_Engine
+ Manta_UserInterface
+ Manta_Model
+ Manta_Image
+ Manta_Interface
+ Manta_Core
+ Manta_Core_XUtils
+ SCIRun_Core)
+
+TARGET_LINK_LIBRARIES(afr ${CMAKE_THREAD_LIBS_INIT}
${OPENGL_LIBRARIES}
${X11_LIBRARIES}
-lm)
Copied: branches/AFR/StandAlone/afr.cc (from r553,
branches/AFR/StandAlone/manta.cc)
==============================================================================
--- branches/AFR/StandAlone/manta.cc (original)
+++ branches/AFR/StandAlone/afr.cc Sat Sep 17 18:56:32 2005
@@ -154,7 +154,7 @@
throw InternalError("default image not found", __FILE__, __LINE__ );
if(!rtrt->selectLoadBalancer("workqueue"))
throw InternalError("default load balancer not found", __FILE__,
__LINE__ );
- if(!rtrt->selectImageTraverser("tiled"))
+ if(!rtrt->selectImageTraverser("afr"))
throw InternalError("default image traverser not found", __FILE__,
__LINE__ );
if(!rtrt->selectPixelSampler("singlesample"))
throw InternalError("default pixel sampler not found", __FILE__,
__LINE__ );
Modified: branches/AFR/StandAlone/combinestreams.cpp
==============================================================================
--- branches/AFR/StandAlone/combinestreams.cpp (original)
+++ branches/AFR/StandAlone/combinestreams.cpp Sat Sep 17 18:56:32 2005
@@ -775,7 +775,7 @@
glutInitWindowSize(globals.width,globals.height);
char windowname[255];
- sprintf(windowname,"Sample Stream %3.1f viewer", STREAM_VERSION);
+ sprintf(windowname,"Sample Stream %s viewer", STREAM_VERSION);
glutCreateWindow(windowname);
glutDisplayFunc(display);
glutReshapeFunc(myReshape);
- [MANTA] r554 - in branches/AFR: Engine/Control Engine/ImageTraversers StandAlone, abe, 09/17/2005
Archive powered by MHonArc 2.6.16.