从功能的脚本调用一个函数在脚本中低高
-
21-09-2019 - |
题
我试图想出一个办法让电脑为我做了一些工作。我使用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)
)
)
);
}
你可以看到,有四个_mm_shuffle_ps
在那里,我不知道如果我能与分别这回_mm_unpackhi_ps
和_mm_unpacklo_ps
a2 a3 b2 b3
和a0 a1 b0 b1
的组合代替他们,是稍快。
我不能弄清楚在纸上,但我想的溶液。如果让电脑暴力破解的步骤,需要什么样的?通过不同的场所仅有一步递归,看看给出了正确的答案。
我得到它与乘法工作,当我希望它返回它返回这个(3,12,27,0):
startA = _mm_set_ps(1.00, 2.00, 3.00, 0.00);
startB = _mm_set_ps(3.00, 3.00, 3.00, 0.00);
result0 = _mm_mul_ps(startA, startB);
// (3.00, 6.00, 9.00, 0.00)
result1 = _mm_mul_ps(startA, result0);
// (3.00, 12.00, 27.00, 0.00)
很不错,如果我这样说自己。
然而,当我想要实现除法我无意中发现的问题。乘不只是要乘调用,它也有叫鸿沟。好了,所以我们把上面的乘除。但是鸿沟并不只需要调用鸿沟,它也有多次通话,这是在脚本较低,所以它不存在。
我开始与在Visual C ++中QuadTests.cpp空控制台应用程序,把一切。
我如何确保这两个功能可以相互调用?
预先感谢。
解决方案
只是为了确认,你的问题是安排像这样的功能不起作用,因为doStuff
不是由你getFoo
调用它的时候宣布:
int getFoo(int bar) {
doStuff(bar + 1);
}
int doStuff(bar) {
if (bar == 2) {
return getFoo(bar);
}
return bar * 8;
}
要解决这个问题,你需要做一个向前声明int doStuff(int)
的。通常情况下,这是一个头文件来完成的 - 无论哪种方式,你只需要添加这样的:
// #includes, etc. go here
int doStuff(int);
int getFoo(int);
// methods follow
不隶属于 StackOverflow