小编Com*_*ist的帖子

确定哪个内在标志被激活

在详细说明细节之前,我有以下功能,

令 _e, _w 为大小相等的数组。令 _stepSize 为 float 类型。

void GradientDescent::backUpWeights(FLOAT tdError) {
  AI::FLOAT multiplier = _stepSize * tdError;
  for (UINT i = 0; i < n; i++){
    _w[i] += _e[i]*multiplier
  }

  // Assumed that the tilecode ensure that _w.size() or _e.size() is even.
}
Run Code Online (Sandbox Code Playgroud)

这个函数很好,但是如果一个CPU有内在的,特别是对于这个例子,SSE4,那么下面的函数可以让我减少几秒钟的时间(对于相同的输入),即使-O3 gcc标志已经包含在两个和额外的-msse4a中为此添加了。

void GradientDescent::backUpWeights(FLOAT tdError) {
  AI::FLOAT multiplier = _stepSize * tdError;
  __m128d multSSE = _mm_set_pd(multiplier, multiplier);
  __m128d* eSSE = (__m128d*)_e;
  __m128d* wSSE = (__m128d*)_w;
  size_t n = getSize()>>1;
  for (UINT i = 0; i …
Run Code Online (Sandbox Code Playgroud)

c++ gcc sse intrinsics

1
推荐指数
1
解决办法
977
查看次数

标签 统计

c++ ×1

gcc ×1

intrinsics ×1

sse ×1