C# simd指令之MaskMove

**MaskMove指令说明:**该方法将掩码向量中的每个非零元素对应的源向量中的元素移动到内存地址指定的位置。如果掩码中的元素为零,则对应的内存位置不会被修改。

MaskMove指令接受三个参数(source、mask、address):

**源向量(source):**包含要移动的数据的 128 位向量。

**掩码向量(mask):**也是一个 128 位向量,用于控制哪些元素将被移动到内存地址。掩码中的每个元素(sbyte)将决定相应位置的元素是否被写入内存。如果掩码中的元素为非零值,则对应的元素将被写入;如果为零,则不写入。

**内存地址(address):**指向目标内存位置的指针,将从这里开始写入数据。

示例

将source向量中的元素全部移到tmpData数组中,这样我们将向量拷贝到数组中的时候就可以用到了

cs 复制代码
Random random = new Random();
int size= Vector128<byte>.Count;
byte[] data = new byte[size << 1];
random.NextBytes(data);
byte[] tmpData = new byte[size];
fixed (byte* dataPtr = data, tmpPtr = tmpData)
{
    Vector128<byte> source = *(Vector128<byte>*)dataPtr;
    Vector128<byte> mask = Vector128.Create((byte)255);
    Sse2.MaskMove(source, mask, tmpPtr);
}

如果需要source指定位置的元素不移动,只需要在mask 指定位置的元素设置为0

cs 复制代码
 // 设置mask第一个元素为0 
mask = mask.WithElement(0, (byte)0);
// source的第一个元素将不在移动到tmpData
Sse2.MaskMove(source, mask, tmpPtr);

也可以把向量复制移动到另外的向量,我们就可以实现向量深拷贝

cs 复制代码
Vector128<byte> newVector;
Sse2.MaskMove(source, mask, (byte*)&newVector);
相关推荐
微尘hjx1 小时前
【Deep-OC-SORT 03】多轨迹算法Deep-OC-SORT-卡尔曼滤波预测过程
算法·yolo·目标跟踪·ultralytics·车跟踪·轨迹算法·deep-oc-sort
老师我太想进步了20263 小时前
【数据结构-3】算法美学之降复杂度
数据结构·算法
机器人零零壹8 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
ZhengEnCi11 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是12 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考12 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
nm_zfyjt14 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
w_zero_one15 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼16 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php