bh107 / bohrium

Automatic parallelization of Python/NumPy, C, and C++ codes on Linux and MacOSX
http://www.bh107.org
Apache License 2.0
219 stars 31 forks source link

Force copy to device #635

Open dionhaefner opened 4 years ago

dionhaefner commented 4 years ago

Is there a way to force Bohrium to copy an array to GPU?

I want to benchmark Bohrium against some other libraries, so I do something like this:

def prepare_inputs(np_inputs):
    bh_inputs = [bh.array(k) for k in np_inputs]
    bh.flush()
    return bh_inputs

inputs = prepare_inputs(np_inputs)
with Timer():
    run_benchmark(inputs)
    bh.flush()

But on GPU, the data is not copied during prepare_inputs, only when the data is accessed during run_benchmark. The timings I get for Bohrium are thus higher than for other libraries, which copy the data right away.

I found that the following works:

def prepare_inputs(np_inputs):
    bh_inputs = [bh.array(k) for k in np_inputs]
    for k in bh_inputs:
         tmp = k * 1
         bh.flush()
    return bh_inputs

But it feels a bit stupid.

madsbk commented 4 years ago

I guess you can call bohrium._bh.get_data_pointer(bh_ary, copy2host=False, allocate=True), which will return a point (as a Python integter) to the GPU memory. If the data is on main memory, it will be copied to the GPU before returning.