转换二元操作#

group transformation_binaryops

类型定义

template<typename L, typename R>
using binary_op_common_type_t = typename binary_op_common_type<L, R>::类型#

二元操作通用类型助手。

枚举

enum class binary_operator : int32_t#

可以对数据执行的二进制操作类型。

值:

enumerator ADD#

运算符 +

enumerator SUB#

操作符 -

enumerator MUL#

操作符 *

enumerator DIV#

运算符 / 使用 lhs 和 rhs 的通用类型

enumerator TRUE_DIV#

在将类型提升为浮点数后的运算符 /

enumerator FLOOR_DIV#

operator // 如果两个参数都是整数,则向负无穷方向取整的整数除法;对于浮点类型,使用地板除法(对于混合整数/浮点参数,使用C++类型提升)。如果需要不同的提升语义,调用者有责任在调用此函数之前手动提升。

enumerator MOD#

操作符 %

enumerator PMOD#

正模运算符 如果余数为负数,则返回 (余数 + 除数) % 除数,否则返回 (被除数 % 除数)

enumerator PYMOD#

运算符 % 但遵循 Python 的负数符号规则

enumerator POW#

lhs ^ rhs

enumerator INT_POW#

int ^ int,用于避免浮点数精度损失。对于负指数返回0。

enumerator LOG_BASE#

以底数为基的对数

enumerator ATAN2#

双参数反正切函数

enumerator SHIFT_LEFT#

运算符 <<

enumerator SHIFT_RIGHT#

操作符 >>

enumerator SHIFT_RIGHT_UNSIGNED#

operator >>> (来自 Java) 逻辑右移。在移位之前转换为无符号值。

enumerator BITWISE_AND#

运算符 &

enumerator BITWISE_OR#

操作符 |

enumerator BITWISE_XOR#

运算符 ^

enumerator LOGICAL_AND#

运算符 &&

enumerator LOGICAL_OR#

运算符 ||

enumerator EQUAL#

操作符 ==

enumerator NOT_EQUAL#

运算符 !=

enumerator LESS#

操作符 <

enumerator GREATER#

操作符 >

enumerator LESS_EQUAL#

运算符 <=

enumerator GREATER_EQUAL#

操作符 >=

enumerator NULL_EQUALS#

当两个操作数都为null时返回true;当一个为null时返回false;当两个都不为null时返回相等的结果

enumerator NULL_NOT_EQUALS#

当两个操作数都为null时返回false;当一个为null时返回true;当两个都不为null时返回不等的结果

enumerator NULL_MAX#

当两个操作数都非空时返回最大值;当其中一个为空时返回非空操作数;当两者都为空时返回无效值

enumerator NULL_MIN#

当两个操作数都不为空时返回最小值;当其中一个为空时返回非空操作数;当两者都为空时返回无效值

enumerator GENERIC_BINARY#

使用输入的ptx代码生成的通用二元运算符

enumerator NULL_LOGICAL_AND#

运算符 && 在 Spark 中的规则:(null, null) 为 null,(null, true) 为 null,(null, false) 为 false,且 (valid, valid) == LOGICAL_AND(valid, valid)

enumerator NULL_LOGICAL_OR#

操作符 || 在Spark中的规则:(null, null) 是 null, (null, true) 是 true, (null, false) 是 null, 并且 (valid, valid) == LOGICAL_OR(valid, valid)

enumerator INVALID_BINARY#

无效操作

函数

std::unique_ptr<column> binary_operation(scalar const &lhs, column_view const &rhs, binary_operator op, data_type output_type, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

在标量和列之间执行二进制操作。

输出包含所有 0 <= i < rhs.size()op(lhs, rhs[i]) 结果。标量是左操作数,列元素是右操作数。在非交换二元操作的情况下,这种区别是显著的。

无论操作符是什么,输出值的有效性是两个操作数有效性的逻辑与,除了NullMin和NullMax(逻辑或)。

Parameters:
  • lhs – 左侧操作数标量

  • rhs – 右侧操作数列

  • op – 二元运算符

  • output_type – 输出列所需的数据类型

  • stream – 用于设备内存操作和内核启动的CUDA流

  • mr – 用于分配返回列的设备内存的设备内存资源

Throws:
  • cudf::logic_error – 如果 output_type 的数据类型不是固定宽度

  • cudf::logic_error – 如果 output_type 的数据类型不是布尔型,用于比较和逻辑操作。

  • cudf::data_type_error – 如果操作不支持 lhsrhs 的类型

Returns:

输出列的类型为 output_type,包含二元操作的结果

std::unique_ptr<column> binary_operation(column_view const &lhs, scalar const &rhs, binary_operator op, data_type output_type, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

在列和标量之间执行二进制操作。

输出包含所有 0 <= i < lhs.size()op(lhs[i], rhs) 结果。列元素是左操作数,标量是右操作数。在非交换二元操作的情况下,这种区分是重要的。

无论操作符是什么,输出值的有效性是两个操作数有效性的逻辑与,除了NullMin和NullMax(逻辑或)。

Parameters:
  • lhs – 左操作数列

  • rhs – 右侧操作数标量

  • op – 二元运算符

  • output_type – 输出列所需的数据类型

  • stream – 用于设备内存操作和内核启动的CUDA流

  • mr – 用于分配返回列的设备内存的设备内存资源

Throws:
  • cudf::logic_error – 如果 output_type 的数据类型不是固定宽度

  • cudf::logic_error – 如果 output_type 的数据类型不是布尔型,用于比较和逻辑操作。

  • cudf::data_type_error – 如果操作不支持 lhsrhs 的类型

Returns:

输出列的类型为 output_type,包含二元操作的结果

std::unique_ptr<column> binary_operation(column_view const &lhs, column_view const &rhs, binary_operator op, data_type output_type, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

在两列之间执行二进制操作。

输出包含所有 0 <= i < lhs.size()op(lhs[i], rhs[i]) 结果

无论操作符是什么,输出值的有效性是两个操作数有效性的逻辑与,除了NullMin和NullMax(逻辑或)。

Parameters:
  • lhs – 左操作数列

  • rhs – 右侧操作数列

  • op – 二元运算符

  • output_type – 输出列所需的数据类型

  • stream – 用于设备内存操作和内核启动的CUDA流

  • mr – 用于分配返回列的设备内存的设备内存资源

Throws:
Returns:

输出列的类型为 output_type,包含二元操作的结果

std::unique_ptr<column> binary_operation(column_view const &lhs, column_view const &rhs, std::string const &ptx, data_type output_type, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

使用用户定义的PTX函数在两列之间执行二进制操作。

输出包含所有 0 <= i < lhs.size()op(lhs[i], rhs[i]) 结果

无论操作符是什么,输出值的有效性是两个操作数有效性的逻辑与

Parameters:
  • lhs – 左操作数列

  • rhs – 右侧操作数列

  • ptx – 包含二进制函数PTX的字符串

  • output_type – 输出列所需的数据类型。假设output_type与PTX代码中函数的输出数据类型兼容。

  • stream – 用于设备内存操作和内核启动的CUDA流

  • mr – 用于分配返回列的设备内存的设备内存资源

Throws:
Returns:

输出列的类型为 output_type,包含二元操作的结果

int32_t binary_operation_fixed_point_scale(binary_operator op, int32_t left_scale, int32_t right_scale)#

计算基于给定二进制运算符 opfixed_point 数字的 scale

Parameters:
  • op – 用于两个fixed_point数字的binary_operator

  • left_scale – 左侧 fixed_point 数字的比例

  • right_scale – 右侧 fixed_point 数字的比例

Returns:

计算得到的fixed_point数的scale

cudf::data_type binary_operation_fixed_point_output_type(binary_operator op, cudf::data_type const &lhs, cudf::data_type const &rhs)#

根据给定的二元运算符 op 计算 data_type 用于 fixed_point 数字

Parameters:
  • op – 用于两个fixed_point数字的binary_operator

  • lhscudf::data_type 左侧 fixed_point 数字的数据类型

  • rhscudf::data_type 右侧的 fixed_point 数字

Returns:

计算得到的cudf::data_typefixed_point数字

变量

template<typename L, typename R>
constexpr bool binary_op_has_common_type_v = detail::binary_op_has_common_type_impl<void, L, R>::value#

检查二元操作类型是否具有共同类型。

template<typename L, typename R, typename = void>
struct binary_op_common_type#
#include <binaryop.hpp>

二元操作通用类型默认值。

template<typename L, typename R>
struct binary_op_common_type<L, R, std::enable_if_t<has_common_type_v<L, R>>>#
#include <binaryop.hpp>

二元操作通用类型特化。

公共类型

using type = std::common_type_t<L, R>#

模板参数的常见类型。

template<typename L, typename R>
struct binary_op_common_type<L, R, std::enable_if_t<is_fixed_point<L>() && cuda::std::is_floating_point_v<R>>>#
#include <binaryop.hpp>

二元操作通用类型特化。

公共类型

using type = L#

模板参数的常见类型。

template<typename L, typename R>
struct binary_op_common_type<L, R, std::enable_if_t<is_fixed_point<R>() && cuda::std::is_floating_point_v<L>>>#
#include <binaryop.hpp>

二元操作通用类型特化。

公共类型

using type = R#

模板参数的常见类型。