Jus*_*ers 3 math macos ios accelerate-framework
我可以使用哪些函数Accelerate.framework通过标量缩放矢量,并将矢量标准化?我发现一个我认为可能适用于文档中的缩放但我对它的操作感到困惑.
vDSP_vsma
Vector scalar multiply and vector add; single precision.
void vDSP_vsma (
const float *__vDSP_A,
vDSP_Stride __vDSP_I,
const float *__vDSP_B,
const float *__vDSP_C,
vDSP_Stride __vDSP_K,
float *__vDSP_D,
vDSP_Stride __vDSP_L,
vDSP_Length __vDSP_N
);
Run Code Online (Sandbox Code Playgroud)
对就地矢量进行标准化的最简单方法就是这样
int n = 3;
float v[3] = {1, 2, 3};
cblas_sscal(n, 1.0 / cblas_snrm2(n, v, 1), v, 1);
Run Code Online (Sandbox Code Playgroud)
你需要
#include <cblas.h>
Run Code Online (Sandbox Code Playgroud)
要么
#include <vblas.h>
Run Code Online (Sandbox Code Playgroud)
(或两者).请注意,当对矢量进行操作时,其中一些函数位于"矩阵"部分.
如果要使用vDSP功能,请参阅Vector-Scalar Division部分.你可以做几件事:
vDSP_dotpr(),sqrt()和vDSP_vsdiv()vDSP_dotpr(),vrsqrte_f32()和vDSP_vsmul()(vrsqrte_f32()是内置了NEON GCC,虽然如此,你需要检查你的源对ARMv7).vDSP_rmsqv(),乘以sqrt(n),和vDSP_vsdiv()没有向量归一化函数的原因是因为vDSP中的"向量"意味着"同时有很多东西"(直到大约4096/ 8192)并且必然是来自线性代数的"向量".归一1024化3元素向量是没有意义的,并且用于规范化元素向量的快速函数不会使你的应用程序显着更快,这就是为什么没有一个.
vDSP的预期用法更像是规范化1024 2- 或 - 3元素向量.我可以发现一些方法来做到这一点:
vDSP_vdist()得到长的矢量,其次是vDSP_vdiv().但是,vDSP_vdist()对于长度大于2的向量,您必须多次使用.vDSP_vsq()方所有的投入,vDSP_vadd()多次添加所有的人,相当于vDSP_vsqrt()或vDSP_vrsqrt()和vDSP_vmul()或vDSP_vdiv()适当.写等价的vDSP_vsqrt()或不应该太难vDSP_vrsqrt().当然,如果你没有1024个向量来规范化,不要过于复杂化.
笔记:
32K了大约十年或更长时间(它们可能在超线程CPU中的虚拟核心之间共享,而一些较旧/较便宜的处理器可能有16K),所以你应该做的最多就是8192在就地操作彩车.您可能希望减去堆栈空间,如果您正在执行多个顺序操作,您可能希望将其全部保留在缓存中; 1024或者2048看起来非常明智,任何更多可能会收益递减.如果你关心,衡量表现......| 归档时间: |
|
| 查看次数: |
3208 次 |
| 最近记录: |