我(主要是为了好玩)尝试使用 Java 的 Vector API 编写一个 SHA-256 摘要函数。我使用比特币的以下 AVX2 实现作为参考:
我已经能够做到使用 shuffle 内在函数的地步:return _mm256_shuffle_epi8(ret, _mm256_set_epi32(0x0C0D0E0FUL, 0x08090A0BUL, 0x04050607UL, 0x00010203UL, 0x0C0D0E0FUL, 0x08090A0BUL, 0x04050607UL, 0x00010203UL));
.
我看到 Java Vector API 提供了一个VectorShuffle
类和该类的rearrange
方法,Vector
但 API 文档似乎从索引的角度而不是掩码的角度接近洗牌。
_mm256_shuffle_epi8
所以我的问题是 - 如何使用 Java 的矢量 API复制(尽可能接近)内在函数的行为?
更新:我刚刚意识到 AVX2 SHA-256 比特币实现似乎是双 SHA-256 实现。这让事情变得复杂...