使用GPU计算平均首次通过时间

时间:2018-10-26 16:44:07

标签: gpu numba

计算第一次通过时间可以抽象为以下代码:

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进行对话。我应该如何进行?

0 个答案:

没有答案