CuPy Power Operation на реальном против сложного MappedNDArray - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь сравнить различные способы получения мощности сложного сигнала с помощью графического процессора, и я заметил, что работает следующее:

import cupy as cp
import numpy as np
from numba import cuda
buff = cuda.mapped_array(1, dtype=cp.complex64)
data = np.asarray([1 + 2j])
buff[:] = data.astype(np.complex64)
print(cp.power(buff, 2))

, который возвращает

>>> [-3.0000005+3.9999998j]

Тем не менее, он выдает ошибку, если я пытаюсь выполнить операцию только с реальной частью buff (я также понимаю, что это вычисление не эквивалентно приведенному выше, но мой вопрос касается ошибки).

import cupy as cp
import numpy as np
from numba import cuda
buff = cuda.mapped_array(1, dtype=cp.complex64)
data = np.asarray([1 + 2j])
buff[:] = data.astype(np.complex64)
print(cp.power(buff.real, 2))

, который возвращает

Traceback (most recent call last):
  File "basic_power.py", line 7, in <module>
    print(cp.power(buff.real, 2))
  File "cupy/core/_kernel.pyx", line 906, in cupy.core._kernel.ufunc.__call__
  File "cupy/core/_kernel.pyx", line 90, in cupy.core._kernel._preprocess_args
TypeError: Unsupported type <class 'numba.cuda.cudadrv.devicearray.MappedNDArray'>

Это ошибка или я что-то не так делаю? Я понимаю, что смогу заставить его работать, если вместо этого использую print(cp.power(cp.asarray(buff).real, 2)), но я бы хотел понять, почему он не работает.

...