ХЕТЕРОГЕННО ПАРАЛЕЛНО ИЗЧИСЛЕНИЕ НА ПРИМЕР ЗА РЕШАВАНЕ НА ПЪЛНАТА СИСТЕМА ОТ УРАВНЕНИЯ НА НАВИ-СТОКС

Решаване на пълната система от уравнения на Навие-Стокс с помощта на метода на мрежата

Разглежда се пълната система от уравнения на Навие-Стокс, чиито решения описват потоците на свиваем вискозен топлопроводим идеален газ. Системата е преминала от променлива плътност и температура до специфичен обем и налягане. Това позволява решаването на система от частични диференциални уравнения в нормална форма по отношение на производните по време.

В двумерния случай за безразмерни променливи тази система има формата [1]:

пример
(1)

Тук е времето и са независими пространствени променливи. Освен това е специфичният обем газ, е плътността на газа, е налягането, е векторът на скоростта на газа с неговите проекции върху декартовите координатни оси. Постоянните коефициенти в уравненията са коефициентите на вискозитет и топлопроводимост, е индексът на политропност на идеалния газ с уравненията на състоянието, записани в безразмерни променливи За система (1) се разглежда начално-гранична задача. В обл., начални условия на формата

(2)

А също и граничните условия

(3)

Първото от граничните условия (3) осигурява адхезия на газ в границите на региона, а второто осигурява топлоизолация на границите. В съответствие с уравнението на състоянието, тогава Следователно, за да се осигури топлоизолация, е достатъчно да се вземе

При конструирането на решения с помощта на диференциални схеми по отношение на пространствени променливи се въвежда равномерна решетка, . За дискретизиране на производните са избрани следните стандартни изрази (4).

(4)

Равенството на нула на температурната производна на границите на областта се апроксимира с уравненията:

(5)

Схема за решаване на проблем на GPU с паралелизиране

  • хост (хост) = централен процесор (CPU);
  • устройство (устройство) = графичен процесор (GPU);
  • поток (поток) - логическа последователност от зависими асинхронни операции, независими от операции в други потоци;
  • нишка (нишка) - елементарен паралелен процес. Всички нишки са групирани в йерархия - мрежа/блок/нишка
  • grid (grid) - набор от процеси, породени от стартиране на ядрото
  • блок (блок) - набор от нишки, нишките в блок могат да бъдат синхронизирани и могат да имат споделена споделена (отделяща) памет.

Нишките в блокове и блокове в мрежа могат да бъдат представени като едно-, дву- или триизмерна мрежа, ние ще разгледаме едномерна мрежа и блок.

  • основа (основа) - група нишки, размерът на основата е 32 нишки. Всички нишки на една деформация се изпълняват едновременно и синхронно (SIMD) на техния мултипроцесор.
  • ядро (ядро) - функция, изпълнявана паралелно от нишки на GPU;

Програмата се състои от две части:

  • хост код (контролен код), написан на обикновен C/C++, се изпълнява на CPU
  • device-code (хардуерен код) на GPU, се изпълняват специални функции - ядра (kernel) и функции, извикани вътре в тях.

Ядрото е функция за поток - голям брой нишки (нишки) изпълняват тялото на ядрото (ядрото) паралелно. Ядрото се извиква от страна на процесора, като се посочва броя на блоковете и броя на нишките във всеки блок, които ще го изпълнят, както и номера на нишката, в която ще се изпълни ядрото. Ако не е указан номер на нишка, тогава ядрото ще работи на нишка нула. Нулевата нишка винаги е синхронна.

Потоците са или синхронни, или асинхронни. Синхронна нишка означава, че след извикване на ядрото процесорът ще изчака GPU да завърши работата си и след това ще продължи алгоритъма. Ако нишката е асинхронна, тогава процесорът, след извикване на ядрото, ще продължи да изпълнява алгоритъма, без да чака завършването на работатаGPU.

Имаме слой от елементи със стъпка и съответно [3,4]. Въз основа на петте елемента на този слой, елементите на следващия слой се изчисляват с времева стъпка. При процесора проблемът се решава чрез въвеждане на двоен цикъл. Идеята за решаване на проблема с паралелизиране се крие във факта, че всички елементи на слоя се изчисляват едновременно, тоест на GPU, в рамките на първия етап, се стартира една нишка с брой нишки, равен на , които паралелно изчисляват елементите на следващия слой със стъпка . Процесът е показан на фигура 1. По цветове, черен - изчислен, бял - за изчисление, жълт - изчислен.

хетерогенно

Фиг.1 Първият етап е намирането на елементи в следващия слой на GPU.

Етап 2 е изчисляване на граничните елементи. Граничните елементи се изчисляват в две асинхронни нишки (първата нишка е маркирана в зелено, втората нишка е в червено), първата има нишки и всяка нишка изчислява два елемента, втората нишка има нишки и всяка нишка също изчислява два елемента. За по-голяма яснота процесът е показан на фигура 2.

пълната

Фиг.2 Вторият етап е намирането на крайни елементи на GPU.

Ъгловите елементи се изчисляват в края на втория етап от нишката с глобален индекс „0“.

Ето списък на извикванията на ядрото (фиг. 3)[5,6], за да намерите елементите на слоя. Както можете да видите от списъка, първото извикване на ядрото се извършва в нулева нишка, нулевата нишка е синхронна, сякаш cudaDeviceSynchronize() (функция за синхронизиране) се вмъква преди и след всяка CUDA операция. Второто и третото извикване на ядрото се случват на асинхронни нишки, т.е. те се изпълняват по едно и също време.

хетерогенно

Ориз. 3 - Изброяване на организацията на извикването на ядра.

Ефективност на използването на CPU и CPU+GPU

В табл. 1 е показан софтуерът и хардуерът, на които са направени изчисленията. В табл. 2получените резултати от изчисленията.