hipcub/block/block_adjacent_difference.hpp Source File# hipCUB: hipcub/block/block_adjacent_difference.hpp Source File hipcubblock block_adjacent_difference.hpp 1 /****************************************************************************** 2 * Copyright (c) 2010-2011, Duane Merrill. All rights reserved. 3 * Copyright (c) 2011-2018, NVIDIA CORPORATION. All rights reserved. 4 * Modifications Copyright (c) 2021-2024, Advanced Micro Devices, Inc. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * * Neither the name of the NVIDIA CORPORATION nor the 14 * names of its contributors may be used to endorse or promote products 15 * derived from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 26 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 ******************************************************************************/ 29 30 #ifndef HIPCUB_BLOCK_BLOCK_AJACENT_DIFFERENCE_HPP_ 31 #define HIPCUB_BLOCK_BLOCK_AJACENT_DIFFERENCE_HPP_ 32 33 #include "../config.hpp" 34 35 BEGIN_HIPCUB_NAMESPACE 36 37 namespace detail 38 { 39 // Trait checks if FlagOp can be called with 3 arguments (a, b, b_index) 40 template<class T, class FlagOp, class = void> 41 struct WithBIndexArg 42 : std::false_type 43 { }; 44 45 template<class T, class FlagOp> 46 struct WithBIndexArg< 47 T, FlagOp, 48 typename std::conditional< 49 true, 50 void, 51 decltype(std::declval<FlagOp>()(std::declval<T>(), std::declval<T>(), 0)) 52 >::type 53 > : std::true_type 54 { }; 55 56 } 57 58 END_HIPCUB_NAMESPACE 59 60 #ifdef __HIP_PLATFORM_AMD__ 61 #include "../backend/rocprim/block/block_adjacent_difference.hpp" 62 #elif defined(__HIP_PLATFORM_NVIDIA__) 63 #include <cub/block/block_adjacent_difference.cuh> 64 #endif 65 66 #endif // HIPCUB_BLOCK_BLOCK_AJACENT_DIFFERENCE_HPP_