Cython的OpenMP减少问题

在编译希望执行精简操作的OpenmP并行代码时,我面临Cython(0.29.13版)的意外行为:

import cython
from cython.parallel import prange,parallel

cpdef omp_test1(n):
    cdef int sum = 0,i,imax
    imax = <int>n
    for i in prange(imax,nogil=True):
        sum += 1
    return sum


cpdef omp_test2(n):
    cdef int sum = 0,imax
    imax = <int>n
    with nogil,parallel():
        for i in prange(imax):
            sum += 1
    return sum

当调用这两个函数时,我希望输入参数n作为返回值。而是,返回的值为n * num_threads。令人惊讶的是,在我的Mac上,只有GCC(v。9.2.0_2)才观察到这种意外行为; clang(v。11.0.0)返回期望值n

我做错什么了吗?生成的Cython代码或GCC编译器是否有问题?

zhuangting 回答:Cython的OpenMP减少问题

您的代码很好。我也像DavidW一样成功运行了它。

我正在自动测试OpenMP并行化的Cython代码在多个操作系统上以及不同的Python版本。偶尔,我们在MacOS上会遇到问题,但是使用clang。

这不会解决您的问题,但是作为提示,您应该查看编译器或OpenMP版本。

本文链接:https://www.f2er.com/3041433.html

大家都在问