예제 #1
0
    double performance(std::vector<int> dim)
    {
        Coord<2> gridDim(dim[0], dim[1]);
        int maxSteps = dim[2];
        int messageSize = 27;

        double seconds;
        {
            ScopedTimer t(&seconds);

            Initializer<DataflowTestModel> *initializer = new DataflowTestInitializer(gridDim, maxSteps, messageSize);
            ReorderingUnstructuredGrid<UnstructuredGrid<DataflowTestModel> > grid(initializer->gridBox());
            initializer->grid(&grid);
            int endX = initializer->gridDimensions().x();

            Region<1> region;
            region << initializer->gridBox();
            AdjacencyPtr adjacency = initializer->getAdjacency(region);

            DummyHood hood(endX, adjacency);

            DataflowTestModel *cells = grid.data();

            int maxSteps = initializer->maxSteps();
            for (int t = 0; t < maxSteps; ++t) {
                for (int i = 0; i < endX; ++i) {
                    hood.setIndex(i);
                    cells[i].update(hood, i);
                }

                hood.swapMessages();
            }
        }

        double latticeUpdates = 1.0 * gridDim.prod() * maxSteps;
        double glups = latticeUpdates / seconds * 1e-6;

        return glups;
    }