Skip to content

Commit d409172

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

12 files changed

+1039
-202
lines changed

benchmark_analysis.ipynb

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

simd-bench.sh

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