【发布时间】:2017-10-28 06:34:50
【问题描述】:
我正在查看其他人的代码,目前正试图找出_mm_load_si128 存在的原因。
基本上,我尝试替换
_ra = _mm_load_si128(reinterpret_cast<__m128i*>(&cd->data[idx]));
与
_ra = *reinterpret_cast<__m128i*>(&cd->data[idx]);
它的工作原理和执行完全相同。
我认为对于较小的类型存在加载函数只是为了方便,因此人们不必手动将它们打包到连续内存中,但对于已经按正确顺序的数据,何必呢?
_mm_load_si128 还有其他功能吗?或者它本质上只是一种迂回的赋值方式?
【问题讨论】:
-
它可能是(或扩展为)一些内置编译器。你用的是什么 C++ 编译器?
-
@BasileStarynkevitch Visual Studio 自带的
-
不是
_ra = reinterpret_cast<__m128>(cd->data[idx])也可以吗? -
@Walter 不,您不能在对象上使用
reinterpret_cast,即使它们是占位符。见en.cppreference.com/w/cpp/language/reinterpret_cast -
@plasmacel 正确。但是,可以使用对引用的强制转换。
标签: c++ x86 sse simd intrinsics