Exemplo n.º 1
0
 // Create a partition which acts as a proxy to a part of the embedded array.
 // The proxy is assumed to refer to either the left or the right boundary
 // element.
 partition_data(partition_data const& base, std::size_t min_index)
   : data_(base.data_.data()+min_index, 1, buffer_type::reference),
     size_(base.size()),
     min_index_(min_index)
 {
     HPX_ASSERT(min_index < base.size());
 }
Exemplo n.º 2
0
 // Create a partition which acts as a proxy to a part of the embedded array.
 // The proxy is assumed to refer to either the left or the right boundary
 // element.
 partition_data(partition_data const& base, std::size_t min_index)
   : data_(base.data_.data()+min_index, 1, buffer_type::reference,
         hold_reference(base.data_)),      // keep referenced partition alive
     size_(base.size()),
     min_index_(min_index)
 {
     HPX_ASSERT(min_index < base.size());
 }
Exemplo n.º 3
0
    // The partitioned operator, it invokes the heat operator above on all
    // elements of a partition.
    static partition_data heat_part(partition_data const& left,
        partition_data const& middle, partition_data const& right)
    {
        std::size_t size = middle.size();
        partition_data next(size);

        next[0] = heat(left[size-1], middle[0], middle[1]);

        for (std::size_t i = 1; i != size-1; ++i)
            next[i] = heat(middle[i-1], middle[i], middle[i+1]);

        next[size-1] = heat(middle[size-2], middle[size-1], right[0]);

        return next;
    }
Exemplo n.º 4
0
    // The partitioned operator, it invokes the heat operator above on all
    // elements of a partition.
    static partition_data heat_part(partition_data const& left,
        partition_data const& middle, partition_data const& right)
    {
        std::size_t size = middle.size();
        partition_data next(size);

        next[0] = heat(left[size-1], middle[0], middle[1]);

        // Visual Studio requires OMP loop variables to be signed :/
        # pragma omp parallel for
        for (boost::int64_t i = 1; i < boost::int64_t(size-1); ++i)
            next[i] = heat(middle[i-1], middle[i], middle[i+1]);

        next[size-1] = heat(middle[size-2], middle[size-1], right[0]);

        return next;
    }
Exemplo n.º 5
0
    // The partitioned operator, it invokes the heat operator above on all
    // elements of a partition.
    static partition_data heat_part(partition_data const& left,
        partition_data const& middle, partition_data const& right)
    {
        std::size_t size = middle.size();
        partition_data next(size);

        typedef boost::counting_iterator<std::size_t> iterator;

        next[0] = heat(left[size-1], middle[0], middle[1]);

        using namespace hpx::parallel;
        for_each(par, iterator(1), iterator(size-1),
            [&next, &middle](std::size_t i)
            {
                next[i] = heat(middle[i-1], middle[i], middle[i+1]);
            });

        next[size-1] = heat(middle[size-2], middle[size-1], right[0]);

        return next;
    }