Solve C Library Question: Thrust Max_Element

  • Thread starter Thread starter AIR&SPACE
  • Start date Start date
  • Tags Tags
    Nvidia
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
1 replies · 3K views
AIR&SPACE
Messages
100
Reaction score
0
So I'm trying to use max_element from the "thrust" library http://developer.nvidia.com/thrust" but am not sure the header file has the function it claims to have.
The header file for max_element can be found http://wiki.thrust.googlecode.com/hg/html/group__extrema.html#ga06e155dabb91848ffd1c5725f8e0ce14"

I am specifically interested in this version of the function:
Code:
template<typename ForwardIterator >
ForwardIterator 	thrust::max_element (ForwardIterator first, ForwardIterator last)

However, when I run my code it breaks when it tries to use the BinaryPredicate comp that is found in this version of the function:
Code:
template<typename ForwardIterator , typename BinaryPredicate >
ForwardIterator 	thrust::max_element (ForwardIterator first, ForwardIterator last, BinaryPredicate comp)

The header file, extrema.h is as follows (Note comment denoting where error occurs):
Code:
/*
 *  Copyright 2008-2011 NVIDIA Corporation
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *//*! \file extrema.h
 *  \brief Host implementations of extrema functions.
 */

#pragma once

#include <thrust/pair.h>

namespace thrust
{
namespace detail
{
namespace host
{

template <typename ForwardIterator, typename BinaryPredicate>
ForwardIterator min_element(ForwardIterator first, 
                            ForwardIterator last,
                            BinaryPredicate comp)
{
    ForwardIterator imin = first;

    for (; first != last; first++)
    {
        if (comp(*first, *imin)) imin = first;
    }

    return imin;
}template <typename ForwardIterator, typename BinaryPredicate>
ForwardIterator max_element(ForwardIterator first, 
                            ForwardIterator last,
                            BinaryPredicate comp)
{
    ForwardIterator imax = first;

    for (; first != last; first++)
    {
        if (comp(*imax, *first)) imax = first; // ERROR OCCURS ON THIS LINE
    }

    return imax;
}template <typename ForwardIterator, typename BinaryPredicate>
thrust::pair<ForwardIterator,ForwardIterator> minmax_element(ForwardIterator first, 
                                                             ForwardIterator last,
                                                             BinaryPredicate comp)
{
    ForwardIterator imin = first;
    ForwardIterator imax = first;

    for (; first != last; first++)
    {
        if (comp(*first, *imin)) imin = first;
        if (comp(*imax, *first)) imax = first;
    }

    return thrust::make_pair(imin, imax);
}

} // end namespace host
} // end namespace detail
} // end namespace thrust

Here is the line where I call the function:
Code:
max_loc = thrust::max_element(PsiRes,(PsiRes+Nx*My));
So is it just me, or is the problem that the version of the function I'm trying to use is missing from the header file?
 
Last edited by a moderator:
on Phys.org