{
“cells”: [
{

“cell_type”: “markdown”, “id”: “synthetic-appeal”, “metadata”: {}, “source”: [

“# GF(2^m) speed tests”

]

}, {

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

“import numpy as npn”, “import galois”

]

}, {

“cell_type”: “code”, “execution_count”: 2, “id”: “distant-letters”, “metadata”: {}, “outputs”: [

{

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

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

]

}

], “source”: [

“GF = galois.GF(2**13)n”, “print(GF.properties)”

]

}, {

“cell_type”: “code”, “execution_count”: 3, “id”: “further-turning”, “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”: “strategic-prerequisite”, “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”: “homeless-infrastructure”, “metadata”: {}, “source”: [

“## N = 10k”

]

}, {

“cell_type”: “code”, “execution_count”: 5, “id”: “forced-cambridge”, “metadata”: {}, “outputs”: [

{

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

“Operation: addn”, “Target: cpu, Mode: jit-lookupn”, ” 188 µs ± 23.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)n”, “Target: cpu, Mode: jit-calculaten”, ” 95.6 µs ± 11.2 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: parallel, Mode: jit-lookupn”, ” 61.4 ms ± 4.82 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)n”, “Target: parallel, Mode: jit-calculaten”, ” 61.8 ms ± 6.03 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)n”, “n”, “Operation: multiplyn”, “Target: cpu, Mode: jit-lookupn”, ” 148 µs ± 10.5 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: cpu, Mode: jit-calculaten”, ” 646 µs ± 73.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)n”, “Target: parallel, Mode: jit-lookupn”, ” 59.4 ms ± 4.54 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)n”, “Target: parallel, Mode: jit-calculaten”, ” 59.9 ms ± 4.29 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)n”, “n”, “Operation: reciprocaln”, “Target: cpu, Mode: jit-lookupn”, ” 113 µs ± 7.92 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: cpu, Mode: jit-calculaten”, ” 9.86 ms ± 1.3 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)n”, “Target: parallel, Mode: jit-lookupn”, ” The slowest run took 189.29 times longer than the fastest. This could mean that an intermediate result is being cached.n”, “4.88 ms ± 6.96 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)n”, “Target: parallel, Mode: jit-calculaten”, ” 59.4 ms ± 4.46 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)n”, “n”, “Operation: logn”, “Target: cpu, Mode: jit-lookupn”, ” 138 µs ± 19 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)n”, “Target: cpu, Mode: jit-calculaten”, ” 63.1 ms ± 3.53 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)n”, “Target: parallel, Mode: jit-lookupn”, ” 58.2 ms ± 1.78 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)n”, “Target: parallel, Mode: jit-calculaten”, ” 69.4 ms ± 2.95 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

}