Cac*_*ito 2 c gcc types x86-64
操作系统:Linux(Debian 10)
CC:GCC 8.3
CPU:i7-5775C
在GCC中有一个unsigned __int128/ __int128,但是有什么办法在GCC中有一个uint256_t/ int256_t?
我读过一篇__m256i似乎来自英特尔的文章。我可以包含任何标头来获取它吗?
它像假设一样有用unsigned __int256吗?我的意思是,如果您可以为其分配/比较,比较,按位运算等。
它的等效符号是什么(如果有)?
编辑1:
我做到了:
#include <immintrin.h>
typedef __m256i uint256_t;
Run Code Online (Sandbox Code Playgroud)
并编译。如果可以进行一些操作,请在此处进行更新。
编辑2:
发现问题:
uint256_t m;
ptrdiff_t l = 5;
m = ~((uint256_t)1 << l);
Run Code Online (Sandbox Code Playgroud)
输出:
error: can’t convert a value of type ‘int’ to vector type ‘__vector(4) long long int’ which has different size
m = ~((uint256_t)1 << l);
Run Code Online (Sandbox Code Playgroud)
不,在gcc或任何其他主流x86-64编译器中没有直接/内置的编译器支持256位整数。您需要一个使用随身携带(或模拟)的库1。
__m256i是AVX2 SIMD 4x uint64_t(或像8x这样较窄的元素大小uint32_t)。 它不是256位标量整数类型,您不能将其用于标量运算,__m256i var = 1甚至不会编译。x86 SIMD不支持大于64位的整数,而Intel固有类型(例如__m128i和)__m256i仅用于SIMD。
海合会__int128/ unsigned __int128通常使用标量add/adc,及/或标mul/ imul,因为一般AVX2是扩展精度没有帮助。(仅适用于与元素边界无关的按位AND / OR / XOR之类的东西。)
脚注1:不幸的是C不提供运出从加法/减法,所以它甚至不是方便用C编写 sum = a+b/ carry = sum<a适用于随身携带出来的时候有一个在没有进位,但它更难用C编写和全加器编译器通常将废话汇编不仅在可用的机器上使用本机随身携带指令。很大的整数(例如GMP)的扩展精度库通常用asm编写。
我只在 Pollard Rho 算法中计算“f(x) = (x^2+a) mod n”时才需要“uint256_t”。函数“f”之外的所有变量都是内置类型 __uint128_t。
我为此目的实现了 uint256_t ,如下所示:
typedef __uint128_t uint256_t[2];
Run Code Online (Sandbox Code Playgroud)
然后我实现了计算“f()”所需的函数:
__uint128_t set_128(unsigned long h, unsigned long l);
void set_256(uint256_t d, __uint128_t l, __uint128_t h);
void add_128(uint256_t d, uint256_t x, __uint128_t a);
void add_256(uint256_t d, uint256_t x, uint256_t a);
void shl_256(uint256_t d, long s);
void sqr_128(uint256_t d, __uint128_t x);
several print functions and macros for printing 128bit and 256bit numbers
__uint128_t mod_256(uint256_t x, __uint128_t n);
__uint128_t f(__uint128_t x);
Run Code Online (Sandbox Code Playgroud)
在此要点中找到实现:
https://gist.github.com/Hermann-SW/a20af17ee6666467fe0b5c573dae701d
我确实针对 gmplib 函数对我的代码进行了基准测试,并在所有方面都实现了比 gmplib 的加速(经过大量工作),有关详细信息:
https://www.raspberrypi.org/forums/viewtopic.php ?f=33&t=311893&p=1873552# p1873552
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |