Skip to content

Commit 0a558ac

Browse files
committed
use x64 tuned optimal function calls in montgomery_two_pow.h when building for x64. Add montgomery_two_pow_API to the experimental directory so that users can easily call array montgomery two pow (to get the highest throughput)
1 parent 0e0f5c9 commit 0a558ac

File tree

54 files changed

+17091
-81
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+17091
-81
lines changed

montgomery_arithmetic/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ target_sources(hurchalla_montgomery_arithmetic INTERFACE
3939
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/hurchalla/montgomery_arithmetic/detail/MontyQuarterRange.h>
4040
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/hurchalla/montgomery_arithmetic/detail/MontyWrappedStandardMath.h>
4141
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/hurchalla/montgomery_arithmetic/detail/experimental/montgomery_pow_2kary.h>
42+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/hurchalla/montgomery_arithmetic/detail/experimental/montgomery_two_pow_API.h>
4243
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/hurchalla/montgomery_arithmetic/detail/experimental/MontyFullRangeMasked.h>
4344
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/hurchalla/montgomery_arithmetic/detail/experimental/unit_testing_helpers/AbstractMontgomeryForm.h>
4445
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/hurchalla/montgomery_arithmetic/detail/experimental/unit_testing_helpers/AbstractMontgomeryWrapper.h>

montgomery_arithmetic/include/hurchalla/montgomery_arithmetic/detail/experimental/montgomery_two_pow/testbench_all_auto.sh

Lines changed: 24 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,6 @@
77
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
88

99

10-
exit_on_failure () {
11-
if [ $? -ne 0 ]; then
12-
exit 1
13-
fi
14-
}
15-
1610
invoke_test() {
1711
(
1812
set -e
@@ -32,209 +26,160 @@ invoke_test() {
3226

3327

3428

35-
3629
invoke_test 64_quarter_gcc_asm_scalar.txt ./testbench.sh g++ O3 MontgomeryQuarter uint64_t 191 8 22 \
3730
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
38-
exit_on_failure
3931

4032
invoke_test 64_quarter_gcc_asm_array.txt ./testbench.sh g++ O3 MontgomeryQuarter uint64_t 191 8 22 \
4133
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
42-
exit_on_failure
4334

4435
invoke_test 64_quarter_clang_asm_scalar.txt ./testbench.sh clang++ O3 MontgomeryQuarter uint64_t 191 8 22 \
4536
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
46-
exit_on_failure
4737

4838
invoke_test 64_quarter_clang_asm_array.txt ./testbench.sh clang++ O3 MontgomeryQuarter uint64_t 191 8 22 \
4939
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
50-
exit_on_failure
5140

5241
invoke_test 64_quarter_gcc_noasm_scalar.txt ./testbench.sh g++ O3 MontgomeryQuarter uint64_t 191 8 22 \
5342
-DTEST_SCALAR
54-
exit_on_failure
5543

5644
invoke_test 64_quarter_gcc_noasm_array.txt ./testbench.sh g++ O3 MontgomeryQuarter uint64_t 191 8 22 \
5745
-DTEST_ARRAY
58-
exit_on_failure
5946

6047
invoke_test 64_quarter_clang_noasm_scalar.txt ./testbench.sh clang++ O3 MontgomeryQuarter uint64_t 191 8 22 \
6148
-DTEST_SCALAR
62-
exit_on_failure
6349

6450
invoke_test 64_quarter_clang_noasm_array.txt ./testbench.sh clang++ O3 MontgomeryQuarter uint64_t 191 8 22 \
6551
-DTEST_ARRAY
66-
exit_on_failure
6752

6853

6954

7055
invoke_test 64_half_gcc_asm_scalar.txt ./testbench.sh g++ O3 MontgomeryHalf uint64_t 191 8 22 \
7156
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
72-
exit_on_failure
7357

7458
invoke_test 64_half_gcc_asm_array.txt ./testbench.sh g++ O3 MontgomeryHalf uint64_t 191 8 22 \
7559
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
76-
exit_on_failure
7760

7861
invoke_test 64_half_clang_asm_scalar.txt ./testbench.sh clang++ O3 MontgomeryHalf uint64_t 191 8 22 \
7962
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
80-
exit_on_failure
8163

8264
invoke_test 64_half_clang_asm_array.txt ./testbench.sh clang++ O3 MontgomeryHalf uint64_t 191 8 22 \
8365
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
84-
exit_on_failure
8566

8667
invoke_test 64_half_gcc_noasm_scalar.txt ./testbench.sh g++ O3 MontgomeryHalf uint64_t 191 8 22 \
8768
-DTEST_SCALAR
88-
exit_on_failure
8969

9070
invoke_test 64_half_gcc_noasm_array.txt ./testbench.sh g++ O3 MontgomeryHalf uint64_t 191 8 22 \
9171
-DTEST_ARRAY
92-
exit_on_failure
9372

9473
invoke_test 64_half_clang_noasm_scalar.txt ./testbench.sh clang++ O3 MontgomeryHalf uint64_t 191 8 22 \
9574
-DTEST_SCALAR
96-
exit_on_failure
9775

9876
invoke_test 64_half_clang_noasm_array.txt ./testbench.sh clang++ O3 MontgomeryHalf uint64_t 191 8 22 \
9977
-DTEST_ARRAY
100-
exit_on_failure
10178

10279

10380

10481
invoke_test 64_full_gcc_asm_scalar.txt ./testbench.sh g++ O3 MontgomeryFull uint64_t 191 8 22 \
10582
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
106-
exit_on_failure
10783

10884
invoke_test 64_full_gcc_asm_array.txt ./testbench.sh g++ O3 MontgomeryFull uint64_t 191 8 22 \
10985
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
110-
exit_on_failure
11186

11287
invoke_test 64_full_clang_asm_scalar.txt ./testbench.sh clang++ O3 MontgomeryFull uint64_t 191 8 22 \
11388
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
114-
exit_on_failure
11589

11690
invoke_test 64_full_clang_asm_array.txt ./testbench.sh clang++ O3 MontgomeryFull uint64_t 191 8 22 \
11791
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
118-
exit_on_failure
11992

12093
invoke_test 64_full_gcc_noasm_scalar.txt ./testbench.sh g++ O3 MontgomeryFull uint64_t 191 8 22 \
12194
-DTEST_SCALAR
122-
exit_on_failure
12395

12496
invoke_test 64_full_gcc_noasm_array.txt ./testbench.sh g++ O3 MontgomeryFull uint64_t 191 8 22 \
12597
-DTEST_ARRAY
126-
exit_on_failure
12798

12899
invoke_test 64_full_clang_noasm_scalar.txt ./testbench.sh clang++ O3 MontgomeryFull uint64_t 191 8 22 \
129100
-DTEST_SCALAR
130-
exit_on_failure
131101

132102
invoke_test 64_full_clang_noasm_array.txt ./testbench.sh clang++ O3 MontgomeryFull uint64_t 191 8 22 \
133103
-DTEST_ARRAY
134-
exit_on_failure
135104

136105

137106

138107

139108

140109

141110

142-
invoke_test 128_quarter_gcc_asm_scalar.txt ./testbench.sh g++ O3 MontgomeryQuarter __uint128_t 191 8 22 \
111+
invoke_test 128_quarter_gcc_asm_scalar.txt ./testbench.sh g++ O3 MontgomeryQuarter __uint128_t 191 8 40 \
143112
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
144-
exit_on_failure
145113

146-
invoke_test 128_quarter_gcc_asm_array.txt ./testbench.sh g++ O3 MontgomeryQuarter __uint128_t 191 8 22 \
114+
invoke_test 128_quarter_gcc_asm_array.txt ./testbench.sh g++ O3 MontgomeryQuarter __uint128_t 191 8 40 \
147115
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
148-
exit_on_failure
149116

150-
invoke_test 128_quarter_clang_asm_scalar.txt ./testbench.sh clang++ O3 MontgomeryQuarter __uint128_t 191 8 22 \
117+
invoke_test 128_quarter_clang_asm_scalar.txt ./testbench.sh clang++ O3 MontgomeryQuarter __uint128_t 191 8 40 \
151118
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
152-
exit_on_failure
153119

154-
invoke_test 128_quarter_clang_asm_array.txt ./testbench.sh clang++ O3 MontgomeryQuarter __uint128_t 191 8 22 \
120+
invoke_test 128_quarter_clang_asm_array.txt ./testbench.sh clang++ O3 MontgomeryQuarter __uint128_t 191 8 40 \
155121
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
156-
exit_on_failure
157122

158-
invoke_test 128_quarter_gcc_noasm_scalar.txt ./testbench.sh g++ O3 MontgomeryQuarter __uint128_t 191 8 22 \
123+
invoke_test 128_quarter_gcc_noasm_scalar.txt ./testbench.sh g++ O3 MontgomeryQuarter __uint128_t 191 8 40 \
159124
-DTEST_SCALAR
160-
exit_on_failure
161125

162-
invoke_test 128_quarter_gcc_noasm_array.txt ./testbench.sh g++ O3 MontgomeryQuarter __uint128_t 191 8 22 \
126+
invoke_test 128_quarter_gcc_noasm_array.txt ./testbench.sh g++ O3 MontgomeryQuarter __uint128_t 191 8 40 \
163127
-DTEST_ARRAY
164-
exit_on_failure
165128

166-
invoke_test 128_quarter_clang_noasm_scalar.txt ./testbench.sh clang++ O3 MontgomeryQuarter __uint128_t 191 8 22 \
129+
invoke_test 128_quarter_clang_noasm_scalar.txt ./testbench.sh clang++ O3 MontgomeryQuarter __uint128_t 191 8 40 \
167130
-DTEST_SCALAR
168-
exit_on_failure
169131

170-
invoke_test 128_quarter_clang_noasm_array.txt ./testbench.sh clang++ O3 MontgomeryQuarter __uint128_t 191 8 22 \
132+
invoke_test 128_quarter_clang_noasm_array.txt ./testbench.sh clang++ O3 MontgomeryQuarter __uint128_t 191 8 40 \
171133
-DTEST_ARRAY
172-
exit_on_failure
173134

174135

175136

176-
invoke_test 128_half_gcc_asm_scalar.txt ./testbench.sh g++ O3 MontgomeryHalf __uint128_t 191 8 22 \
137+
invoke_test 128_half_gcc_asm_scalar.txt ./testbench.sh g++ O3 MontgomeryHalf __uint128_t 191 8 40 \
177138
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
178-
exit_on_failure
179139

180-
invoke_test 128_half_gcc_asm_array.txt ./testbench.sh g++ O3 MontgomeryHalf __uint128_t 191 8 22 \
140+
invoke_test 128_half_gcc_asm_array.txt ./testbench.sh g++ O3 MontgomeryHalf __uint128_t 191 8 40 \
181141
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
182-
exit_on_failure
183142

184-
invoke_test 128_half_clang_asm_scalar.txt ./testbench.sh clang++ O3 MontgomeryHalf __uint128_t 191 8 22 \
143+
invoke_test 128_half_clang_asm_scalar.txt ./testbench.sh clang++ O3 MontgomeryHalf __uint128_t 191 8 40 \
185144
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
186-
exit_on_failure
187145

188-
invoke_test 128_half_clang_asm_array.txt ./testbench.sh clang++ O3 MontgomeryHalf __uint128_t 191 8 22 \
146+
invoke_test 128_half_clang_asm_array.txt ./testbench.sh clang++ O3 MontgomeryHalf __uint128_t 191 8 40 \
189147
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
190-
exit_on_failure
191148

192-
invoke_test 128_half_gcc_noasm_scalar.txt ./testbench.sh g++ O3 MontgomeryHalf __uint128_t 191 8 22 \
149+
invoke_test 128_half_gcc_noasm_scalar.txt ./testbench.sh g++ O3 MontgomeryHalf __uint128_t 191 8 40 \
193150
-DTEST_SCALAR
194-
exit_on_failure
195151

196-
invoke_test 128_half_gcc_noasm_array.txt ./testbench.sh g++ O3 MontgomeryHalf __uint128_t 191 8 22 \
152+
invoke_test 128_half_gcc_noasm_array.txt ./testbench.sh g++ O3 MontgomeryHalf __uint128_t 191 8 40 \
197153
-DTEST_ARRAY
198-
exit_on_failure
199154

200-
invoke_test 128_half_clang_noasm_scalar.txt ./testbench.sh clang++ O3 MontgomeryHalf __uint128_t 191 8 22 \
155+
invoke_test 128_half_clang_noasm_scalar.txt ./testbench.sh clang++ O3 MontgomeryHalf __uint128_t 191 8 40 \
201156
-DTEST_SCALAR
202-
exit_on_failure
203157

204-
invoke_test 128_half_clang_noasm_array.txt ./testbench.sh clang++ O3 MontgomeryHalf __uint128_t 191 8 22 \
158+
invoke_test 128_half_clang_noasm_array.txt ./testbench.sh clang++ O3 MontgomeryHalf __uint128_t 191 8 40 \
205159
-DTEST_ARRAY
206-
exit_on_failure
207160

208161

209162

210-
invoke_test 128_full_gcc_asm_scalar.txt ./testbench.sh g++ O3 MontgomeryFull __uint128_t 191 8 22 \
163+
invoke_test 128_full_gcc_asm_scalar.txt ./testbench.sh g++ O3 MontgomeryFull __uint128_t 191 8 40 \
211164
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
212-
exit_on_failure
213165

214-
invoke_test 128_full_gcc_asm_array.txt ./testbench.sh g++ O3 MontgomeryFull __uint128_t 191 8 22 \
166+
invoke_test 128_full_gcc_asm_array.txt ./testbench.sh g++ O3 MontgomeryFull __uint128_t 191 8 40 \
215167
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
216-
exit_on_failure
217168

218-
invoke_test 128_full_clang_asm_scalar.txt ./testbench.sh clang++ O3 MontgomeryFull __uint128_t 191 8 22 \
169+
invoke_test 128_full_clang_asm_scalar.txt ./testbench.sh clang++ O3 MontgomeryFull __uint128_t 191 8 40 \
219170
-DTEST_SCALAR -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
220-
exit_on_failure
221171

222-
invoke_test 128_full_clang_asm_array.txt ./testbench.sh clang++ O3 MontgomeryFull __uint128_t 191 8 22 \
172+
invoke_test 128_full_clang_asm_array.txt ./testbench.sh clang++ O3 MontgomeryFull __uint128_t 191 8 40 \
223173
-DTEST_ARRAY -DHURCHALLA_MONTGOMERY_TWO_POW_USE_CSELECT_ON_BIT -DHURCHALLA_ALLOW_INLINE_ASM_ALL
224-
exit_on_failure
225174

226-
invoke_test 128_full_gcc_noasm_scalar.txt ./testbench.sh g++ O3 MontgomeryFull __uint128_t 191 8 22 \
175+
invoke_test 128_full_gcc_noasm_scalar.txt ./testbench.sh g++ O3 MontgomeryFull __uint128_t 191 8 40 \
227176
-DTEST_SCALAR
228-
exit_on_failure
229177

230-
invoke_test 128_full_gcc_noasm_array.txt ./testbench.sh g++ O3 MontgomeryFull __uint128_t 191 8 22 \
178+
invoke_test 128_full_gcc_noasm_array.txt ./testbench.sh g++ O3 MontgomeryFull __uint128_t 191 8 40 \
231179
-DTEST_ARRAY
232-
exit_on_failure
233180

234-
invoke_test 128_full_clang_noasm_scalar.txt ./testbench.sh clang++ O3 MontgomeryFull __uint128_t 191 8 22 \
181+
invoke_test 128_full_clang_noasm_scalar.txt ./testbench.sh clang++ O3 MontgomeryFull __uint128_t 191 8 40 \
235182
-DTEST_SCALAR
236-
exit_on_failure
237183

238-
invoke_test 128_full_clang_noasm_array.txt ./testbench.sh clang++ O3 MontgomeryFull __uint128_t 191 8 22 \
184+
invoke_test 128_full_clang_noasm_array.txt ./testbench.sh clang++ O3 MontgomeryFull __uint128_t 191 8 40 \
239185
-DTEST_ARRAY
240-
exit_on_failure

montgomery_arithmetic/include/hurchalla/montgomery_arithmetic/detail/experimental/montgomery_two_pow/two_pow_perf_stats_M2.txt renamed to montgomery_arithmetic/include/hurchalla/montgomery_arithmetic/detail/experimental/montgomery_two_pow/timings_ARM64_M2/two_pow_perf_stats_M2.txt

File renamed without changes.

0 commit comments

Comments
 (0)