Re[3]: многопоточность и скорость
От: remark Россия http://www.1024cores.net/
Дата: 10.02.09 09:08
Оценка:
Здравствуйте, 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);



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.