     srand((FLAGS_random_seed < 0) ? curtime : FLAGS_random_seed);
 
     // Create input data
-    std::vector<T> host_image(width * height, 0);
+    std::vector<unsigned char> host_image(width * height, 0);
     for (size_t i = 0; i < width * height; ++i)
-        host_image[i] = (rand() < (RAND_MAX / 4)) ? T(1) : T(0);
-    
-    std::vector<T> host_resultMAPS(width * height, 0);
-
-    inStride = outStride = sizeof(T) * width;
+        host_image[i] = (rand() < (RAND_MAX / 4)) ? 1 : 0;
+    
+    std::vector<unsigned char> host_resultMAPS(width * height, 0);
+
+    inStride = outStride = sizeof(unsigned char) * width;
 
     dev_inImage = &host_image[0];
     dev_outImage = &host_resultMAPS[0];
     
     for (int i = 0; i < FLAGS_repetitions; i++)
     {
-        GameOfLife_CPUTick(dev_inImage, inStride / sizeof(T),
-                           dev_outImage, outStride / sizeof(T), (int)width, (int)height);
+        GameOfLife_CPUTick(dev_inImage, inStride / sizeof(unsigned char),
+                           dev_outImage, outStride / sizeof(unsigned char), (int)width, (int)height);
         
         std::swap(dev_inImage, dev_outImage);
     }

    }
}

template<typename T, int BLOCK_WIDTH, int BLOCK_HEIGHT, int ITEMS_PER_THREAD, int ROWS_PER_THREAD>
__global__ void GameOfLifeTickMMAPS MAPS_MULTIDEF(maps::Window2D<T, BLOCK_WIDTH, BLOCK_HEIGHT, 
                                                                 1, maps::WB_WRAP, ITEMS_PER_THREAD, ROWS_PER_THREAD> inFrame,
                                                  maps::StructuredInjectiveOutput<T, 2, BLOCK_WIDTH, BLOCK_HEIGHT, 1, 
                                                                                  ITEMS_PER_THREAD, ROWS_PER_THREAD> outFrame)
{
    MAPS_MULTI_INITVARS(inFrame, outFrame);

DEFINE_int32(gpuoffset, 0, "Offset the first used GPU ID");
DEFINE_bool(save_images, true, "Save images if regression test failed");

void GameOfLife_CPUTick(const unsigned char *in, size_t inStride, unsigned char *out, size_t outStride, int width, int height)
{
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            int numLiveNeighbors = 0;
            int isLive;

            for (int k = -1; k <= 1; k++)
            {
                for (int m = -1; m <= 1; m++)
                {
                    unsigned char val = in[inStride * maps::Wrap((i + k), height) + maps::Wrap((j + m), width)];
                    if (k == 0 && m == 0)
                        isLive = val;
                    else
