gpt4 book ai didi

c++ - _mm_store_si128 抛出异常

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:57 25 4
gpt4 key购买 nike

所以我一直在尝试自己学习 SEE 优化,但我不太明白,我认为一个简单的函数只清零内存很容易实现,所以我继续尝试实现它我自己。

这是从缓冲区开始循环到缓冲区结束并使用 _mm_store_si128 将其清零的零内存函数。

bool zeromem( byte * _dest, uint _sz )
{
if ( _dest == nullptr )
return false;
__m128i zero = _mm_setzero_si128( );

for ( auto i = rcast<__m128i*>( _dest ),
end = rcast<__m128i*>( _dest + _sz );
i < end; ++i )
{
_mm_store_si128( i, zero );
}
return true;
}

异常抛出:访问冲突 (0x00000) 即使指针不是 0x00000。

我做的测试只是分配1024字节的内存,然后调用zeromem。

第一次迭代时抛出异常。

最佳答案

_mm_store_si128 转换为 MOVDQA并要求操作数在 16 字节边界上对齐,这可能会导致异常。 IIRC,例如 Windows 没有实现显式对齐异常,因此它会导致访问冲突。关于 memset 实现,您可能对 this post comparing different approaches to filling a memory block with bytes 感兴趣.

关于c++ - _mm_store_si128 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35228933/

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