Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用步幅时出现noalias()问题_C++_Eigen_Eigen3 - Fatal编程技术网

C++ 使用步幅时出现noalias()问题

C++ 使用步幅时出现noalias()问题,c++,eigen,eigen3,C++,Eigen,Eigen3,我正在使用Eigen进行计算流体动力学应用,我注意到了一个bug。我对代码进行了抽象,这样任何人都可以复制它。我使用的是Eigen 3.3.7 下面的代码复制了该问题 #包括 #包括 #包括“本征/本征” 使用名称空间std; 使用名称空间特征; int main(){ 常数int dim=3; const int nb=功率(3,dim); 常数int nq=功率(2,dim); 向量A(dim*nb); 对于(uint i=0;i 材料B(D.数据(),尺寸,nb,外层(nq*nb)); M

我正在使用Eigen进行计算流体动力学应用,我注意到了一个bug。我对代码进行了抽象,这样任何人都可以复制它。我使用的是Eigen 3.3.7

下面的代码复制了该问题

#包括
#包括
#包括“本征/本征”
使用名称空间std;
使用名称空间特征;
int main(){
常数int dim=3;
const int nb=功率(3,dim);
常数int nq=功率(2,dim);
向量A(dim*nb);
对于(uint i=0;i
材料B(D.数据(),尺寸,nb,外层(nq*nb));
Map
材料C(C.数据(),尺寸,尺寸,内跨距(nq));
mat_C.noalias()=mat_A*mat_B.transpose();

cout就我而言,通过从gitlab存储库中提取主分支解决了此问题。它可能与此相关。感谢您的帮助。

亲爱的Kihiro,请解释您希望更新我的帖子的结果。无论有无noalias()因为LHS和RHS之间没有内存混叠。问题似乎来自矩阵mult忽略版本中
noalias
的跨步的结果(如果在第一个mult之后查看
C
向量,它有正确的数字,但不在正确的位置…)赋值的代码路径似乎不同,noalias案例调用了
paralelize_gemm
,它假设您的值被打包在一起,因此忽略了跨步。感谢您提供的信息。您知道在使用跨步时避免使用临时跨步的方法吗?
12402     0     0
31356     0     0
50310     0     0

      12402      164034      315666
      31356      497916      964476
      50310      831798 1.61329e+06