Редукционный код для CUDA GPU в конечно-элементной сборке - PullRequest
1 голос
/ 12 ноября 2011

У нас есть файл неструктурированной тетраэдрической сетки, содержащий следующий формат:

element-ID  nod1 nod2 nod3 nod4

1            452  3434 322 9000

2           2322   837 6673 2323

.
.
.

300000

Итак, функция C

calc()
{

   for (int i=1;i<=no-of-elements;i++)
   {
      n1=nod1[i];
      n2=nod2[i];
      n3=nod3[i];
      n4=nod4[i];

      ax[n1] += some code;

      ax[n2] += some code;

      ax[n3] += some code;

      ax[n4] += some code;

   }

}

Как реализовать вышеуказанный код в CUDA на Tesla в режиме без гонки или любым другим альтернативным способом на CUDA?

1 Ответ

1 голос
/ 12 ноября 2011

Лучшее решение - использовать раскраску графа для разбиения сетки на субдомены.Каждый цвет обладает тем свойством, что элементы в нем могут быть собраны параллельно без использования памяти.Используя этот подход, вам требуется только столько проходов через сетку, сколько есть цветов для завершения сборки.

Существует много литературы по параллельной конечной сборке элементов и множество очень хороших кодов разделения графовдоступно (например Метис ).Google ученый, вероятно, лучшее место, чтобы начать знакомство с техникой.

...