Есть ли стандартная версия strcpy?

У меня есть вектор-столбец A, длина которого составляет 10 элементов. У меня есть матрица B, которая составляет 10 на 10. Хранилище памяти для B является основным столбцом. Я бы хотел перезаписать первую строку в B с вектором столбца A.

Ясно, что я могу сделать:

for ( int i=0; i < 10; i++ )
{
    B[0 + 10 * i] = A[i];
}

где я оставил нуль в 0 + 10 * i, чтобы выделить, что B использует хранилище столбцов (ноль - индекс строки).

После некоторых махинаций в CUDA-land сегодня вечером у меня возникла мысль, что может быть функция ЦП для выполнения перемещенного memcpy?? Я думаю, что на низком уровне производительность будет зависеть от существования команды strided load/store, о которой я не помню, что она была в сборке x86?

Ответ 1

Короткий ответ: Код, который вы написали, так же быстро, как и он.

Длинный ответ: функция memcpy записывается с использованием сложных сложностей или сборки, поскольку она работает с операндами памяти, которые имеют произвольный размер и выравнивание. Если вы переписываете столбец матрицы, то ваши операнды будут иметь естественное выравнивание, и вам не придется прибегать к тем же трюкам, чтобы получить приличную скорость.