Select
Applicability
Product |
Supported |
|---|---|
Atlas 350 Accelerator Card |
√ |
x |
|
x |
|
x |
|
x |
|
x |
|
x |
Function Usage
Selects elements from the two given source operands src0 and src1 based on the bit values of mask to obtain the destination operand dst. The selection rule is as follows: When the bit of mask is 1, the number in the corresponding position of src0 is selected. When the bit of mask is 0, the number in the corresponding position of src1 is selected.
Prototype
__simd_callee__ inline void Select(MaskReg& dst, MaskReg& src0, MaskReg& src1, MaskReg& mask);
Parameters
Parameter |
Description |
|---|---|
dst |
Destination operand. |
src0 |
Source operand. |
src1 |
Source operand. |
mask |
It controls the selection of src0 or src1. |
Returns
None
Restrictions
None
Examples
template <typename T>
__simd_vf__ inline void SelectVF(__ubuf__ T* dstAddr, __ubuf__ T* srcAddr, uint32_t count, uint32_t oneRepeatSize, uint16_t repeatTimes)
{
AscendC::Reg::RegTensor<T> srcReg;
AscendC::Reg::MaskReg maskFull = AscendC::Reg::CreateMask<T, AscendC::Reg::MaskPattern::ALL>();
AscendC::Reg::MaskReg maskNone = AscendC::Reg::CreateMask<T, AscendC::Reg::MaskPattern::ALLF>();
AscendC::Reg::MaskReg newMask;
AscendC::Reg::MaskReg mask;
AscendC::Reg::Select(newMask, maskFull, maskNone, maskFull);
for (uint16_t i = 0; i < repeatTimes; ++i) {
mask = AscendC::Reg::UpdateMask<T>(count);
AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize);
AscendC::Reg::Adds(srcReg, srcReg, 0, newMask);
AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, srcReg, mask);
}
}