C++ 从脚本中较高的函数调用脚本中较低的函数

C++ 从脚本中较高的函数调用脚本中较低的函数,c++,optimization,recursion,simd,sse2,C++,Optimization,Recursion,Simd,Sse2,我在想办法让电脑为我做些工作。我正在使用SIMD(SSE2和SSE3)来计算叉积,我想知道它是否可以更快。目前我有以下几点: const int maskShuffleCross1 = _MM_SHUFFLE(3,0,2,1); // y z x const int maskShuffleCross2 = _MM_SHUFFLE(3,1,0,2); // z x y __m128 QuadCrossProduct(__m128* quadA, __m128* quadB) { // (y

我在想办法让电脑为我做些工作。我正在使用SIMD(SSE2和SSE3)来计算叉积,我想知道它是否可以更快。目前我有以下几点:

const int maskShuffleCross1 = _MM_SHUFFLE(3,0,2,1); // y z x
const int maskShuffleCross2 = _MM_SHUFFLE(3,1,0,2); // z x y

__m128 QuadCrossProduct(__m128* quadA, __m128* quadB)
{
   // (y * other.z) - (z * other.y)
   // (z * other.x) - (x * other.z)
   // (x * other.y) - (y * other.x)

   return
   (
      _mm_sub_ps
      (
         _mm_mul_ps
         (
            _mm_shuffle_ps(*quadA, *quadA, maskShuffleCross1),
            _mm_shuffle_ps(*quadB, *quadB, maskShuffleCross2)
         ),
         _mm_mul_ps
         (
            _mm_shuffle_ps(*quadA, *quadA, maskShuffleCross2),
            _mm_shuffle_ps(*quadB, *quadB, maskShuffleCross1)
         )
      )
   );
}
如您所见,其中有四个
\u mm\u shuffle\u ps
,我想知道是否可以用
\u mm\u unpachi\u ps
\u mm\u unpaclo\u ps
的组合来替换它们,它们分别返回
a2 a3 b2 b3
a0 a1 b0 b1
,速度稍快

我无法在纸上找到答案,但我想到了一个解决办法。如果让计算机强制执行所需的步骤怎么办?只需循序渐进地通过不同的选项,看看什么能给出正确的答案

我让它使用乘法运算,当我希望它返回(3,12,27,0)时,它会返回这个值:

很好,如果我自己这么说的话

然而,当我想要实现divide时,我遇到了一个问题。乘法不仅需要调用乘法,还需要调用除法。好的,我们把除法放在乘法之上。但是divide不仅仅需要调用divide,它还需要调用multiply,这在脚本中是较低的,所以它还不存在

我从Visual C++中的一个空控制台应用开始,把所有的东西都放在四个测试中。 如何确保这两个函数可以相互调用


提前感谢。

请确认,您的问题是这样安排的函数不起作用,因为在您从
getFoo
调用它时,
doStuff
没有声明:

int getFoo(int bar) {
    doStuff(bar + 1);
}

int doStuff(bar) {
    if (bar == 2) {
        return getFoo(bar);
    }

    return bar * 8;
}
要解决此问题,您需要对
intdostuff(int)
进行一次修改。通常,这是通过头文件完成的——无论哪种方式,您只需要添加如下内容:

// #includes, etc. go here

int doStuff(int);
int getFoo(int);

// methods follow

当然D我刚刚忘记了,但我知道堆栈溢出的人工搜索引擎可以帮我解决问题。;)
// #includes, etc. go here

int doStuff(int);
int getFoo(int);

// methods follow