Скачать 0.5 Mb.
|
3.3 Результаты расчета и полученное ускорениеДля расчёта единичных усредненных траекторий было выбрана длительность импульса τ = 5 T, где Т – период внешнего поля, а шаг по времени выбирался, чтобы удовлетворить как условиям метода МК [20], так и обеспечить точность метода Рунге–Кутта четвертого порядка применявшегося при численном моделировании динамики между скачками. При данных параметрах наличие статистических ошибок не должно превышать 5%, что приемлемо для извлечения необходимой физической информации из такого рода систем. На рис. 8 приведен пример квантовой траектории, описывающей динамику сверхпроводящего кубита в сильном поле с учётом релаксационных эффектов при фиксированных значениях управляющего параметра ε – ответственного за постоянное магнитное поле в системе и А амплитуде переменного поля, измеряемых в ГГц. Рис. 8 Населенность верхнего уровня кубита (усредненная квантовая траектория). В Табл. 3. представлены характерные времена, требуемые для вычисления c одинарной точностью населенности верхнего уровня кубита на CPU (Intel Core i7 960 использовалось 1 ядро) и на GPU (Nvidia Tesla С1060). Версия для GPU создана с использованием технологии CUDA. Видно, что графические ускорители позволяют существенно сократить время расчета, и поэтому их использование является целесообразным при решении данной задачи. Как видно из табл. 4 ускорение относительно CPU растет в зависимости от числа реализаций и достигает примерно 170 раз. Рост ускорения от реализаций обусловлен тем, что время расчета одной траектории мало, а при «перегрузке» графического ускорителя наступает эффективная загруженность и достигается оптимальная работа. Таблица 4. Время расчета единичной усредненной по реализациям квантовой траектории на CPU и GPU
Для расчета интерференционной картины (см. рис.9), наблюдаемой в недавних экспериментах [17-19], была выбрана 2D-сетка (А, ε0) 100х100 точек, таким образом, было необходимо рассчитывать 10000 усредненных квантовых траекторий (каждая из которых была усреднена по 15360 реализациям) и, соответственно, вероятность населенности возбужденного уровня в момент окончания длительности импульса. Рис. 10 Результаты расчёта интерференционной картины для возбужденного уровня системы. На рис. 10 и в табл. 5 представлены данные о приросте производительности вычислений в зависимости от количества используемых графических ускорителей, данная зависимость аппроксимируется линейной, что говорит о хорошем масштабировании задачи при переходе к множеству GPU, эффективность при использовании 20 GPU составляет 97%. Рис. 10 Ускорение работы алгоритма в зависимости от числа использованных GPU по сравнению с одним GPU. Таблица 5. Время расчета и ускорение алгоритма при одновременном расчёте 10000 единичных усредненных траекторий на GPU c применением технологии MPI
ЗАКЛЮЧЕНИЕ Настоящее научно–методическое пособие посвящено применению гетерогенных вычислительных систем для моделирования физических процессов. В работе описаны основные принципы работы с технологией CUDA, установка и компиляция программы, описано лабораторное оборудование «Кластер НИФТИ ННГУ», возможности доступа к оборудованию для расчетов. А также представлена математическая модель и создан программный комплекс, который реализует параллельные вычисления на многопроцессорном кластере (с использованием протокола MPI) и графических процессорных устройств (с использованием технологии CUDA). Используя разработанный программный комплекс, в качестве примера, выполнено численное моделирование диссипативной динамики одиночных квантовых систем на основе квантового метода Монте-Карло на примере кубитов во внешних полях. Показано, что применимость GPU ускорителей позволило существенно ускорит расчеты, так продемонстрировано ускорение ~170 раз по сравнению с последовательной версией на CPU. Развитая в работе техника расчета диссипативной динамики состояний кубитов естественным образом может быть распространена на более сложные системы. Таким образом, в работе показана эффективность и целесообразность проведения расчетов сложных физических задач на GPU ускорителей, что позволить проводить численные физические эксперименты за разумное время. Литература
ПРИЛОЖЕНИЕ А. Пример программы на CUDA: расчет диссипативной динамики кубита квантовым методом Монте-Карло Программа состоит из трех модулей main.cpp, gpu.cu, cpu.cpp Модуль main.cpp #include "axpy.h" #include "cudacomplex.h" #include "math.h" #include "fstream" #include #include #include #include "fstream" #include #include #include #include #include #include #define Pi 3.1415926536 #define WIN32_LEAN_AND_MEAN using namespace std; void main() { int T, N; N = 4000; T = 1000; float *av_a, *av_b, *av_a_dev, *av_b_dev, *rand_dev, *rand; singlecomplex *a_host, *b_host, *a_dev, *b_dev; av_a = new float[T]; av_b = new float [T]; rand = new float[T * N]; a_host = new singlecomplex[T * N]; b_host = new singlecomplex[T * N]; for (int i = 0; i<= T-1; i++) { av_a[i] = 0; av_b[i] = 0; } for (int i = 0; i<= T * N - 1; i++) { rand[i] = 0.f; a_host[i] = make_singlecomplex(1, 0); b_host[i] = make_singlecomplex(0, 0); } CUDA_SAFE_CALL( cudaMalloc((void**) &av_a_dev, T * sizeof *av_a_dev)); CUDA_SAFE_CALL( cudaMalloc((void**) &av_b_dev, T * sizeof *av_b_dev)); CUDA_SAFE_CALL( cudaMalloc((void**) &rand_dev, T * N * sizeof *rand_dev)); CUDA_SAFE_CALL( cudaMalloc((void**) &a_dev, T * N * sizeof *a_dev)); CUDA_SAFE_CALL( cudaMalloc((void**) &b_dev, T * N * sizeof *b_dev)); CUDA_SAFE_CALL( cudaMemcpy(av_a_dev, av_a, T * sizeof *av_a_dev, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL( cudaMemcpy(av_b_dev, av_b, T * sizeof *av_b_dev, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL( cudaMemcpy(rand_dev, rand, T * N * sizeof *rand_dev, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL( cudaMemcpy(a_dev, a_host, T * N * sizeof *a_dev, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL( cudaMemcpy(b_dev, b_host, T * N * sizeof *b_dev, cudaMemcpyHostToDevice)); volatile DWORD dwStart; dwStart = GetTickCount(); montecarlo(av_a_dev, av_b_dev, a_dev, b_dev, rand_dev, N, T); printf_s("For %d steps, %d milliseconds\n", N, GetTickCount() - dwStart); _getch(); CUDA_SAFE_CALL( cudaMemcpy( av_a, av_a_dev, T * sizeof *av_a_dev, cudaMemcpyDeviceToHost)); CUDA_SAFE_CALL( cudaMemcpy( av_b, av_b_dev, T * sizeof *av_b_dev, cudaMemcpyDeviceToHost)); CUDA_SAFE_CALL( cudaMemcpy(rand, rand_dev, T * N * sizeof *rand_dev, cudaMemcpyDeviceToHost)); CUDA_SAFE_CALL( cudaMemcpy( a_host, a_dev, T * N * sizeof *a_dev, cudaMemcpyDeviceToHost)); CUDA_SAFE_CALL( cudaMemcpy( b_host, b_dev, T * N * sizeof *b_dev, cudaMemcpyDeviceToHost)); for (int i = 0; i<= T-1; i++) for (int m = 0; m <= N-1; m++){ av_a[i] = a_host[m*T + i].abs() * a_host[m*T + i].abs()+ av_a[i]; av_b[i] = b_host[m*T + i].abs() * b_host[m*T + i].abs()+ av_b[i]; } //печать усредненных значений коэффициентов abs(a)^2, abs(b)^2 в файлы ofstream outA("AverageA.txt",ios::out); ofstream outB("AverageB.txt",ios::out); for (int i = 0; i<= T-1; i++) { outA << i << " " << av_a[i]/N << "\n" ; outB << i << " " << av_b[i]/N << "\n"; } } Модуль gpu.cu #include "axpy.h" #include #include #include #include __global__ void montecarlo_kernel(float *av_a_dev, float *av_b_dev, singlecomplex *a_dev, singlecomplex *b_dev, float *rand_dev, int N, int T){ int m = blockIdx.x * blockDim.x + threadIdx.x + 1; singlecomplex I = make_singlecomplex(0, 1); singlecomplex a = make_singlecomplex(1, 0); singlecomplex b = make_singlecomplex(0, 0); singlecomplex a0 = make_singlecomplex(1, 0); singlecomplex b0 = make_singlecomplex(0, 0); singlecomplex w = make_singlecomplex(0.5f, 0); singlecomplex g = make_singlecomplex(0.325f, 0); singlecomplex delta = make_singlecomplex(0.0001f, 0); singlecomplex dt = make_singlecomplex(0.01f, 0); singlecomplex pol = make_singlecomplex(0, 0.5f); singlecomplex null = make_singlecomplex(0, 0); singlecomplex one = make_singlecomplex(1, 0); __shared__ float r; __shared__ float p; __shared__ float norm; int i; if (m < N){ for(i = 1; i <= T-1; i++) //цикл по времени { if ( i == 1 ){a_dev[m*T + i] = one; b_dev[m*T + i] = null;}; r = rand_dev[i*m]; // rand_dev[m * i] ; p = b_dev[m*T + i].abs()*b_dev[m*T + i].abs()*g.abs()*dt.abs(); if( r > p ) // квантовая эволюция a и b между скачками { a_dev[m*T + i+1] = a_dev[m*T + i] - dt*(I*w * b_dev[m*T + i]); b_dev[m*T + i+1] = b_dev[m*T + i] - dt*( (g-I*delta) * b_dev[m*T + i] + I*w * a_dev[m*T + i] ); norm = a_dev[m*T + i+1].abs() * a_dev[m*T + i+1].abs() + b_dev[m*T + i+1].abs() * b_dev[m*T + i+1].abs(); /// input norma a_dev[m*T + i+1] = a_dev[m*T + i+1]/norm; b_dev[m*T + i+1] = b_dev[m*T + i+1]/norm; } else { a_dev[m*T + i+1] = one; b_dev[m*T + i+1] = null;//произошёл скачёк }; //av_a_dev[i] = a_dev[m*T + i+1].abs() * a_dev[m*T + i+1].abs()+ av_a_dev[i]; //av_b_dev[i] = b_dev[m*T + i+1].abs() * b_dev[m*T + i+1].abs()+ av_b_dev[i]; } /* for(i = 1; i <= T-1; i++) //цикл по времени { if ( i == 1 ){a0 = one; b0 = null;}; r = rand_dev[i]; // rand_dev[m * i] ; p = b0.abs()*b0.abs()*g.abs()*dt.abs(); if( r > p ) // квантовая эволюция a и b между скачками { a = a0 - dt*(I*w*b0); b = b0 - dt*( (g-I*delta)*b0 + I*w*a0 ); norm = a.abs()*a.abs()+b.abs()*b.abs(); a0 = a/norm; b0 = b/norm; } else { a0 = one; b0 = null; //произошёл скачёк }; av_a_dev[i] = a0.abs()*a0.abs()+ av_a_dev[i]; av_b_dev[i] = b0.abs()*b0.abs()+ av_b_dev[i]; } */ } } void montecarlo(float *av_a_dev, float *av_b_dev, singlecomplex *a_dev, singlecomplex *b_dev, float *rand_dev, int N, int T){ curandGenerator_t gen; curandCreateGenerator(&gen,CURAND_RNG_PSEUDO_DEFAULT); curandSetPseudoRandomGeneratorSeed(gen, 1234ULL); curandGenerateUniform(gen, rand_dev, T * N); montecarlo_kernel<< } Модуль cpu.ccp #include "axpy.h" void saxpy(int n, float a, float * x, int incx, float * y, int incy) { for (int i = 0; i < n; ++i) y[i * incy] += a * x[i * incx]; } |
Российской Федерации Нижегородский государственный университет им.... Учебно-методическое пособие предназначено для студентов очного и очно-заочного отделений химических факультетов высших учебных заведений,... | Конкурс государственнных стипендий на обучение в магистратуре и аспирантуре... Нижегородский государственный университет им. Н. И. Лобачевского – национальный исследовательский университет (ннгу) объявляет конкурсный... | ||
Учебно-методический комплекс Новосибирск, 2013 Учебно-методический комплекс «Иммунология» Умк подготовлен в рамках реализации Программы развития государственного образовательного учреждения высшего профессионального образования... | Нижегородский государственный университет им. Лобачевского Исследование кротовых нор в общей теории относительности и их возможное влияние на эволюцию Вселенной | ||
В. Н. Ясенев Информационная безопасность в экономических системах Государственное образовательное учреждение высшего профессионального образования «Нижегородский государственный университет им. Н.... | Отчет о реализации программы развития Фгбоу впо «Южно-Уральский государственный университет» (национальный исследовательский университет) | ||
Рабочая программа дисциплины (модуля) «Гражданское право» Государственное образовательное учреждение высшего профессионального образования «Нижегородский государственный университет им. Н.... | Реферат по курсу медицинской энтомологии Тема: лихорадка паппатачи «Новосибирский национальный исследовательский государственный университет» (Новосибирский государственный университет, нгу) | ||
Основная образовательная программа высшего профессионального образования... «Новосибирский национальный исследовательский государственный университет» (Новосибирский государственный университет, нгу) | Реферат по курсу энтомологии студентка медф гр. 13451. 1 «Новосибирский национальный исследовательский государственный университет» (Новосибирский государственный университет, нгу) | ||
Фгаоу впо «Белгородский государственный национальный исследовательский... Фгаоу впо «Белгородский государственный национальный исследовательский университет» | Развитие управления в сфере туризма и гостеприимства (теория, методология, практика) Диссертация выполнена на кафедре менеджмента гоу впо «Нижегородский государственный университет им. Н. И. Лобачевского» | ||
Протокол Нижегородский филиал федерального государственного автономного образовательного учреждения высшего профессионального образования... | Протокол Нижегородский филиал федерального государственного автономного образовательного учреждения высшего профессионального образования... | ||
Государственное бюджетное образовательное учреждение высшего профессионального... «российский национальный исследовательский медицинский университет им. Н. И. Пирогова» | Доклад о ходе реализации «Программы развития государственного образовательного бюджетного учреждения высшего профессионального образования «Государственный... |