Я бы хотел поместить множество 2D-массивов в указанной позиции c в более крупный 3D-массив путем суммирования. Эти небольшие массивы могут иметь элементы, которые частично находятся за пределами большого массива, тогда речь идет только о перекрытии. В более технических терминах:
У меня есть большое количество маленьких массивов (размер C x C) вместе с трехмерным индексом, который определяет, где левый верхний угол должен быть помещен в больший трехмерный массив размер (Н х М х М). Утверждается, что M> C. Эти маленькие массивы будут перекрывать друг друга в большой матрице.
В настоящее время у меня есть поток для каждого элемента небольшого массива и выполняется atomicAdd для большого массива. Без атоми c Добавить мою текущую реализацию не получится, потому что тогда несколько потоков потенциально могут получить доступ к одному и тому же элементу массива большой матрицы. Тем не менее, atomicAdd работает медленно, и я хотел бы ускорить / избежать atomicAdd, если это возможно.
Это довольно распространенная проблема, или есть какая-то умная реализация, которую я мог бы использовать / изменить лишь немного ? У вас есть подсказки?