Я передаю большие массивы scipy.sparse в параллельные процессы в общей памяти одного вычислительного узла. В каждом раунде параллельных заданий переданный массив не будет изменен. Я хочу передать массив с нулевой копией.
Хотя это возможно с помощью multiprocessing.RawArray() и numpy.sharedmem (см. здесь), мне интересно, как ray's put() работает.
Насколько я понял (см. управление памятью, [1], [2]), метод ray put() копирует объект один раз и навсегда ( сериализовать, а затем десериализовать) в хранилище объектов, доступное для всех процессов.
Вопрос:
Я не уверен, что правильно понял, это глубокая копия всего массива в хранилище объектов или просто ссылка на него? Есть ли способ вообще не копировать объект? Скорее просто передать адрес/ссылку существующего массива scipy? По сути, настоящая неглубокая копия без накладных расходов на копирование всего массива.
Ubuntu 16.04, Python 3.7.6, Ray 0.8.5.
scipy.sparse
матрица не является подклассомndarray
. Это пользовательский класс Python, или, скорее, классы. Разные форматы имеют разные классы и атрибуты хранения данных. Один на самом деле является подклассом словаря, другие хранят данные (и индексы) в несколькихndarrays
. - person hpaulj   schedule 23.05.2020