.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/plot_benchmark_dot_cython_omp.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_plot_benchmark_dot_cython_omp.py: .. _l-example-dot-cython-omp: Compares dot implementations (numpy, c++, sse, openmp) ====================================================== :epkg:`numpy` has a very fast implementation of the dot product. It is difficult to be better and very easy to be slower. This example looks into a couple of slower implementations with cython. The tested functions are the following: * :func:`ddot_array_16_sse ` `code `_ * :func:`ddot_cython_array_omp ` `code `_ * :func:`ddot_array_openmp ` `code `_ * :func:`ddot_array_openmp_16 ` `code `_ .. contents:: :local: .. GENERATED FROM PYTHON SOURCE LINES 33-57 .. code-block:: default import numpy import matplotlib.pyplot as plt from pandas import DataFrame, concat from td3a_cpp.tutorial.dot_cython import ( ddot_array_16_sse, ddot_array ) from td3a_cpp.tutorial.dot_cython_omp import ( ddot_cython_array_omp, ddot_array_openmp, get_omp_max_threads, ddot_array_openmp_16 ) from td3a_cpp.tools import measure_time_dim def get_vectors(fct, n, h=250, dtype=numpy.float64): ctxs = [dict(va=numpy.random.randn(n).astype(dtype), vb=numpy.random.randn(n).astype(dtype), dot=fct, x_name=n) for n in range(10, n, h)] return ctxs .. GENERATED FROM PYTHON SOURCE LINES 58-61 Number of threads ++++++++++++++++++ .. GENERATED FROM PYTHON SOURCE LINES 61-66 .. code-block:: default print(get_omp_max_threads()) .. rst-class:: sphx-glr-script-out .. code-block:: none 8 .. GENERATED FROM PYTHON SOURCE LINES 67-70 Several cython dot ++++++++++++++++++ .. GENERATED FROM PYTHON SOURCE LINES 70-113 .. code-block:: default def numpy_dot(va, vb): return numpy.dot(va, vb) def ddot_omp(va, vb): return ddot_cython_array_omp(va, vb) def ddot_omp_static(va, vb): return ddot_cython_array_omp(va, vb, schedule=1) def ddot_omp_dyn(va, vb): return ddot_cython_array_omp(va, vb, schedule=2) def ddot_omp_cpp(va, vb): return ddot_array_openmp(va, vb) def ddot_omp_cpp_16(va, vb): return ddot_array_openmp_16(va, vb) dfs = [] for fct in [numpy_dot, ddot_array, ddot_array_16_sse, ddot_omp, ddot_omp_static, ddot_omp_dyn, ddot_omp_cpp, ddot_omp_cpp_16]: ctxs = get_vectors(fct, 40000) print(fct.__name__) df = DataFrame(list(measure_time_dim('dot(va, vb)', ctxs, verbose=1))) df['fct'] = fct.__name__ dfs.append(df) print(df.tail(n=3)) .. rst-class:: sphx-glr-script-out .. code-block:: none numpy_dot 0%| | 0/160 [00:00` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_benchmark_dot_cython_omp.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_