cython

Форк
0
/
pure_parallel.py 
60 строк · 1.1 Кб
1
# mode: run
2
# tag: openmp, pure3.6
3

4
import cython
5
from cython.parallel import prange, parallel
6

7

8
def prange_regression(n: cython.int, data: list):
9
    """
10
    >>> prange_regression(10, list(range(1, 4)))
11
    19
12
    """
13
    s: cython.int = 0
14
    i: cython.int
15
    d: cython.int[3] = data
16

17
    for i in prange(n, num_threads=3, nogil=True):
18
        s += d[i % 3]
19
    return s
20

21

22
def prange_with_gil(n: cython.int, x):
23
    """
24
    >>> sum(3*i for i in range(10))
25
    135
26
    >>> prange_with_gil(10, 3)
27
    135
28
    """
29
    i: cython.int
30
    s: cython.int = 0
31

32
    for i in prange(n, num_threads=3, nogil=True):
33
        with cython.gil:
34
            s += x * i
35

36
    return s
37

38

39
@cython.cfunc
40
def use_nogil(x, i: cython.int) -> cython.int:
41
    cx: cython.int = x
42
    with cython.nogil:
43
        return cx * i
44

45

46
def prange_with_gil_call_nogil(n: cython.int, x):
47
    """
48
    >>> sum(3*i for i in range(10))
49
    135
50
    >>> prange_with_gil(10, 3)
51
    135
52
    """
53
    i: cython.int
54
    s: cython.int = 0
55

56
    for i in prange(n, num_threads=3, nogil=True):
57
        with cython.gil:
58
            s += use_nogil(x, i)
59

60
    return s
61

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.