Skip to content

Commit 2fe10e8

Browse files
committed
Add intel simd [skip ci]
1 parent f36afb8 commit 2fe10e8

12 files changed

+1551
-202
lines changed

benchmark_analysis.ipynb

Lines changed: 802 additions & 0 deletions
Large diffs are not rendered by default.

simd-bench.sh

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#!/bin/bash
2+
set -e
3+
4+
options=("OFF" "ON")
5+
BENCH_ITERS=${SECP256K1_BENCH_ITERS:-20000}
6+
7+
MAX_FREQ=$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq)
8+
9+
sudo cpupower -c 0 frequency-set -f "$((MAX_FREQ/1000))MHz" >/dev/null
10+
11+
command -v taskset >/dev/null && TASKSET_CMD="taskset -c 0"
12+
13+
run_bench() {
14+
local dir=$1 bin=$2 log=$3
15+
(
16+
cd "$dir"
17+
$TASKSET_CMD env SECP256K1_BENCH_ITERS=$BENCH_ITERS nice -n 0 ./bin/$bin >> "../../$log" 2>&1
18+
echo "" >> "../../$log"
19+
)
20+
}
21+
22+
bench_config() {
23+
local config="$1"
24+
local dir="build/$config"
25+
local log="${config}_bench.csv"
26+
27+
if [[ ! -d "$dir" ]]; then
28+
echo -e "\033[1;31m✖ $config\033[0m (no dir)"
29+
return 1
30+
fi
31+
32+
{
33+
echo "Benchmark results for $config"
34+
echo "Generated on $(date)"
35+
echo "Iterations: $BENCH_ITERS"
36+
echo ""
37+
} > "$log"
38+
39+
for bin in bench bench_ecmult bench_internal; do
40+
if run_bench "$dir" "$bin" "$log"; then
41+
echo "$bin"
42+
else
43+
echo "$bin"
44+
return 1
45+
fi
46+
done
47+
48+
echo -e "\033[1;32m✔ $config\033[0m (log: $log)"
49+
}
50+
51+
for sse2 in "${options[@]}"; do
52+
for avx2 in "${options[@]}"; do
53+
config="INT128"
54+
[[ $sse2 == "ON" ]] && config+="_SSE2"
55+
[[ $avx2 == "ON" ]] && config+="_AVX2"
56+
57+
bench_config "$config"
58+
done
59+
done
60+
61+
for sse2 in "${options[@]}"; do
62+
config="INT64"
63+
[[ $sse2 == "ON" ]] && config+="_SSE2"
64+
65+
bench_config "$config"
66+
done
67+
68+
echo -e "\n\033[1;33mAll benchmarks successful. Logs in project root\033[0m"

simd-build.sh

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#!/bin/bash
2+
set -e
3+
4+
options=("OFF" "ON")
5+
mkdir -p build
6+
7+
build() {
8+
local config="$1"
9+
local flags="$2"
10+
local dir="build/$config"
11+
local log="${config}_build.log"
12+
13+
mkdir -p "$dir"
14+
(
15+
cd "$dir"
16+
if ! cmake ../.. -G Ninja -DSECP256K1_APPEND_CFLAGS="$flags" &> "../../$log"; then
17+
echo -e "\033[1;31m✖ $config (log: $log)\033[0m"
18+
return 1
19+
fi
20+
if ! ninja &>> "../../$log"; then
21+
echo -e "\033[1;31m✖ $config (log: $log)\033[0m"
22+
return 1
23+
fi
24+
)
25+
echo -e "\033[1;32m✔ $config\033[0m (log: $log)"
26+
}
27+
28+
for sse2 in "${options[@]}"; do
29+
for avx2 in "${options[@]}"; do
30+
config="INT128"
31+
[[ $sse2 == "ON" ]] && config+="_SSE2"
32+
[[ $avx2 == "ON" ]] && config+="_AVX2"
33+
34+
flags=""
35+
[[ $sse2 == "ON" ]] && flags+=" -msse2" || flags+=" -mno-sse2"
36+
[[ $avx2 == "ON" ]] && flags+=" -mavx2" || flags+=" -mno-avx2"
37+
38+
build "$config" "$flags"
39+
done
40+
done
41+
42+
for sse2 in "${options[@]}"; do
43+
config="INT64"
44+
[[ $sse2 == "ON" ]] && config+="_SSE2"
45+
46+
flags="-DUSE_FORCE_WIDEMUL_INT64=1"
47+
[[ $sse2 == "ON" ]] && flags+=" -msse2" || flags+=" -mno-sse2"
48+
49+
build "$config" "$flags"
50+
done
51+
52+
echo -e "\n\033[1;33mAll builds done. Logs in project root\033[0m"

simd-test.sh

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/bin/bash
2+
set -e
3+
4+
options=("OFF" "ON")
5+
6+
test_config() {
7+
local config="$1"
8+
local dir="build/$config"
9+
local log="${config}_test.log"
10+
11+
if [[ ! -d "$dir" ]]; then
12+
echo -e "\033[1;31m✖ $config\033[0m (no dir)"
13+
return 1
14+
fi
15+
16+
if (cd "$dir" && ctest --output-on-failure -j"$(nproc)" &> "../../$log"); then
17+
echo -e "\033[1;32m✔ $config\033[0m (log: $log)"
18+
else
19+
echo -e "\033[1;31m✖ $config\033[0m (log: $log)"
20+
return 1
21+
fi
22+
}
23+
24+
for sse2 in "${options[@]}"; do
25+
for avx2 in "${options[@]}"; do
26+
config="INT128"
27+
[[ $sse2 == "ON" ]] && config+="_SSE2"
28+
[[ $avx2 == "ON" ]] && config+="_AVX2"
29+
30+
test_config "$config"
31+
done
32+
done
33+
34+
for sse2 in "${options[@]}"; do
35+
config="INT64"
36+
[[ $sse2 == "ON" ]] && config+="_SSE2"
37+
38+
test_config "$config"
39+
done
40+
41+
echo -e "\n\033[1;33mAll tests passed. Logs in project root\033[0m"

0 commit comments

Comments
 (0)