首页 > 解决方案 > 使用Java Vector API Shuffle复制_mm256_shuffle_epi8 Intrinsic?

问题描述

我(主要是为了好玩)尝试使用 Java 的 Vector API 编写一个 SHA-256 摘要函数。我使用比特币的以下 AVX2 实现作为参考:

https://github.com/bitcoin/bitcoin/blob/7fcf53f7b4524572d1d0c9a5fdc388e87eb02416/src/crypto/sha256_avx2.cpp

我已经能够做到使用 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 实现。这让事情变得复杂...

标签: javavectorizationsimdavx2project-panama

解决方案


推荐阅读