MSVC 2013 Ultimate w / Update 4
不明白为什么我在这个看似简单的例子中得到这个错误
info C5002:由于原因' 1200'
,循环未向量化是
1200循环包含循环携带数据依赖
我不知道循环的迭代如何相互干扰。
edit and UserChange
编辑:通过http://blogs.msdn.com/b/nativeconcurrency/archive/2012/05/08/auto-vectorizer-in-visual-studio-11-rules-for-loop-body.aspx来判断,这似乎是"示例1 - 令人尴尬的并行"的一个例子,但它的行为就像它认为阵列是不安全的别名,这令人费解我
Edit2:如果有人可以在这样一个看似简单的例子中分享自动矢量化失败的原因会很好,但是在修补它一段时间之后,我选择自己采取统治
WordsOperation.java
答案 0 :(得分:0)
不确定您的编译器是否支持它,但为了强制执行一些正确的矢量化,您可以这样做:
void PhysicsSystem::Update( double dt ) {
double *tx=mTmp.mX, *ty=mTmp.mY, *tz=mTmp.mZ;
double *px=mPos.mX, *py=mPos.mY, *pz=mPos.mZ;
double *vx=mVel.mX, *vy=mVel.mY, *vz=mVel.mZ;
#pragma omp simd aligned( tx, ty, tz, px, py, pz, vx, vy, vz )
for ( int i = 0; i < MaxEntities; ++i ) {
tx[ i ] = px[ i ] + vx[ i ] * dt;
ty[ i ] = py[ i ] + vy[ i ] * dt;
tz[ i ] = pz[ i ] + vz[ i ] * dt;
}
}
然后,您需要启用对该指令的OpenMP支持。