我目前正在开发一个开源的3D应用程序框架的C++(用C++ 11).我自己的数学库的设计类似于XNA数学库,同时考虑了SIMD.但目前它并不是很快,而且它在内存中存在问题,但在另一个问题上更多.
几天前我问自己为什么要编写自己的SSE代码.编译器还可以在启用优化时生成高优化代码.我也可以使用GCC的" 向量扩展 " .但这一切都不是真正的便携式.
我知道当我使用自己的SSE代码时,我有更多的控制权,但通常这种控制是不公平的.
SSE的一个大问题是使用动态内存,这在内存池和面向数据的设计的帮助下,尽可能地受到限制.
现在问我的问题:
我应该使用裸SSE吗?也许是封装的.
__m128 v1 = _mm_set_ps(0.5f, 2, 4, 0.25f);
__m128 v2 = _mm_set_ps(2, 0.5f, 0.25f, 4);
__m128 res = _mm_mul_ps(v1, v2);
Run Code Online (Sandbox Code Playgroud)或者编译器应该做脏工作吗?
float v1 = {0.5f, 2, 4, 0.25f};
float v2 = {2, 0.5f, 0.25f, 4};
float res[4];
res[0] = v1[0]*v2[0];
res[1] = v1[1]*v2[1];
res[2] = v1[2]*v2[2];
res[3] = v1[3]*v2[3];
Run Code Online (Sandbox Code Playgroud)或者我应该使用SIMD和其他代码吗?就像具有SIMD操作的动态容器类一样,需要额外的load
和store
指令.
Pear3D::Vector4f* v1 = new Pear3D::Vector4f(0.5f, …
Run Code Online (Sandbox Code Playgroud)我在MS excel中尝试使用替换字符时遇到了麻烦.帮助说*
,?
可以替换字符,但如果我尝试使用它们IF
,我得不到正确的结果.例如:
A1="something"
=IF(A1="*mething";"yes";"no")
Run Code Online (Sandbox Code Playgroud)
我总是得到no
......如何*
正确使用?