14

我有一个 10 个元素长的列向量 A。我有一个 10 乘 10 的矩阵 B。B 的内存存储主要是列。我想用列向量 A 覆盖 B 中的第一行。

显然,我可以这样做:

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

我将零留在其中0 + 10 * i以突出显示 B 使用列主要存储(零是行索引)。

今晚在 CUDA 领域发生了一些恶作剧之后,我想到可能有一个 CPU 函数来执行跨步 memcpy?我想在低级别上,性能将取决于是否存在跨步加载/存储指令,我不记得在 x86 程序集中有这个指令吗?

4

1 回答 1

8

简短的回答:您编写的代码与将要获得的一样快。

长答案:该memcpy函数是使用一些复杂的内在函数或程序集编写的,因为它对具有任意大小和对齐方式的内存操作数进行操作。如果您要覆盖矩阵的一列,那么您的操作数将自然对齐,并且您无需使用相同的技巧来获得不错的速度。

于 2011-05-16T06:27:19.080 回答