Упорная копия - мажорный столбец OutputIterator
У меня есть вектор матриц (хранится как основные массивы столбцов), который я хочу объединить по вертикали. Поэтому я хочу использовать функцию копирования из структуры Thrust, как в следующем примере фрагмента:
int offset = 0;
for(int i = 0; i < matrices.size(); ++i) {
thrust::copy(
thrust::device_ptr(matrices[i]),
thrust::device_ptr(matrices[i]) + rows[i] * cols[i],
thrust::device_ptr(result) + offset
);
offset += rows[i] * cols[i];
}
РЕДАКТИРОВАТЬ: расширенный пример:
Проблема в том, что если у меня есть матрица A = [[1, 2, 3], [4, 5, 6]] (2 строки, 3 столбца; в памяти [1, 4, 2, 5, 3, 6 ]) и еще один B = [[7, 8, 9]] (1 строка, 3 столбца; в памяти [7, 8, 9]), результирующая матрица C не [[1, 2, 3], [4 , 5, 6], [7, 8, 9]] (3 строки, 3 столбца; в памяти [1, 4, 7, 2, 5, 8, 3, 6, 9]), но [[1, 5 , 7], [4, 3, 8], [2, 6, 9]] (3 строки, 3 столбца; в памяти [1, 4, 2, 5, 3, 6, 7, 8, 9]).
Есть ли способ создать специальный OutputIterator для этой проблемы (я искал его, но ничего не нашел) или быстрый альтернативный способ?
РЕДАКТИРОВАТЬ: SSCCE
#include
#include
#include
#include
void printMat2d(thrust::device_vector& mat, int rows, int cols) {
for(int row = 0; row < rows; ++row) {
for(int col = 0; col < cols; ++col) {
std::cout < mat[row + col * rows] < " ";
}
std::cout < std::endl;
}
}
void printMat1d(thrust::device_vector