Pycuda DeviceMemoryPool и gpuarray.to_gpu_async не работают должным образом

Кажется, мне не удается достичь параллелизма с кодом ниже:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd
import pycuda.autoinit
import pycuda.driver as drv
import pycuda.gpuarray as gpuarray
from pycuda.tools import DeviceMemoryPool as DMP
from pycuda.compiler import SourceModule

data_DevMemPool = DMP()
some_long_running_kernel = SourceModule(some_long_running_kernel_SRC, no_extern_c=True)

stream = []

for k in range (10):
    stream.append(drv.Stream())

numpy_data = np.zeros((2048,4000)).astype(np.float32)    


#Why won't this parallelize?:
for i in range(10):
    gpu_data = gpuarray.to_gpu_async(numpy_data,allocator = data_DevMemPool.allocate,stream=stream[i] )

    some_long_running_kernel(
                gpu_data,
                block=(1024,1,1),grid=(2,1,1),stream=stream[i] )

Впоследствии работает:

    data_DevMemPool.held_blocks
    data_DevMemPool.active_blocks

показывает значения 1 и 1 соответственно, предполагая, что пул памяти устройства не был расширен за пределы 1 в любой точке, как это произошло бы, если бы был достигнут параллелизм. Тем не менее, несмотря на то, что обе команды GPU (gpuarray.to_gpu_async () и some_long_running_kernel ()) оба являются предоставляемыми потоками).

0 ответов

Другие вопросы по тегам