Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 77 additions & 13 deletions src/simd/dispatch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,60 @@ namespace rabitqlib::simd {
throw std::runtime_error(std::string(feature_name) + " requires AVX2/FMA or AVX512 support");
}

static float missing_excode_ip(const float*, const uint8_t*, size_t) {
missing_feature("excode ip functions");
}

static void missing_flip_sign(const uint8_t*, float*, size_t) {
missing_feature("sign flip");
}

static void missing_kacs_walk(float*, size_t) {
missing_feature("FhtKacRotator");
}

static void missing_scalar_quantize_uint8(uint8_t*, const float*, size_t, float, float) {
missing_feature("uint8 quantize");
}

static void missing_scalar_quantize_uint16(uint16_t*, const float*, size_t, float, float) {
missing_feature("uint16 quantize");
}

static void missing_pack_excode(const uint8_t*, uint8_t*, size_t) {
missing_feature("excode packing");
}

static void missing_new_transpose_bin(const uint16_t*, uint64_t*, size_t, size_t) {
missing_feature("new transpose bin");
}

static void missing_new_transpose_bin_512(const uint8_t*, uint64_t*, size_t, size_t) {
missing_feature("new_transpose_bin_512");
}

static float missing_mask_ip_x0_q(const float*, const uint64_t*, size_t) {
missing_feature("mask ip x0 q");
}

static void missing_fastscan_accumulate(const uint8_t*, const uint8_t*, uint16_t*, size_t) {
missing_feature("fastscan accumulate");
}

static void missing_fastscan_transfer_lut_hacc(const uint16_t*, size_t, uint8_t*) {
missing_feature("fastscan high-accuracy LUT transfer");
}

static void missing_fastscan_accumulate_hacc(const uint8_t*, const uint8_t*, int32_t*, size_t) {
missing_feature("fastscan high-accuracy accumulate");
}

static float missing_warmup_ip_x0_q_512(
const uint64_t*, const uint64_t*, float, float, size_t, size_t
) {
missing_feature("warmup_ip_x0_q_512");
}

ExcodeIpTable resolve_excode_ip_table() {
if (cpu::has_avx512_core()) {
return {
Expand All @@ -44,7 +98,17 @@ ExcodeIpTable resolve_excode_ip_table() {
excode_ipimpl::ip16_fxu8_avx2,
};
} else {
missing_feature("excode ip functions");
return {
missing_excode_ip,
missing_excode_ip,
missing_excode_ip,
missing_excode_ip,
missing_excode_ip,
missing_excode_ip,
missing_excode_ip,
missing_excode_ip,
missing_excode_ip,
};
}
}

Expand All @@ -55,7 +119,7 @@ const FlipSignFn kFlipSignFn = [] {
} else if (cpu::has_avx2()) {
return flip_sign_avx2;
} else {
missing_feature("sign flip");
return missing_flip_sign;
}
}();

Expand All @@ -66,7 +130,7 @@ const KacsWalkFn kKacsWalkFn = [] {
} else if (cpu::has_avx2()) {
return kacs_walk_avx2;
} else {
missing_feature("FhtKacRotator");
return missing_kacs_walk;
}
}();

Expand All @@ -77,7 +141,7 @@ const ScalarQuantizeUint8Fn kScalarQuantizeUint8Fn = [] {
} else if (cpu::has_avx2()) {
return scalar_quantize_uint8_avx2;
} else {
missing_feature("uint8 quantize");
return missing_scalar_quantize_uint8;
}
}();

Expand All @@ -88,7 +152,7 @@ const ScalarQuantizeUint16Fn kScalarQuantizeUint16Fn = [] {
} else if (cpu::has_avx2()) {
return scalar_quantize_uint16_avx2;
} else {
missing_feature("uint16 quantize");
return missing_scalar_quantize_uint16;
}
}();

Expand All @@ -100,7 +164,7 @@ static PackExcodeFn resolve_pack_excode_fn(PackExcodeFn avx512_fn, PackExcodeFn
} else if (cpu::has_avx2()) {
return avx2_fn;
} else {
missing_feature("excode packing");
return missing_pack_excode;
}
}

Expand Down Expand Up @@ -182,7 +246,7 @@ const NewTransposeBinFn kNewTransposeBinFn = [] {
} else if (cpu::has_avx2()) {
return simd::new_transpose_bin_avx2;
} else {
simd::missing_feature("new transpose bin");
return simd::missing_new_transpose_bin;
}
}();

Expand All @@ -193,7 +257,7 @@ const NewTransposeBin512Fn kNewTransposeBin512Fn = [] {
} else if (cpu::has_avx2()) {
return simd::new_transpose_bin_512_avx2;
} else {
simd::missing_feature("new_transpose_bin_512");
return simd::missing_new_transpose_bin_512;
}
}();

Expand All @@ -204,7 +268,7 @@ const MaskIpX0QFn kMaskIpX0QFn = [] {
} else if (cpu::has_avx2()) {
return simd::mask_ip_x0_q_avx2;
} else {
simd::missing_feature("mask ip x0 q");
return simd::missing_mask_ip_x0_q;
}
}();

Expand Down Expand Up @@ -285,7 +349,7 @@ const AccumulateFn kAccumulateFn = [] {
} else if (cpu::has_avx2()) {
return simd::accumulate_avx2;
} else {
rabitqlib::simd::missing_feature("fastscan accumulate");
return rabitqlib::simd::missing_fastscan_accumulate;
}
}();

Expand All @@ -296,7 +360,7 @@ const TransferLutHaccFn kTransferLutHaccFn = [] {
} else if (cpu::has_avx2()) {
return simd::transfer_lut_hacc_avx2;
} else {
rabitqlib::simd::missing_feature("fastscan high-accuracy LUT transfer");
return rabitqlib::simd::missing_fastscan_transfer_lut_hacc;
}
}();

Expand All @@ -307,7 +371,7 @@ const AccumulateHaccFn kAccumulateHaccFn = [] {
} else if (cpu::has_avx2()) {
return simd::accumulate_hacc_avx2;
} else {
rabitqlib::simd::missing_feature("fastscan high-accuracy accumulate");
return rabitqlib::simd::missing_fastscan_accumulate_hacc;
}
}();

Expand Down Expand Up @@ -344,7 +408,7 @@ const WarmupIpX0Q512Fn kWarmupIpX0Q512Fn = [] {
} else if (rabitqlib::cpu::has_avx2()) {
return rabitqlib::simd::warmup_ip_x0_q_512_avx2;
} else {
rabitqlib::simd::missing_feature("warmup_ip_x0_q_512");
return rabitqlib::simd::missing_warmup_ip_x0_q_512;
}
}();

Expand Down