假设你打电话 _mm512_mask_store_ps,从 CPU 的写入缓冲区的角度来看,它是作为大小为 64 字节的存储执行(带有某种掩码)还是在内部作为大小为 4 字节的多个存储执行?
为了防止store-to-load转发停顿,必须将存储的粒度(大小)与后续加载到同一内存位置的粒度相匹配。希望这个问题是有道理的,我不是 CPU 架构专家。
是否有关于 AVX2 收集延迟的任何数据?
(例如 _mm256_i32gather_ps 指令访问单个缓存行)
我设法将我的案例减少到以下最简单的代码:
#include <type_traits>
auto call(const auto& f) -> typename std::result_of<decltype(f)()>::type
{
return f();
}
int main()
{
return call([] { return 0; });
}
Run Code Online (Sandbox Code Playgroud)
gcc-4.9.2和gcc-5.0.0都没编译!
两人都认为"call"应该返回一个lambda函数!不知道"call"返回一个int.
这是编译器中的错误还是我的c ++关闭?非常感谢.