Я заинтересован в оптимизации своего кода для многопоточных вычислений. С точки зрения кэша, конвейеризации или любых других аспектов доступа к памяти, как следующие примеры отличаются по экономии ресурсов:
Пример 1
struct something{
float a;
float b;
int c;
bool d;
};
vector <something> vec(n, something());
for(int q=0; q<n; q++)
{
vec[q].a = expression1;
vec[q].b = expression2;
vec[q].c = expression3;
vec[q].d = expression4;
}
Пример 2
struct something{
float a;
float b;
int c;
bool d;
};
vector <something> vec(n, something());
for(int q=0; q<n; q++)
vec[q].a = expression1;
for(int q=0; q<n; q++)
vec[q].b = expression2;
for(int q=0; q<n; q++)
vec[q].c = expression3;
for(int q=0; q<n; q++)
vec[q].d = expression4;
Пример 3
vector <float> a(n);
vector <float> b(n);
vector <int> c(n);
vector <bool> d(n);
for(int q=0; q<n; q++)
a[q] = expression1;
for(int q=0; q<n; q++)
b[q] = expression2;
for(int q=0; q<n; q++)
c[q] = expression3;
for(int q=0; q<n; q++)
d[q] = expression4;
Также, есть ли лучшие способы решения вышеупомянутых задач?