Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс





НазваниеНижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс
страница3/4
Дата публикации04.07.2013
Размер0.5 Mb.
ТипОбразовательная программа
100-bal.ru > Информатика > Образовательная программа
1   2   3   4

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


Число реализаций

Время расчета на CPU, с.

Время расчета на GPU,

с.

980

17,082

0,609

1980

35,303

0,656

3840

68,166

0,686

7680

136,454

0,874

15360

272,705

1,654

30720

545,458

3,260


Для расчета интерференционной картины (см. рис.9), наблюдаемой в недавних экспериментах [17-19], была выбрана 2D-сетка (А, ε0) 100х100 точек, таким образом, было необходимо рассчитывать 10000 усредненных квантовых траекторий (каждая из которых была усреднена по 15360 реализациям) и, соответственно, вероятность населенности возбужденного уровня в момент окончания длительности импульса.



Рис. 10 Результаты расчёта интерференционной картины для возбужденного уровня системы.
На рис. 10 и в табл. 5 представлены данные о приросте производительности вычислений в зависимости от количества используемых графических ускорителей, данная зависимость аппроксимируется линейной, что говорит о хорошем масштабировании задачи при переходе к множеству GPU, эффективность при использовании 20 GPU составляет 97%.


Рис. 10 Ускорение работы алгоритма в зависимости от числа использованных GPU по сравнению с одним GPU.
Таблица 5. Время расчета и ускорение алгоритма при одновременном расчёте 10000 единичных усредненных траекторий на GPU c применением технологии MPI

Расчёт интерференционных картин (10000 траекторий) на GPU

Тип устройства

Число устройств

Время, с

Ускорение

GPU (Tesla C1060)

1

6020

~ в 66 раза отн. CPU

GPU (Tesla C1060) + MPI

5

1228

~ в 323 раза отн. CPU

~ в 5 раза отн. GPU

GPU (Tesla C1060) + MPI

20

311

~ в 1273 раза отн. CPU

~ в 19,4 раза отн. GPU




  1. Указания по выполнению лабораторной работы




  1. Установить необходимые драйвера для CUDA (см. раздел 1.4) и убедиться, что программный тест bandwidthTest, входящий в SDK, завершается успешно.

  2. Ознакомиться с алгоритмом на основе квантового метода Монте-Карло для расчета диссипативной динамики квантовых систем, на примере двухуровневой – кубита (см. раздел 3.1).

  3. Реализовать последовательную версию на CPU согласно разделу 3.1

  4. Ознакомиться с основами программирования графических процессоров с использованием технологии CUDA и выполнить распараллеливание последовательной версии на основе раздела 3.2. Проверить корректность реализации путем сравнения результатов с результатами последовательной версии.




  1. Индивидуальные дополнительные задания

  1. Распараллелить предложенный алгоритм программы (раздел 3.1) с помощью параллельных технологий OpenMP и MPI. Сравнить время расчета для различных параллельных алгоритмов.

  2. Обобщить развитую в данной работе методику на основе квантового метода Монте-Карло для многоуровневых систем. Рассмотреть случаи трехуровневой системы: а) «Λ-схема» и б) «V-схема».

ЗАКЛЮЧЕНИЕ
Настоящее научно–методическое пособие посвящено применению гетерогенных вычислительных систем для моделирования физических процессов. В работе описаны основные принципы работы с технологией CUDA, установка и компиляция программы, описано лабораторное оборудование «Кластер НИФТИ ННГУ», возможности доступа к оборудованию для расчетов. А также представлена математическая модель и создан программный комплекс, который реализует параллельные вычисления на многопроцессорном кластере (с использованием протокола MPI) и графических процессорных устройств (с использованием технологии CUDA).

Используя разработанный программный комплекс, в качестве примера, выполнено численное моделирование диссипативной динамики одиночных квантовых систем на основе квантового метода Монте-Карло на примере кубитов во внешних полях. Показано, что применимость GPU ускорителей позволило существенно ускорит расчеты, так продемонстрировано ускорение ~170 раз по сравнению с последовательной версией на CPU. Развитая в работе техника расчета диссипативной динамики состояний кубитов естественным образом может быть распространена на более сложные системы.

Таким образом, в работе показана эффективность и целесообразность проведения расчетов сложных физических задач на GPU ускорителей, что позволить проводить численные физические эксперименты за разумное время.

Литература


  1. Д. Сандерс, Э. Кэндрот, Технология CUDA в примерах. Введение в програмирование графических процессов: Пер. с англ. Слинкина А.А., научный редактор Боресков А.В. ­ М.: ДМК Пресс, 2011. –232 с.

  2. Суперкомпьютерные технологии в науке, образовании и промышленности (Третий выпуск)/Под редакцией: академика В.А. Садовничего, академика Г.И. Савина, чл.-корр. РАН Вл.В. Воеводина.-М.: Издательство Московского университета, 2012. [http://hpc-russia.ru/book3_ready.html]

  3. TOP500 Project [http://www.top500.org/]; TOP50 суперкомпьютеров [http://top50.supercomputers.ru]; Graph500 [http://www.graph500.org/]; HPC Challenge Benchmark [http://icl.cs.utk.edu/hpcc/index.html]

  4. Эксафлопные технологии. Концепция по развитию технологии высокопроизводительных вычислений на базе суперэвм эксафлопного класса (2012-2020 гг.) [http://filearchive.cnews.ru/doc/2012/03/esk_tex.pdf]

  5. А.В. Боресков, А.А. Харламов, Основы работы с технологией CUDA. Издательство "ДМК Пресс", 2010

  6. http://www.3dnews.ru/video/gtx280/print (дата обращения: 8.11.2012)

  7. NVIDIA CUDA 4.0 Programming Guide. http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_C_Programming_Guide.pdf

  8. M. A. Nielsen and I. L. Chuang, Quantum Computation and Quantum Information (Cambridge University Press, Cambridge, 2000).

  9. T. D. Ladd et al, Nature 464, 45 (2010).

  10. C. H. van der Wal et al, Science 290, 773 (2000).

  11. I. Chiorescu et al, Science 299, 1869 (2003) .

  12. Y. Nakamura, Yu. A. Pashkin, and J.S. Tsai, Nature 398, 786 (1999).

  13. J. E. Mooij et al, Science 285, 1036, (1999).

  14. Ya. S. Greenberg et al, Phys. Rev. B 66, 214525 (2002).

  15. А.А. Измалков Макроскопические квантовые эффекты в потоковом кубите // Диссертация на соискание ученой степени кандидата физико-математических наук, Москва, МИФИ, 2005г, 152с.

  16. M. Grajcar et al, Phys. Rev. B 72, 020503(R) (2005).

  17. D. M. Berns et al, Phys. Rev. Lett. 97, 150502 (2006).

  18. M. Sillanpää et al, Phys. Rev. Lett. 96, 187002 (2006).

  19. W. D. Oliver et.al, Science 310, 1653 (2005).

  20. M. B. Plenio and P. L. Knight, Rev. Mod. Phys. 70, 101 (1998).

  21. В.П. Гергель, Р.Г. Стронгин. Основы параллельных вычислений для многопроцессорных вычислительных систем. - Н.Новгород, ННГУ, 2 изд, 2003.

  22. В. П. Гергель, Теория и практика параллельных вычислений. Бином. Лаборатория знаний, 2007. – 424 с.

  23. http://www.ixbt.com/video3/gt200-part1.shtml (дата обращения: 14.10.12)

  24. http://www.nag.co.uk/numeric/GPUs/benchmarks.asp (дата обращения: 14.10.12)

ПРИЛОЖЕНИЕ А. Пример программы на 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<<>>(av_a_dev, av_b_dev, a_dev, b_dev, rand_dev, N, T);

}
Модуль 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];

}


1   2   3   4

Похожие:

Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconРоссийской Федерации Нижегородский государственный университет им....
Учебно-методическое пособие предназначено для студентов очного и очно-заочного отделений химических факультетов высших учебных заведений,...
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconКонкурс государственнных стипендий на обучение в магистратуре и аспирантуре...
Нижегородский государственный университет им. Н. И. Лобачевского – национальный исследовательский университет (ннгу) объявляет конкурсный...
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconУчебно-методический комплекс Новосибирск, 2013 Учебно-методический комплекс «Иммунология»
Умк подготовлен в рамках реализации Программы развития государственного образовательного учреждения высшего профессионального образования...
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconНижегородский государственный университет им. Лобачевского
Исследование кротовых нор в общей теории относительности и их возможное влияние на эволюцию Вселенной
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconВ. Н. Ясенев Информационная безопасность в экономических системах
Государственное образовательное учреждение высшего профессионального образования «Нижегородский государственный университет им. Н....
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconОтчет о реализации программы развития
Фгбоу впо «Южно-Уральский государственный университет» (национальный исследовательский университет)
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconРабочая программа дисциплины (модуля) «Гражданское право»
Государственное образовательное учреждение высшего профессионального образования «Нижегородский государственный университет им. Н....
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconРеферат по курсу медицинской энтомологии Тема: лихорадка паппатачи
«Новосибирский национальный исследовательский государственный университет» (Новосибирский государственный университет, нгу)
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconОсновная образовательная программа высшего профессионального образования...
«Новосибирский национальный исследовательский государственный университет» (Новосибирский государственный университет, нгу)
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconРеферат по курсу энтомологии студентка медф гр. 13451. 1
«Новосибирский национальный исследовательский государственный университет» (Новосибирский государственный университет, нгу)
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconФгаоу впо «Белгородский государственный национальный исследовательский...
Фгаоу впо «Белгородский государственный национальный исследовательский университет»
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconРазвитие управления в сфере туризма и гостеприимства (теория, методология, практика)
Диссертация выполнена на кафедре менеджмента гоу впо «Нижегородский государственный университет им. Н. И. Лобачевского»
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconПротокол
Нижегородский филиал федерального государственного автономного образовательного учреждения высшего профессионального образования...
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconПротокол
Нижегородский филиал федерального государственного автономного образовательного учреждения высшего профессионального образования...
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconГосударственное бюджетное образовательное учреждение высшего профессионального...
«российский национальный исследовательский медицинский университет им. Н. И. Пирогова»
Нижегородский государственный университет им. Н. И. Лобачевского Национальный исследовательский университет Учебно-научный и инновационный комплекс iconДоклад о ходе реализации
«Программы развития государственного образовательного бюджетного учреждения высшего профессионального образования «Государственный...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск