Есть ли стандартная версия 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
записывается с использованием сложных сложностей или сборки, поскольку она работает с операндами памяти, которые имеют произвольный размер и выравнивание. Если вы переписываете столбец матрицы, то ваши операнды будут иметь естественное выравнивание, и вам не придется прибегать к тем же трюкам, чтобы получить приличную скорость.