Как я могу перебирать 2D-массив структур и применять преобразования в CUDA Thrust? [Дубликат]

Начнем с вашего второго примера:

Этот первый оператор назначает новый объект s1

SomeObject s1 = new SomeObject("first");

Когда вы выполняете присвоение во втором выражении (SomeObject s2 = s1), вы говорите, что s2 указывает на тот же объект s1, который в данный момент указывает, поэтому у вас есть две ссылки на один и тот же объект.

Обратите внимание, что вы не дублировали SomeObject , а две переменные просто указывают на один и тот же объект. Поэтому, если вы изменяете s1 или s2, вы фактически изменяете один и тот же объект (обратите внимание, если вы сделали что-то вроде s2 = new SomeObject("second"), они теперь будут указывать на разные объекты).

В вашем первом Например, a и b являются примитивными значениями, поэтому изменение одного не повлияет на другое.

Под капотом Java все объекты работают с использованием pass by value. Для объектов вы передаете «значение», которое вы передаете, - это местоположение объекта в памяти (поэтому он, похоже, имеет аналогичный эффект прохождения по ссылке). Примитивы ведут себя по-разному и просто передают копию значения.

1
задан MatSim 24 April 2017 в 09:49
поделиться

1 ответ

Очень короткий ответ заключается в том, что вы не можете.

Thrust не имеет алгоритмов внешнего продукта, что было бы необходимо для выполнения того типа вычисления, которое вам было бы интересно. Вы могли бы сделать это, заполнив две матрицы строками / столбцы двух входных векторов, а затем прямо вычесть их. Но это было бы очень неэффективно (как память, так и производительность) по сравнению с надлежащей реализацией внешнего продукта.

1
ответ дан talonmies 16 August 2018 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: