Здравствуйте, kot--, Вы писали:
K> задача — число-дробилка.
K> код, выполняющийся в два потока, находится в одном из методов класса. объект создается один. Все используемые в расчете данные были продублированы двумя способоми — создание еще одной размерности у массивов и переменных либо тупое дублирование array0 и array1.
Надо продублировать как:
struct X
{
// данные для первого потока
int var1_1;
int var2_1;
double var3_1;
int* var4_1;
...
double* varN_1;
// ВАЖНО!!!
char pad [CACHE_LINE_SIZE];
// данные для второго потока
int var1_2;
int var2_2;
double var3_2;
int* var4_2;
...
double* varN_2;
};
Плюс, если выделяешь данные динамически, то выделять тоже с паддингом, что бы данные разных потоков не оказались на одной кэш-линии:
double* data = (double*) malloc (SIZE * sizeof(double) + CACHE_LINE_SIZE);