【问题标题】:What is an example program that realizes a performance gain by calling _mm_stream_si64x()? [closed]通过调用 _mm_stream_si64x() 实现性能提升的示例程序是什么? [关闭]
【发布时间】:2012-04-17 13:59:46
【问题描述】:

通过调用 _mm_stream_si64x() 实现性能提升的示例程序是什么?

关于 _mm_stream_si64x 的 MSDN 文章:http://msdn.microsoft.com/en-us/library/35b8kssy.aspx

【问题讨论】:

  • 什么意思?你想让我们写吗?
  • 我的意思和问题的措辞完全一样。问题的改写:由于没有调用 _mm_stream_si64x() 而导致不必要的慢的示例程序是什么?
  • 我对在这个问题上收到的多次反对票很感兴趣。有人愿意解释吗?我永远不会想到一个关于如何最好地调用内部函数的问题会引起反对。
  • 我认为这主要是因为我的问题含糊不清,你实际上所说的程序是什么意思?可能会问一些类似“在什么情况下会影响性能”的问题,看看 ppl 是否可能有一些可以给出示例的 sn-ps 代码。好的问题通常是带有解决方案的问题,并且您可以在提出问题之前告诉该人已经完成了大部分工作:)

标签: c++ visual-c++ intrinsics


【解决方案1】:

正如参考资料所说,_mm_stream_si64x 内部直接写入 Dest 指向的内存位置,而不将 Dest 写入缓存。因此,如果您想将数据复制到 Dest 指针,但不打算在很久以后从 Dest 指针访问数据,那么这个内在函数将比等效的 _mm_stream_si64 内在函数“实现性能提升”。

【讨论】:

    【解决方案2】:

    这是一个示例,假设源和目标足够大:

    const char *source;
    char *destination;
    for (size_t offset= 0; offset<100*1024*1024; offset+= 64)
    {
        *(__int64 *)(destination + offset)= *(__int64 *)(source + offset);
    }
    

    如果您手动执行此操作而不是使用 _mm_stream_si64x,则可以有效地刷新缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多