NO.
Каждый элемент вывода зависит от ALL элементов входного вектора x
Например: если x
- это вход, а y
- это выход, A
- это матрица,
i
-й элемент y
будет сгенерирован следующим образом.
y_i = A_i1*x_1 + A_i2 * x_2 ... + A_in * x_n
Таким образом, если вы перезаписаете x_i
результатом, указанным выше, некоторые другие x_r
, зависящие от x_i
, не получат надлежащий ввод и не получат неправильные результаты.
EDIT
Я собирался сделать это комментарием, но он становился слишком большим. Итак, вот объяснение, почему приведенные выше рассуждения верны и для параллельных реализаций.
Если каждая параллельная группа / поток не создает локальную копию исходных данных, и в этом случае исходные данные могут быть уничтожены, эта аргументация верна.
Однако делать это (делать локальную копию) целесообразно и полезно только тогда, когда
- Каждый параллельный поток / блок не сможет получить доступ к
исходный массив без значительных накладных расходов.
- Достаточно локальной памяти (назовите это кешем, или разделяемой памятью или даже
обычная память в случае MPI) для хранения отдельной копии для каждого
параллельная резьба / блок.
Примечания:
- (1) может быть неверно для многих многопоточных приложений на одном компьютере.
- (1) может быть верно для CUDA, но (2) определенно не применимо для CUDA.