Trait sql_ops::join::no_partitioning_join::CudaHashJoinable
source · [−]pub trait CudaHashJoinable: DeviceCopy + KeyAttribute {
fn build_impl(
hj: &CudaHashJoin<Self>,
join_attr: LaunchableSlice<'_, Self>,
payload_attr: LaunchableSlice<'_, Self>,
stream: &Stream
) -> Result<()>;
fn probe_sum_impl(
hj: &CudaHashJoin<Self>,
join_attr: LaunchableSlice<'_, Self>,
payload_attr: LaunchableSlice<'_, Self>,
result_set: &Mem<u64>,
stream: &Stream
) -> Result<()>;
}
Expand description
Specifies that the implementing type can be used as a join key in
CudaHashJoin
.
CudaHashJoinable
is a trait for which specialized implementations exist
for each implementing type (currently i32 and i64). Specialization is
necessary because each type requires a different CUDA function to be called.
An alternative approach would be to specialize the implementation of
CudaHashJoin
methods for each type. However, this would also require a
default implementation for all non-implemented types that throws an
exception. The benefit would be less code, but currently Rust stable doesn’t
support impl specializations with default implementations.
Rust issue #31844 tracks
the RFC.
Required methods
fn build_impl(
hj: &CudaHashJoin<Self>,
join_attr: LaunchableSlice<'_, Self>,
payload_attr: LaunchableSlice<'_, Self>,
stream: &Stream
) -> Result<()>
fn build_impl(
hj: &CudaHashJoin<Self>,
join_attr: LaunchableSlice<'_, Self>,
payload_attr: LaunchableSlice<'_, Self>,
stream: &Stream
) -> Result<()>
Implements CudaHashJoin::build
for the implementing type.
fn probe_sum_impl(
hj: &CudaHashJoin<Self>,
join_attr: LaunchableSlice<'_, Self>,
payload_attr: LaunchableSlice<'_, Self>,
result_set: &Mem<u64>,
stream: &Stream
) -> Result<()>
fn probe_sum_impl(
hj: &CudaHashJoin<Self>,
join_attr: LaunchableSlice<'_, Self>,
payload_attr: LaunchableSlice<'_, Self>,
result_set: &Mem<u64>,
stream: &Stream
) -> Result<()>
Implements CudaHashJoin::probe_sum
for the implementing type.