小编Chm*_*lok的帖子

是否有可能在 AVX/SSE 中获得多个正弦?

我正在尝试编写一个 C++ 程序,它启动我在 x64 汇编程序中编写的函数。我想稍微加快速度(并利用 CPU 功能),所以我选择使用向量运算。

问题是,我必须将正弦乘以一个整数,所以我必须首先计算正弦。在 SSE/AVX 中可以做到这一点吗?我知道指令fsin,但它不仅在 FPU 中,而且它一次只计算 1 个正弦。所以我必须将它推入 FPU,调用fsin,将其从 FPU 弹出到内存,然后将其放入 AVX 寄存器。在我看来,这不值得这么麻烦。

windows trigonometry sse x86-64 avx

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

初始化类成员的更好的做法是什么?

我们假设我有一个看起来像这样的A类:

class A {
public:
  public A(bool someFlag, Params someParams);
private:
  vector<string> texts;
}
Run Code Online (Sandbox Code Playgroud)

我想提取初始化texts成员字段的逻辑.我想出了两个想法:

  1. 第一个想法 - 静态的私有成员函数,它将返回所需的文本向量.

    A::A(bool someFlag, Params someParams) {
      if (someFlag)
        texts = createSomeTexts(someParams);
      else
        texts = createOtherTexts(someParams);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 第二个想法-这将分配给文本类成员的期望矢量私有成员函数本身.

    A::A(bool someFlag, Params someParams) {
      if (someFlag)
        createAndAssignSomeTexts(someParams);
      else
        createAndAssignOtherTexts(someParams);
    }
    
    Run Code Online (Sandbox Code Playgroud)

当然,两个版本都能正确完成工作,但我想知道对于这些情况的建议方法是什么.此外,如果成员初始化需要更多参数(尤其是作为成员存储在类中的参数),则该方法应该更改.

c++ c++17

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

标签 统计

avx ×1

c++ ×1

c++17 ×1

sse ×1

trigonometry ×1

windows ×1

x86-64 ×1