Существует ли стандартная расширенная версия memcpy? - PullRequest
13 голосов
/ 16 мая 2011

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

1 Ответ

8 голосов
/ 16 мая 2011

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

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

...