LAMMP
4.2.0
Lamina High-Precision Arithmetic Library
载入中...
搜索中...
未找到
mparam.h
浏览该文件的文档.
1
/**
2
* Copyright (C) 2026 HJimmyK(Jericho Knox)
3
*
4
* This file is part of LAMMP.
5
*
6
* LAMMP is free software: you can redistribute it and/or modify it under
7
* the terms of the GNU Lesser General Public License (LGPL) as published
8
* by the Free Software Foundation; either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* This program is distributed WITHOUT ANY WARRANTY.
12
*
13
* See <https://www.gnu.org/licenses/>.
14
*/
15
16
#ifndef __LAMMP_MPARAM_H__
17
#define __LAMMP_MPARAM_H__
18
19
// 默认线程局部栈大小(不可变更),单位为字节
20
#define LAMMP_DEFAULT_STACK_SIZE (320 * 1024)
21
22
// 线程局部内存池大小(可以为0,表示不使用线程局部内存池),单位为字节
23
#define LAMMP_POOL_SIZE (512 * 1024)
24
25
// 除法阈值:当操作数规模超过此值时,使用分治除法算法
26
#define DIV_DIVIDE_THRESHOLD 50
27
// 乘法逆元L阈值:用于选择乘法逆元计算策略的临界值
28
#define DIV_MULINV_L_THRESHOLD 477
29
// 乘法逆元N阈值:用于选择乘法逆元计算策略的临界值
30
#define DIV_MULINV_N_THRESHOLD 1736
31
32
// 牛顿迭代求逆阈值:超过此规模使用牛顿迭代法求逆
33
#define INV_NEWTON_THRESHOLD 21
34
// 梅森变换求逆阈值:超过此规模使用梅森变换法求逆
35
#define INV_MODM_THRESHOLD 734
36
37
// 梅森变换乘法逆元阈值:超过此规模选择梅森变换计算乘法逆元
38
#define DIV_MULINV_MODM_THRESHOLD 477
39
40
// 牛顿迭代开方阈值:超过此规模使用牛顿迭代法开方
41
#define SQRT_NEWTON_THRESHOLD 50
42
// 梅森变换开方阈值:超过此规模选择梅森变换计算
43
#define SQRT_NEWTON_MODM_THRESHOLD 734
44
45
// Toom-22乘法阈值:超过此规模使用Toom-22乘法
46
#define MUL_TOOM22_THRESHOLD 20
47
// Toom-X2乘法阈值:较短乘数小于此值使用Toom-X2不平衡乘法
48
#define MUL_TOOMX2_THRESHOLD 30
49
// Toom-33乘法阈值:超过此规模使用Toom-33乘法
50
#define MUL_TOOM33_THRESHOLD 65
51
// Toom-44乘法阈值:超过此规模使用Toom-44乘法
52
#define MUL_TOOM44_THRESHOLD 581
53
// FFT乘法阈值:超过此规模使用快速傅里叶变换(FFT)乘法
54
#define MUL_FFT_THRESHOLD 2316
55
56
// 低位乘法阈值:低于此规模使用朴素乘法
57
#define MULLO_BASECASE_THRESHOLD 20
58
// 低位除法阈值:低于此规模使用不平衡分治乘法
59
#define MULLO_DC_THRESHOLD 11238
60
61
// 精确逆元阈值:高于此规模使用牛顿迭代法
62
#define BNINV_NEWTON_THRESHOLD 20
63
64
// 费马变换阈值:低于此规模使用直接乘法而不再进行递归
65
#define MUL_FFT_MODF_THRESHOLD 477
66
67
// 转字符串除法阈值:字符串转换时选择除法算法的临界值
68
#define TO_STR_DIVIDE_THRESHOLD 20
69
// 转字符串基数幂阈值:字符串转换时基数幂计算的策略选择临界值
70
#define TO_STR_BASEPOW_THRESHOLD 30
71
// 从字符串解析除法阈值:字符串解析时选择除法算法的临界值
72
#define FROM_STR_DIVIDE_THRESHOLD 45
73
// 从字符串解析基数幂阈值:字符串解析时基数幂计算的策略选择临界值
74
#define FROM_STR_BASEPOW_THRESHOLD 100
75
76
// L1缓存大小,请将此值设置为实际单核CPU的L1缓存大小(字节数)
77
// 8192 字节通常远远小于现代CPU的L1缓存大小,主要为分块缓存大小考虑
78
#define L1_CACHE_SIZE 8192
79
80
// L2缓存大小,请将此值设置为实际单核CPU的L2缓存大小(字节数)
81
// 1Mb 字节是一个相对保守的数值
82
#define L2_CACHE_SIZE (1ull << 20)
83
84
#ifndef LIMB_BYTES
85
#define LIMB_BYTES 8
86
#endif
87
88
// L1缓存分块大小
89
#define PART_SIZE (L1_CACHE_SIZE / LIMB_BYTES / 2)
90
91
// 2x2矩阵乘法选择STRASSEN算法的阈值
92
#define MAT22_MUL_STRASSEN_THRESHOLD 60
93
94
// 2x2矩阵平方选择STRASSEN算法的阈值
95
#define MAT22_SQR_STRASSEN_THRESHOLD 50
96
97
// 幂运算中,底数长度为 1 的幂运算指数阈值,低于此阈值使用连乘法
98
#define POW_1_EXP_THRESHOLD 10
99
100
// 幂运算中,指数大于此值可能使用win2算法
101
#define POW_WIN2_EXP_THRESHOLD 50
102
103
// 幂运算中,底数长度大于此值可能使用win2算法
104
#define POW_WIN2_N_THRESHOLD 400
105
106
// 因子累乘中,因子数量低于此阈值则使用朴素连乘
107
#define FACTORS_MUL_N_THRESHOLD 30
108
109
// 排列数计算中,nPr直线分割阈值
110
#define PERMUTATION_USHORT_K_THRESHOLD 18
111
#define PERMUTATION_USHORT_B_THRESHOLD 21164
112
#define PERMUTATION_UINT_K_THRESHOLD 136
113
#define PERMUTATION_UINT_B_THRESHOLD 1659975
114
115
// 排列数计算中,结果长度小于此阈值的将使用朴素算法
116
#define BINOMIAL_RN_BASECASE_THRESHOLD 40
117
// 元素累乘中,低于此长度的累乘将使用朴素算法
118
#define ELEM_MUL_BASECASE_THRESHOLD 25
119
120
// 使用梅森乘法计算高位的阈值
121
#define MULHI_MERSENNE_THRESHOLD 477
122
123
// 精确除法中,除数小于此阈值时使用朴素法
124
#define DIVEXACT_BASECASE_THRESHOLD 50
125
// 精确除法中,被除数小于此阈值时使用朴素法
126
#define DIVEXACT_NN_THRESHOLD 350
127
128
129
// cache 一次处理的位图数量
130
#define PRIME_CACHE_BLOCK_NUM 64
131
// cache 中质数最多可能的数量(取决于上面的PRIME_CACHE_BLOCK_NUM)
132
#define PRIME_CACHE_SIZE 1028
133
134
#define MP_UCHAR_MAX (0xff)
135
#define MP_USHORT_MAX (0xffff)
136
#define MP_UINT_MAX (0xffffffff)
137
#define MP_ULONG_MAX (0xffffffffffffffffull)
138
139
#define MP_CHAR_BITS (8)
140
#define MP_SHORT_BITS (16)
141
#define MP_INT_BITS (32)
142
#define MP_LONG_BITS (64)
143
144
#define MP_CHAR_BYTES (1)
145
#define MP_SHORT_BYTES (2)
146
#define MP_INT_BYTES (4)
147
#define MP_LONG_BYTES (8)
148
149
#define ODD_FACTORIAL_SIZE 25
150
151
#define NPR_SHORT_LIMIT (0xffff)
152
#define NPR_INT_LIMIT (0xffffffff)
153
154
#define NCR_SHORT_LIMIT (0xffff)
155
156
// B / 2
157
#define LIMB_B_2 (0x8000000000000000ull)
158
// B / 4
159
#define LIMB_B_4 (0x4000000000000000ull)
160
161
#endif
// __LAMMP_MPARAM_H__
include
lammp
impl
mparam.h
生成于 2026年 七月 12日 星期日 16:40:19 , 为 LAMMP使用
1.9.8