Arm 加载向量内部函数

Arm 加载向量内部函数,arm,neon,intrinsics,Arm,Neon,Intrinsics,我想从128位的内存向量加载: 我有这些指针: int8x16_t* p1=(int8x16_t*)srcimg.data; int8x16_t* p2=(int8x16_t*)(srcimg.data+srcimg.cols); 问题是加载函数是这样的: int8x16_t vld1q_s8(__transfersize(16) int8_t const * ptr); 我不明白为什么这个函数需要输入一个int8_t*值 我想这样做: int8x16_t vector; vector=

我想从128位的内存向量加载: 我有这些指针:

int8x16_t* p1=(int8x16_t*)srcimg.data;
int8x16_t* p2=(int8x16_t*)(srcimg.data+srcimg.cols); 
问题是加载函数是这样的:

int8x16_t vld1q_s8(__transfersize(16) int8_t const * ptr); 
我不明白为什么这个函数需要输入一个int8_t*值

我想这样做:

int8x16_t vector;
vector=vld1q_s8(p1); 

我该怎么做?谢谢。

它应该已经像下面那样工作了

int8x16_t vector;
vector=vld1q_s8((int8_t *) srcimg.data);
int8x16\u t
是一种矢量类型,创建该类型是为了便于阅读矢量布局

int8\t
就是你所说的字节

大声读它听起来应该像“从这个字节流加载到四元寄存器”

如果您也进行了检查,您应该找不到任何指向这些向量类型的指针。它们的意思是映射到
SIMD
寄存器,而您通常不谈论指向寄存器的指针


如果您想了解更多有关霓虹灯编程的信息,可以检查并查看此信息。

我并不清楚这两种方法的区别:int8x16\u t*p1=(int8x16\u t*)srcimg.data;像你说的那样,用(int8_t*)srcimg.data进行一次转换。我的意思是,在一种情况下,我们谈论的是128位的向量,而在另一种情况下,我们谈论的是一个字节。@user2696208,再一次,所有行为都取决于
vld1q_s8
读取数据的方式。你是什么意思?我如何理解它读取数据的方式?很抱歉,我对霓虹灯还不熟悉,所以多解释一下会有帮助的。非常感谢。在接下来的部分中,我想做的是一个循环,在这个循环中,我增加指针p1和p2的值,并在每个循环中从p1和p2指向的内存位置加载128位的向量。