哪个 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 扩展?的主要内容,如果未能解决你的问题,请参考以下文章

Solaris 音频 API

solaris 上的 ppoll

Java:Solaris 上的 AWT [关闭]

您如何识别 Solaris 上的 Informix 版本?

solaris (libCstd) 上的 std::sort 问题

什么进程正在监听 Solaris 上的某个端口?