Solve C Library Question: Thrust Max_Element

  • Thread starter Thread starter AIR&SPACE
  • Start date Start date
  • Tags Tags
    Nvidia
Click For Summary
The discussion revolves around issues encountered while using the `thrust::max_element` function from the Thrust library. The user is specifically trying to utilize the version of the function that does not require a binary predicate, but is facing errors when calling the version that does. The error occurs in the implementation of the `max_element` function, particularly on the line where the comparison is made using the binary predicate. The user questions whether the problem lies in the header file, suggesting that the non-predicate version may be missing. Additionally, there is a query regarding the type of `PsiRes`, which is the input for the `max_element` function call. The discussion highlights the need to clarify the function's implementation and the types being used to resolve the issue.
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:
Technology news on Phys.org
I tried a web search "the loss of programming ", and found an article saying that all aspects of writing, developing, and testing software programs will one day all be handled through artificial intelligence. One must wonder then, who is responsible. WHO is responsible for any problems, bugs, deficiencies, or whatever malfunctions which the programs make their users endure? Things may work wrong however the "wrong" happens. AI needs to fix the problems for the users. Any way to...

Similar threads

  • · Replies 30 ·
2
Replies
30
Views
4K
  • · Replies 17 ·
Replies
17
Views
7K
  • · Replies 49 ·
2
Replies
49
Views
12K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 12 ·
Replies
12
Views
5K