Solve C Library Question: Thrust Max_Element

  • Thread starter Thread starter AIR&SPACE
  • Start date Start date
  • Tags Tags
    Nvidia
AI Thread 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
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Thread 'Project Documentation'
Trying to package up a small bank account manager project that I have been tempering on for a while. One that is certainly worth something to me. Although I have created methods to whip up quick documents with all fields and properties. I would like something better to reference in order to express the mechanical functions. It is unclear to me about any standardized format for code documentation that exists. I have tried object orientated diagrams with shapes to try and express the...
Back
Top