{
“cells”: [
{

“cell_type”: “markdown”, “id”: “subjective-appreciation”, “metadata”: {}, “source”: [

“# GF(p) speed tests”

]

}, {

“cell_type”: “code”, “execution_count”: 1, “id”: “hidden-costa”, “metadata”: {}, “outputs”: [], “source”: [

“import numpy as npn”, “import galois”

]

}, {

“cell_type”: “code”, “execution_count”: 2, “id”: “uniform-accuracy”, “metadata”: {}, “outputs”: [

{

“name”: “stdout”, “output_type”: “stream”, “text”: [

“GF(8009):n”, ” characteristic: 8009n”, ” degree: 1n”, ” order: 8009n”, ” irreducible_poly: Poly(x + 8006, GF(8009))n”, ” is_primitive_poly: Truen”, ” primitive_element: GF(3, order=8009)n”, ” dtypes: [‘uint16’, ‘uint32’, ‘int16’, ‘int32’, ‘int64’]n”, ” ufunc_mode: ‘jit-lookup’n”, ” ufunc_target: ‘cpu’n”

]

}

], “source”: [

“prime = galois.next_prime(8000)n”, “n”, “GF = galois.GF(prime)n”, “print(GF.properties)”

]

}, {

“cell_type”: “code”, “execution_count”: 3, “id”: “later-convention”, “metadata”: {}, “outputs”: [

{

“name”: “stdout”, “output_type”: “stream”, “text”: [

“[‘jit-lookup’, ‘jit-calculate’]n”, “[‘cpu’, ‘parallel’]n”

]

}

], “source”: [

“modes = GF.ufunc_modesn”, “targets = GF.ufunc_targetsn”, “targets.remove("cuda") # Can’t test with a GPU on my machinen”, “print(modes)n”, “print(targets)”

]

}, {

“cell_type”: “code”, “execution_count”: 4, “id”: “described-placement”, “metadata”: {}, “outputs”: [], “source”: [

“def speed_test(GF, N):n”, ” a = GF.Random(N)n”, ” b = GF.Random(N, low=1)n”, “n”, ” for operation in [np.add, np.multiply]:n”, ” print(f"Operation: {operation.__name__}")n”, ” for target in targets:n”, ” for mode in modes:n”, ” GF.compile(mode, target)n”, ” print(f"Target: {target}, Mode: {mode}", end="\n ")n”, ” %timeit operation(a, b)n”, ” print()n”, “n”, ” for operation in [np.reciprocal, np.log]:n”, ” print(f"Operation: {operation.__name__}")n”, ” for target in targets:n”, ” for mode in modes:n”, ” GF.compile(mode, target)n”, ” print(f"Target: {target}, Mode: {mode}", end="\n ")n”, ” %timeit operation(b)n”, ” print()”

]

}, {

“cell_type”: “markdown”, “id”: “saving-housing”, “metadata”: {}, “source”: [

“## N = 10k”

]

}, {

“cell_type”: “code”, “execution_count”: 5, “id”: “superb-disposal”, “metadata”: {}, “outputs”: [

{

“name”: “stdout”, “output_type”: “stream”, “text”: [

“Operation: addn”, “Target: cpu, Mode: jit-lookupn”, ” 104 µs ± 1.57 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: cpu, Mode: jit-calculaten”, ” 71.3 µs ± 2.95 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: parallel, Mode: jit-lookupn”, ” The slowest run took 436.22 times longer than the fastest. This could mean that an intermediate result is being cached.n”, “10.2 ms ± 18.6 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)n”, “Target: parallel, Mode: jit-calculaten”, ” The slowest run took 24.46 times longer than the fastest. This could mean that an intermediate result is being cached.n”, “3.41 ms ± 2.38 ms per loop (mean ± std. dev. of 7 runs, 1000 loops each)n”, “n”, “Operation: multiplyn”, “Target: cpu, Mode: jit-lookupn”, ” 93.1 µs ± 1.33 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: cpu, Mode: jit-calculaten”, ” 72.1 µs ± 1.8 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: parallel, Mode: jit-lookupn”, ” 163 µs ± 19.9 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: parallel, Mode: jit-calculaten”, ” 2.5 ms ± 680 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “n”, “Operation: reciprocaln”, “Target: cpu, Mode: jit-lookupn”, ” 67.3 µs ± 929 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: cpu, Mode: jit-calculaten”, ” 6.01 ms ± 61.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)n”, “Target: parallel, Mode: jit-lookupn”, ” 152 µs ± 15.9 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: parallel, Mode: jit-calculaten”, ” 11.1 ms ± 1.05 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)n”, “n”, “Operation: logn”, “Target: cpu, Mode: jit-lookupn”, ” 75.3 µs ± 242 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: cpu, Mode: jit-calculaten”, ” 149 ms ± 846 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)n”, “Target: parallel, Mode: jit-lookupn”, ” 175 µs ± 16.4 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: parallel, Mode: jit-calculaten”, ” 56.2 ms ± 20.1 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)n”, “n”

]

}

], “source”: [

“speed_test(GF, 10_000)”

]

}

], “metadata”: {

“kernelspec”: {

“display_name”: “Python 3”, “language”: “python”, “name”: “python3”

}, “language_info”: {

“codemirror_mode”: {

“name”: “ipython”, “version”: 3

}, “file_extension”: “.py”, “mimetype”: “text/x-python”, “name”: “python”, “nbconvert_exporter”: “python”, “pygments_lexer”: “ipython3”, “version”: “3.8.5”

}

}, “nbformat”: 4, “nbformat_minor”: 5

}