Solve C Library Question: Thrust Max_Element

  • Thread starter AIR&SPACE
  • Start date
  • Tags
    Nvidia
In summary: This function is not available in the header file and therefore cannot be used. In summary, the conversation is about using the max_element function from the "thrust" library but encountering an error when trying to use the BinaryPredicate comp that is found in one version of the function. The header file extrema.h does not have the required function implemented, making it unavailable for use.
  • #1
AIR&SPACE
101
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
  • #2
Last edited by a moderator:

Related to Solve C Library Question: Thrust Max_Element

What is the purpose of the Solve C Library Question: Thrust Max_Element?

The purpose of this question is to find the maximum element in a given array using the Thrust library in the C programming language.

What is the Thrust library?

The Thrust library is a high-performance parallel programming library developed by NVIDIA for use in C++ and CUDA applications. It provides a collection of data parallel primitives, such as sorting, searching, and reducing, for use on GPUs.

How do I use the Thrust Max_Element function?

To use the Thrust Max_Element function, you first need to include the <thrust/max_element.h> header in your C program. Then, you can call the function on your array, passing in the beginning and end iterators as parameters. The function will return an iterator pointing to the maximum element in the array.

What is the time complexity of the Thrust Max_Element function?

The time complexity of the Thrust Max_Element function is O(n), where n is the size of the array. This is because the function uses a parallel reduction algorithm, which has linear time complexity.

Can I use the Thrust Max_Element function on non-GPU hardware?

Yes, the Thrust library is designed to be portable and can be used on both GPUs and CPUs. However, the performance may vary depending on the hardware and the size of the array.

Similar threads

  • Programming and Computer Science
Replies
30
Views
2K
  • Programming and Computer Science
Replies
17
Views
7K
  • Programming and Computer Science
2
Replies
49
Views
10K
  • Engineering and Comp Sci Homework Help
Replies
1
Views
2K
Back
Top