使用 AVX 模拟 32 字节的移位

2024-01-04

我正在将使用 SSE2 内在函数编写的矢量化代码迁移到 AVX2 内在函数。

令我非常失望的是,我发现班次指令_mm256_slli_si256 and _mm256_srli_si256仅分别对 AVX 寄存器的两半进行操作,并在中间引入零。 (这与_mm_slli_si128 and _mm_srli_si128处理整个 SSE 寄存器。)

你能给我推荐一个简短的替代品吗?

UPDATE:

_mm256_slli_si256有效地实现了

_mm256_alignr_epi8(A, _mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 3, 0)), N)

or

_mm256_slli_si256(_mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 3, 0)), N)

对于大于 16 字节的移位。

但问题仍然是_mm256_srli_si256.


根据不同的输入,我收集了这些解决方案。跨越通道间障碍的关键是对齐指令,_mm256_alignr_epi8.

_mm256_slli_si256(A,N)

_mm256_alignr_epi8(A, _mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 2, 0)), 16 - N)

N = 16

_mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 2, 0))

16

_mm256_slli_si256(_mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 2, 0)), N - 16)

_mm256_srli_si256(A,N)

_mm256_alignr_epi8(_mm256_permute2x128_si256(A, A, _MM_SHUFFLE(2, 0, 0, 1)), A, N)

N = 16

_mm256_permute2x128_si256(A, A, _MM_SHUFFLE(2, 0, 0, 1))

16

_mm256_srli_si256(_mm256_permute2x128_si256(A, A, _MM_SHUFFLE(2, 0, 0, 1)), N - 16)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 AVX 模拟 32 字节的移位 的相关文章

  • 是否有与 posix_memalign 对应的 C++ 版本?

    当我打电话时posix memalign http man7 org linux man pages man3 posix memalign 3 html为类型的对象分配对齐的内存Foo在我的 C 代码中 我需要做一个reinterpret
  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 当一组凭据下的计划任务启动的进程在另一组凭据下运行另一个程序时,Windows 是否有限制

    所以我有一个简单的例子 其中我有应用程序 A 它对用户 X 本地管理员 有一些硬编码的凭据 然后它使用硬编码的绝对路径启动带有这些凭据的应用程序 B A 和 B 以及 dotnet 控制台应用程序 但是它们不与控制台交互 只是将信息写入文件
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • 检测到严重错误 c0000374 - C++ dll 将已分配内存的指针返回到 C#

    我有一个 c dll 它为我的主 c 应用程序提供一些功能 在这里 我尝试读取一个文件 将其加载到内存 然后返回一些信息 例如加载数据的指针和内存块的计数到 c Dll 成功将文件读取到内存 但在返回主应用程序时 程序由于堆损坏而崩溃 检测
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 这个可变参数模板示例有什么问题?

    基类是 include

随机推荐

  • 如何允许“dompurify”中的 iframe 标记包括其所有属性

    I want dompurify允许 iframe 标签 我添加iframe作为例外 ADD TAGS 但这消除了它的一些属性 我希望所有属性都在那里 div div
  • 我的 XDeclaration 在哪里?

    由于某种原因 以下代码生成不包含声明的 XML XDocument xDocument new XDocument new XDeclaration 1 0 utf 8 yes new XElement project new XAttri
  • 如何在 CRM 2011 中以编程方式(通过插件)获取 CRMWRPCToken 和 CRMWRPCTokenTimeStamp?

    伙计们 我使用 CRM 2011 我需要使用 C 插件通过附件 GUID 自动生成实体记录中附件的下载链接 这个链接看起来像这样 SERVER ORGANIZATION NAME Activities Attachment download
  • 适用于 Windows Phone 7.1 和 F# 3.0 的 FSharp.Core

    F 2 0 发行版有一个为 WindowsPhone 7 1 Silverlight 4 编译的 FSharp Core 版本 但 F 3 0 没有 并且便携式版本仅支持 Silverlight 5 或 Windows Phone 8 是否
  • 设计简单静态类型语言的类型系统(在 Haskell 中)

    我一直在考虑为命令式静态类型语言编写一个解释器 以习惯函数式编程和 Haskell 但是我心里从来没有真正有一个清晰的语法 这常常导致代码不令人满意 并且冲动重写一切 所以我来这里寻求帮助 我应该如何设计一个相对简单但可扩展的类型系统 我想
  • 如何强制 QLocale::system 更改

    我需要经常测试我的应用程序翻译为非英语语言 而仅仅为了进行这个简单的检查而更改整个操作系统语言是非常不舒服的 例如 如何使用环境变量更改 Qt 检测到的系统语言 或使用命令行参数 我尝试改变LANG LANGUAGE环境变量 但是没有任何作
  • 需要一个例子来表明默认构造函数不是继承的

    我知道默认构造函数不是继承的 如中所述n3337 http www open std org jtc1 sc22 wg21 docs papers 2012 n3337 pdf 那里有一个例子 struct B2 B2 int 13 int
  • tippy.js 工具提示不响应 CSS 样式

    我的浏览器使用tippy js 直到今天早上它们都工作正常 突然间 它们不会响应任何 CSS 样式 而只是恢复为带有边框半径的默认深灰色背景 不过 它们会对脚本中的更改做出响应 例如让它们跟随光标 这是脚本 我尝试重新安装很多脚本 但我不知
  • PropertyInfo.SetValue 对象与目标类型不匹配

    我有一个类似的错误this one https stackoverflow com questions 755646 setvalue on propertyinfo instance error object does not match
  • NewRelic 流和 writeHeaders

    我们目前正在评估 New Relic 有一个跟踪元素 我不确定我是否正确理解 WPF 客户端和 WCF 后端 它通常显示 stream some url writeheaders 我的猜测是实际将数据传输到服务器 但是我不确定为什么它说 w
  • 如何在 swift 3.0 中创建具有自定义 UI 的选项卡栏

    i want to create one tab bar from storyboard and i create it but when click on tab bar at that time image is not showing
  • RabbitMQ:erl.exe 占用高 CPU 使用率

    我已经在我的应用程序中实现了rabbitmq 它在Windows Server 2008服务器上运行 问题是erl exe占用很高的CPU使用率 有时它达到40 45 的CPU使用率 即使在理想情况下 不处理任何队列时 至少需要 4 15
  • 将 fontawesome 图标添加到 select2 V4 下拉项中

    我正在尝试在 Select2 v4 下拉项中显示 fontawesome 图标 但下拉菜单显示的是 html 而不是生成实际的图标 此方法适用于 select2 V3 但似乎不适用于 v4 任何帮助表示赞赏 谢谢 HTML div clas
  • 为什么word2Vec使用余弦相似度?

    我一直在阅读有关 Word2Vec 的论文 例如this one https papers nips cc paper 5021 distributed representations of words and phrases and th
  • 相等字符串比较失败

    经过几个小时的调试 我终于确定 由于某种原因 在运行我的小脚本的特定网络服务器上 两个相等的字符串显然被解释为彼此不相等 这对我来说绝对没有意义 因为我尝试使用 和 strcmp 进行比较 虽然此代码块在我的主机上完美运行 但运行我的脚本的
  • 如何在 Powershell 中向 Azure AAD 应用程序授予管理员同意?

    我正在尝试使用 Azure Active Directory 对 Azure Web 应用程序进行身份验证 到目前为止 我已采取以下步骤 1 通过Azure门户 我在AAD中创建了应用程序注册 并按照以下说明将其分配给Web应用程序here
  • Java 初学者(循环)- 缺少 return 语句

    import java util Scanner public class Vending public double vend double balance Scanner in new Scanner System in balance
  • 更改绘图中的线条粗细

    我有一些数据 theData lt structure list matter date structure c 16921 16940 16941 16944 16947 16976 17013 16921 16976 17013 169
  • 在 Swift 中使用 NSDate 组件

    我有一个日期需要分成一些部分 例如 let components NSCalendarUnit CalendarUnitDay NSCalendarUnit CalendarUnitHour let date calendar compon
  • 使用 AVX 模拟 32 字节的移位

    我正在将使用 SSE2 内在函数编写的矢量化代码迁移到 AVX2 内在函数 令我非常失望的是 我发现班次指令 mm256 slli si256 and mm256 srli si256仅分别对 AVX 寄存器的两半进行操作 并在中间引入零