Как выполнять быстрые побитовые операции над скаляром с помощью библиотеки cupy

Я строю модель обучения с подкреплением на графическом процессоре, поэтому я использую цепочку с cupy. cupy задуман как дубликат numpy, за исключением того, что он работает на графическом процессоре.

Ранее я задавал этот вопрос о том, как сделать быстрый сдвиг битов на скаляре в numpy, и ответ был прост: мне нужно сделать сдвиг битов на фактическом объекте numpy.uint64, а не на объекте numpy.array. Было бы неплохо, если бы я мог перенести свои методы сдвига битов на cupy, чтобы получить такое же ускорение.

Однако cupy документация требует, чтобы скаляры находились на графическом процессоре, а не на ЦП (источник). Это значит, что либо я...

  1. представить мой скаляр в виде массива, что вызывает мою исходную проблему в моем связанном вопросе выше, или
  2. передать мое скалярное целое число в ЦП, выполнить мои вычисления и отправить его обратно в ГП, который также работает медленно.

Если я хочу сделать сотни тысяч битовых сдвигов для скалярного значения, хотя в numpy это займет меньше секунды, в cupy это займет слишком много времени. Как ускорить сдвиг битов скаляров в cupy?


person Paul Terwilliger    schedule 12.10.2018    source источник
comment
Сдвиг одного скаляра в массиве происходит медленно, но если вы поместите в массив сотни тысяч скаляров и выполните битовый сдвиг, это будет быстро. Вы должны делать смены по одной?   -  person Steven Rumbalski    schedule 12.10.2018
comment
Да, я не могу пакетировать свои битовые сдвиги. Их нужно делать по очереди.   -  person Paul Terwilliger    schedule 12.10.2018