计算第一次通过时间可以抽象为以下代码:
def Next(x):
# function details
return y
x=0
steps=0
while x<target:
x=Next(x)
steps+=1
print steps
有一个函数Next()
返回下一个状态,您要一直运行直到到达target
。您输出已采取的步骤数。
要计算平均值的第一次通过时间,需要运行许多轨迹并对其进行平均。由于一个轨迹可以独立于另一个轨迹运行,因此我想使用GPU来利用这种并行化。
我正在尝试使用numba
。到目前为止,我已经尝试过这样的事情:
from numba import cuda,jit
@jit(target = 'gpu')
def Next(x):
k=cuda.grid(1)
# function details
x[k] = new_value #details ommitted
def main(num_paths):
block_size = cuda.get_current_device().MAX_THREADS_PER_BLOCK
grid_size = int(math.ceil(float(num_paths)/block_size))
stream = cuda.stream()
d_x = cuda.device_array(num_paths, dtype=np.int, stream=stream)
Next_cfg = Next[grid_size,block_size, stream]
我很难实现while
循环。当所有轨迹都达到target
时,我想停止模拟。但这需要CPU-GPU进行对话。我应该如何进行?