gpt4 book ai didi

c++ - MSVC 2013 : crash at addpd xmm6, xmmword ptr [rax+rbx*8]

转载 作者:太空宇宙 更新时间:2023-11-04 11:40:42 28 4
gpt4 key购买 nike

自从我使用 MSVC 2013 以来,我的应用程序在执行以下代码时崩溃了(稀疏矩阵乘以 vector ,伪代码:A = this * pVector):
complex<double> x = (A.getValue(lRow) + (mValues[lIdx] * pVectorB->getValue(lCol)));
之前我用的是MSVC 2005,应用运行的很好。
抛出异常 ( First-chance exception at 0x000000014075D1D2 in psc64.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.)。
我跟踪 assembly 到:
addpd xmm6, xmmword ptr [rax+rbx*8]
它只在优化/O2(最大化速度)时崩溃,但在没有优化/Od 时不会崩溃。
我也可以避免在方法pVectorB->getValue(lCol)中添加代码(cout<<“bla bla”)时发生崩溃。 .
我相信这可能是未初始化变量的问题。但我找不到任何。因此,我研究了反汇编。
我检查了XMM6和ptr [rax+rbx*8]。它们在没有崩溃(cout<<"bla bla")和崩溃的情况下是一样的。
除了 XMM6 和 ptr [rax+rbx*8] 的值之外,还有什么我应该寻找的吗?
我很长一段时间以来一直在寻找问题,但找不到任何提示来追踪问题到我必须更正的代码行。
非常感谢任何帮助。谢谢。

获取值的代码:



<pre><code>template <class T> class Vector
{ const T& getValue(const int pIdx) const
{
if(false == checkBounds(pIdx)){
throw MathException(__FILE__, __LINE__, "T& Vector<class T>::getValue(const pIdx): checkBounds fails pIdx = %i", pIdx);
}
return mVal[pIdx];
}

bool checkBounds(const int pIdx)const
{
bool ret = true;
if(pIdx >= mMaxSize){
DBG_SEVERE2("pIdx >= mMaxSize, pIdx = %i, mMaxSize = %i", pIdx, mMaxSize);
ret = false;
}
if(pIdx < 0){
DBG_SEVERE1("pIdx < 0, pIdx = %i", pIdx);
ret = false;
}
return ret;
}
}
</code></pre>



配置mVal :
<br/>



<pre><code>void* lTmp= calloc((4 * sizeof(complex<double>))+4, 1);
((char*)lTmp)[0] = 0xC;
((char*)lTmp)[1] = 0xC;
((char*)lTmp)[(4 * sizeof(complex<double>)) + 2] = 0xC;
((char*)lTmp)[(4 * sizeof(complex<double>)) + 3] = 0xC;
mVal= (void*)(((char*)lTmp) + 2)
</code></pre>



解决方案:
正如所建议的那样,它可以在所需数组前后没有 2 个字节的情况下工作 ( mVal )。但它也适用于数组前后 16 字节的倍数。

最佳答案

当对 SSE 指令使用内存操作数时,如 addpd xmm6, xmmword ptr [rax+rbx*8] 内存操作数必须对齐。存在未对齐的load指令:您可以从[rax+rbx*8]movdqu然后对寄存器进行操作。但是如果使用内存形式,对齐就很重要了。优化标志可能改变了数组的对齐方式。或者它可能已将负载折叠到内存操作数(在某些情况下更快)并以这种方式导致问题。

关于c++ - MSVC 2013 : crash at addpd xmm6, xmmword ptr [rax+rbx*8],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510945/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com