Text archives Help
- From: bigler@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r476 - trunk/Engine/ImageTraversers
- Date: Tue, 16 Aug 2005 16:33:16 -0600 (MDT)
Author: bigler
Date: Tue Aug 16 16:33:15 2005
New Revision: 476
Modified:
trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.cc
trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.h
Log:
DissolveTiledImageTraverser.cc
Seed each thread with a random starting point to get rid of streaks
caused by all the threads starting at the same point.
DissolveTiledImageTraverser.h
More comments on the values suitable to next_tile.
Modified: trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.cc
==============================================================================
--- trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.cc (original)
+++ trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.cc Tue Aug 16
16:33:15 2005
@@ -1,5 +1,6 @@
#include <Engine/ImageTraversers/DissolveTiledImageTraverser.h>
+#include <Core/Math/CheapRNG.h>
#include <Core/Exceptions/IllegalArgument.h>
#include <Core/Exceptions/InternalError.h>
#include <Core/Util/Args.h>
@@ -106,6 +107,11 @@
unsigned int numTiles = numAssignments/context.numProcs;
unsigned int numTiles_leftover = numAssignments%context.numProcs;
+ // We need to seed each thread with a different seed point randomly
+ // to give it a more mixed up look.
+ CheapRNG rng;
+ rng.seed(1);
+
// Try an educated guess for the tiles per pass
for(size_t i = 0; i < per_thread_data.size(); ++i) {
ChannelContext& cdata =
per_thread_data[i].channel_data[context.channelIndex];
@@ -114,8 +120,10 @@
if (per_thread_data.size()-i >= numTiles_leftover)
cdata.numTiles++;
cdata.tiles_per_pass = cdata.numTiles/iters_per_frame;
- // Inialize the random number stuff.
- cdata.next_tile = 1;
+ // Inialize the random number stuff. Since we are using the
+ // modulous we need to add 1 to get the range from [0,numTiles-1]
+ // to [1,numTiles].
+ cdata.next_tile = rng.randInt()%cdata.numTiles + 1;
// Figure out the mask
int num_bits = numBinaryDigits(cdata.numTiles);
if (num_bits > 32)
Modified: trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.h
==============================================================================
--- trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.h (original)
+++ trunk/Engine/ImageTraversers/DissolveTiledImageTraverser.h Tue Aug 16
16:33:15 2005
@@ -55,7 +55,10 @@
// This is the mask for the random number generator.
unsigned int rng_mask;
// Which tile to start on next (since this is a framed
- // implementation).
+ // implementation). Remember this number is in the range of
+ // [1,numTiles], so you should subtract one when you want to use
+ // it. The reason is that the computeNextSample doesn't work
+ // for 0 (and you want that value).
unsigned int next_tile;
// This tells us how many tiles to work on for a given thread/context
unsigned int numTiles;
- [MANTA] r476 - trunk/Engine/ImageTraversers, bigler, 08/16/2005
Archive powered by MHonArc 2.6.16.