std::array<int, 4> a = {1, 1, 1, 1};
std::array<int, 4> b = { 1, 2, 3, 4 };
std::array<int, 4> c;
bool res = false;
for (int i = 0; i < a.size(); i++) {
a[i] = rand() % 10;
}
for (int i = 0; i < 4; i++) {
c[i] = a[i] + b[i];
}
Умный компилятор может хорошо скомпилировать вышеуказанное в SIMD. Но то, как написать сравнение, как показано ниже, также может быть хорошо скомпилировано в SIMD;
res = a[0] <= b[0] && a[1] <= b[1] && a[2] <= b[2] && a[3] <= b[3]; // not compile to SIMD
__attribute__ ((vector_size (16)))
, если вы используете gcc? - person phuclv   schedule 03.03.2018movmskps
-вывода результата сравнения из вектора и скалярного сравнения, это не то, что я когда-либо видел, как MSVC делает сам по себе. - person harold   schedule 03.03.2018