哪个 xarch 用于 Solaris 上的 SHA 扩展?
Posted
技术标签:
【中文标题】哪个 xarch 用于 Solaris 上的 SHA 扩展?【英文标题】:Which xarch for SHA extensions on Solaris? 【发布时间】:2017-08-24 23:08:05 【问题描述】:Oracle 最近发布了 Sun Studio 12.6。我们有一个 SHA-1 和 SHA-256 intrinsic based implementation(用于 ARM 和 Intel),我们希望在 Solaris i86 机器上启用扩展。
A.2.115.3 -xarch Flags for x86 提供了 12.6 手册和 -xarch
选项,但它不讨论 SHA。
我们为 SHA 使用哪个 -xarch
选项?
【问题讨论】:
“arch”(如在目标架构中?)和“SHA”(如在哈希家族的过度概括中?)如何关联? @user2864740 - Xarch 用于选择和指令集架构。 SunCC 的-xarch=XXX
类似于 GCC 的 -mXXX
。在 GCC 下,我们可以使用-msha
来启用 ISA 并获得对 SHA 指令的访问权限。我正在为 Sun Studio 和 SunCC 寻找相同的东西。
@user2864740 在这种情况下,“SHA”是对英特尔指令集扩展的引用,用于通过 SHA-1 和 SHA-256 算法计算哈希:software.intel.com/en-us/articles/intel-sha-extensions
【参考方案1】:
如果 Studio 12.6 不支持 SHA 指令集(我强烈怀疑它不支持,因为我在 What's New in the Oracle Developer Studio 12.6 Release 文档中根本找不到以任何形式提到的“SHA”),你'运气不好。
差不多了。
您可以做的是创建自己的内联汇编函数。 See man inline
:
内联(4)
姓名
inline, filename.il - 汇编语言内联模板文件
说明
汇编语言调用指令被它们的副本替换 从内联模板(*.il)获得的对应函数体 文件。
内联模板文件后缀为.il,例如:
% CC foo.il hello.c
内联由编译器的代码生成器完成。
...
示例
请查看 libm.il 或 vis.il 以获取示例。您可以在编译器的 lib/ 目录下找到特定于每个受支持架构的这些库的版本。
...
一个例子can be found here(强调我的):
使用 Sun Studio 编译器和内联汇编代码进行性能调优
...
本文提供了如何衡量性能的演示 一段关键的代码。使用编译器标志的示例和 提供了另一个使用内联汇编代码的示例。比较结果以显示每种方法的优点和差异 接近。
...
示例 8:用于迭代 Mandelbrot 计算的内联汇编代码
知道了所有这些事实,就可以编写内联代码了,如图 示例 8。
.inline mandel_il,0 // x is stored in %xmm0 // y is stored in %xmm1 // 4.0 is stored in %xmm2 // max_int is stored in %rdi // set registers to zero xorps %xmm3, %xmm3 xorps %xmm4, %xmm4 xorps %xmm5, %xmm5 xorps %xmm6, %xmm6 xorps %xmm7, %xmm7 xorq %rax, %rax .loop: // check to see if u2 - v2 > 4.0 movss %xmm5, %xmm7 addss %xmm6, %xmm7 ucomiss %xmm2, %xmm7 jp .exit jae .exit // v = 2 * v * u + y mulss %xmm3, %xmm4 addss %xmm4, %xmm4 addss %xmm1, %xmm4 // u = u2 - v2 + x movss %xmm5, %xmm3 subss %xmm6, %xmm3 addss %xmm0, %xmm3 // u2 = u * u movss %xmm3, %xmm5 mulss %xmm3, %xmm5 // v2 = v * v movss %xmm4, %xmm6 mulss %xmm4, %xmm6 incl %eax cmpl %edi, %eax jl .loop .exit: // end of mandel_il .end
一点都不难。我不得不为我在 Solaris 8 天咨询过的客户编写很多 SPARC 内联汇编器函数,其中一些非常基本 - 有效地单行来包装一条指令。我发誓它们中的一些最终会出现在 Studio 编译器套件的更高版本中(因为我们是由 Sun 自己分包的,这并不奇怪,更不用说其中一些是显而易见的事实 - floor()
和 ceil()
,IIRC ,是其中两个 - 并且应该首先在那里......)
【讨论】:
以上是关于哪个 xarch 用于 Solaris 上的 SHA 扩展?的主要内容,如果未能解决你的问题,请参考以下文章