- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在属于 jitclass 成员的函数中使用 prange?例如,我想使用 prange 在函数 do_smth
中并行执行。
@jitclass([('x', float64[:])])
class Test:
def __init__(self):
self.x = np.arange(10)
def do_smth(self):
for i in range(len(self.x)):
pass
最佳答案
我还没有找到在 jitclass
成员中指定 parallel=True
的方法。但是您可以改为调用外部函数。如果确实需要并行化,这个小开销应该是最小的。
@nb.experimental.jitclass([('x', nb.float64[:, :])])
class Test:
def __init__(self):
self.x = np.arange(10000.).reshape((10,1000))
def do_smth(self):
rows, cols = self.x.shape
sums = np.zeros(cols)
for r in nb.prange(rows):
print(r)
sums[r] = np.sum(self.x[r])
return np.sum(sums)
def do_other(self):
return do_other(self.x)
@nb.njit([nb.float64(nb.float64[:,:])], parallel=True)
def do_other(x):
rows, cols = x.shape
sums = np.zeros(cols)
for r in nb.prange(rows):
print(r)
sums[r] = np.sum(x[r])
return np.sum(sums)
t = Test()
print("Class member")
print(t.do_smth())
print("External function")
print(t.do_other())
即使 prange
在 Test.do_smth()
中显式使用,循环也不会并行化。处理行的顺序很好地指示了循环何时并行化:
Class member
0
1
2
3
4
5
6
7
8
9
49995000.0
External function
0
2
6
3
5
9
8
7
4
1
49995000.0
关于python - 如何在jitclass中使用prange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67577756/
我有以下用于并行归约的简单 Cython 函数: # cython: boundscheck = False # cython: initializedcheck = False # cython:
我正在尝试为每个 thead 分配一个单独的数组。但是,当我尝试为其分配值时,出现错误:错误:从“int”到“int*”的无效转换 [-fpermissive]这是代码: cdef void test
我正在从这里测试 prange 示例: http://numba.pydata.org/numba-doc/0.11/prange.html 我有 numba 版本 0.11.1 不幸的是,它给了我这
我刚刚写了一个简单的程序来测试 cython 的 prange 是如何执行的,下面是代码: from cython.parallel import prange import numpy as np
我正在尝试使用 prange 来处理多个字符串。由于无法使用 python 列表执行此操作,因此我使用 numpy 数组。 对于 float 数组,此函数可以工作: from cython.paral
Cython 启动器在这里。我正在尝试通过使用多个线程来加速计算某个成对统计数据(在几个 bin 中)。特别是,我正在使用来自 cython.parallel 的 prange,它在内部使用 open
我在这样的列表上使用 prange 进行迭代: from cython.parallel import prange, threadid cdef int tid cdef CythonElemen
使用 prange 与 range 进行比较时,更新 prange 循环中的列表会给出错误的结果。 from numba import jit, prange import numpy as np @
我正在尝试使用 Cython 的 prange 提高某些度量计算的性能。这是我的代码: def shausdorff(float64_t[:,::1] XA not None, float64_t[:
我有一个大的 prange 循环,可以在这里高效地执行一些过程。我想跟踪其中一个何时找到更好的结果。但是,似乎在 prange 循环内写入变量会创建一个新的私有(private)变量,因此无法以这种方
我正在尝试用 cython 重写一个使用 openmp 的 fortran 子例程。我发现在 cython 中重写 fortran 子例程本身没有困难。非 openmp 版本工作正常。但是,我不确定如
我尝试按如下方式并行化,紧随documented example : @numba.jit(nopython=True) def foo(uIdx, grids): return uIdx @
我正在使用 Cython 版本 0.27.3 为一个简单的素数测试模块编译以下源代码,该模块包含同一算法的 python 和 cython 实现。当我将 threads 参数设置为不同的值时,尽管 G
在另一个 Q+A ( Can I perform dynamic cumsum of rows in pandas? ) 中,我对使用 prange 的正确性发表了评论。关于此代码(this answ
我正在实现一种具有特定结构的顺序算法(卡尔曼滤波器),其中可以并行完成大量内部循环。我需要从这个函数中获得尽可能多的性能。目前,它在我的机器上运行大约 600 毫秒,具有代表性数据输入(n,p = 1
总是出现“pyeval_savethread: null tstate”错误 我尝试使用 cython 通过 prange 进行一些并行计算。但是我发现当我使用返回指针的函数时,我会得到上面的错误。我
在用 numba 并行化 3 个封装的 for 循环的实验中,我意识到幼稚的方法实际上并不能提高性能。以下代码产生以下时间(以秒为单位): 0.154625177383 # no numba 0.4
在两种情况下考虑优化的 cython 代码: for j in xrange(8): for x in xrange(1, 600): tmp[j] =
我有一个函数 foo,它将指向内存的指针作为参数,并写入和读取该内存: cdef void foo (double *data): data[some_index_int] = some_val
我是一名优秀的程序员,十分优秀!