Note, I didn't see a difference on my machine for bin/manta even when I cranked up the granularity to 100000. Why is the default so small? It doesn't seem to benefit us at all...
On Dec 16, 2007, at 4:28 PM, boulos@sci.utah.edu wrote:
Author: boulos
Date: Sun Dec 16 17:28:15 2007
New Revision: 1933
Modified:
trunk/Engine/LoadBalancers/WQLoadBalancer.cc
trunk/Engine/LoadBalancers/WQLoadBalancer.h
Log:
Engine/LoadBalancers/WQLoadBalancer.cc
Engine/LoadBalancers/WQLoadBalancer.h
Adding support for specifying granularity on as an argument to the
WorkQueue load balancer (this helps for high sample per pixel
renderings)
Modified: trunk/Engine/LoadBalancers/WQLoadBalancer.cc
= = = = = = = = = =====================================================================
--- trunk/Engine/LoadBalancers/WQLoadBalancer.cc (original)
+++ trunk/Engine/LoadBalancers/WQLoadBalancer.cc Sun Dec 16 17:28:15 2007
@@ -1,7 +1,8 @@
-
+#include <Core/Exceptions/IllegalArgument.h>
+#include <Core/Util/Args.h>
+#include <Core/Util/NotFinished.h>
#include <Engine/LoadBalancers/WQLoadBalancer.h>
#include <Interface/Context.h>
-#include <Core/Util/NotFinished.h>
using namespace Manta;
@@ -10,8 +11,17 @@
return new WQLoadBalancer(args);
}
-WQLoadBalancer::WQLoadBalancer(const vector<string>& /* args */)
-{
+WQLoadBalancer::WQLoadBalancer(const vector<string>& args) {
+ granularity = 5;
+ for (size_t i = 0; i < args.size(); i++) {
+ if (args[i] == "-granularity") {
+ if (!getIntArg(i, args, granularity)) {
+ throw IllegalArgument("WQLoadBalancer -granularity", i, args);
+ }
+ } else {
+ throw IllegalArgument("WQLoadBalancer", i, args);
+ }
+ }
}
WQLoadBalancer::~WQLoadBalancer()
@@ -38,23 +48,23 @@
}
void WQLoadBalancer::setupDisplayChannel(SetupContext& context,
- int numAssignments)
+ int numAssignments)
{
ChannelInfo* ci = channelInfo[context.channelIndex];
ci->numAssignments = numAssignments;
- ci->workq.refill(ci->numAssignments, context.numProcs, 5);
+ ci->workq.refill(ci->numAssignments, context.numProcs, granularity);
}
void WQLoadBalancer::setupFrame(const RenderContext& context)
{
if(context.proc == 0){
ChannelInfo* ci = channelInfo[context.channelIndex];
- ci->workq.refill(ci->numAssignments, context.numProcs, 5);
+ ci->workq.refill(ci->numAssignments, context.numProcs, granularity);
}
}
bool WQLoadBalancer::getNextAssignment(const RenderContext& context,
- int& s, int& e)
+ int& s, int& e)
{
ChannelInfo* ci = channelInfo[context.channelIndex];
return ci->workq.nextAssignment(s, e);
Modified: trunk/Engine/LoadBalancers/WQLoadBalancer.h
= = = = = = = = = =====================================================================
--- trunk/Engine/LoadBalancers/WQLoadBalancer.h (original)
+++ trunk/Engine/LoadBalancers/WQLoadBalancer.h Sun Dec 16 17:28:15 2007
@@ -17,10 +17,10 @@
virtual void setupBegin(const SetupContext&, int numChannels);
virtual void setupDisplayChannel(SetupContext& context,
- int numAssignments);
+ int numAssignments);
virtual void setupFrame(const RenderContext& context);
virtual bool getNextAssignment(const RenderContext& context,
- int& start, int& end);
+ int& start, int& end);
static LoadBalancer* create(const vector<string>& args);
private:
@@ -34,6 +34,7 @@
int numAssignments;
};
vector<ChannelInfo*> channelInfo;
+ int granularity;
};
}
Archive powered by MHonArc 2.6.16.