Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Библиографический список. 3. NVIDIA Corp. “NVIDIA Compute PTX: Parallel Thread Execution” / NVIDIA Corp




1. Metropolis, N., Ulam, S. The Monte Carlo Method // J. Amer. statistical assoc. 1949. V. 44. N 247. P. 335—341.

2. Соболь И.М. Метод Монте – Карло. / И.М. Соболь М.: Наука, 1985. 78 с.

3. NVIDIA Corp. “NVIDIA Compute PTX: Parallel Thread Execution” / NVIDIA Corp. 2701 San Tomas Expressway, Santa Clara, CA 95050: NVIDIA Corp. www.nvidia.com. 2008. 105 c.

4. NVIDIA Corp. “NVIDIA CUDA Compute Unified Device Architecture. Programming Guide Version 2.0” / NVIDIA Corp. 2701 San Tomas Expressway, Santa Clara, CA 95050: NVIDIA Corp. www.nvidia.com. 2008. 107 c.

5. NVIDIA Corp. “The CUDA Compiler Driver NVCC” / NVIDIA Corp. 2701 San Tomas Expressway, Santa Clara, CA 95050: NVIDIA Corp. www.nvidia.com. 2008. 31 c.

6. Боярченков, А.С., Поташников, С.И. Использование графических процессоров и технологии CUDA для задач молекулярной динамики // Вычислительные методы и программирование.- 2009.- № 10.- С. 9–23.-
http://num-meth.srcc.msu.ru/zhurnal/tom_2009/v10r102.html.

7. Owens, J.D., Luebke, D., Govindaraju, N. et al. A Survey of General-Purpose Computation on Graphics Hardware // Computer Graphics Forum. 2007. V. 26. N. 1. 2007. P. 80-113.

8. Поташников, С.И., Боярченков, А.С., Некрасов, К.А., Купряжкин, А.Я., Рисо­ваный, В.Д., Голованов, В.Н. Высокоскоростное моделирование диффузии ионов урана и кислорода в UO2 // Сборник рефератов и докладов семинара «Во­просы создания новых методик исследований и испытаний, сличитель­ных экспериментов, аттестации и аккредита­ции» Димитровград, 22-23 ноября 2005 г. / НИИАР.- Димитровград, 2007.- С. 139–159.

9. Поташников, С.И., Боярченков, А.С., Некрасов, К.А., Купряжкин, А.Я. Молеку­лярно-динамическое восстановление межчастичных потенциалов в диоксиде урана по тепловому расширению // Альтернативная энергетика и экология.- 2007.- № 8.- С. 43–52.-
http://isjaee.hydrogen.ru/pdf/AEE0807/AEE08-07_Potashnikov.pdf.

10. Kupryazh­kin, A.Ya., Zhiganov, A.N., Nekrassov, K.A., Risovany, D.V., Risovany, V.D., Golovanov, V.N. Simulation of diffusion of oxygen and uranium in uranium dioxide nanocrystals // Journal of Nuclear Materials, 2008. V. 372. P. 233-238.

11. Matsumoto, M., Nishimura, T. A 623-Dimensionally Equidistributed Uniform Pseudo-Random Number Generator // ACM Trans. Model. Comput. Simul. 1998. V. 8. P. 3-30.

12. Marsaglia, G. A current view of random numbers // Computer Science and Statistics, Proceedings of the Sixteenth Simposium on The Interface. 1985. P. 3-10.

13. Hellekalek, P., Auer, T., Entacher, K., et al. The pLab // http://random.mat.sbg.ac.at.

14. Matsumoto, M., Nishimura, T. Dynamic Creation of Pseudorandom Number Generators // http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/DC/dgene.pdf.

15. Podlozhnyuk V. Parallel Mersenne Twister / V. Podlozhnyuk. NVIDIA Corporation. 2007.

Приложение.
Оптимизированное вычислительное ядро для моделирования диффузии нейтронов методом Монте-Карло

Приводимый ниже текст представляет собой вычислительное ядро из п. 3.2.3, оптимизированное в соответствии с п.3.2.5. По структуре и операциям этот код очень близок к тому, который подробно прокомментирован в п. 3.2.3. Поэтому, здесь мы ограничиваемся только краткими комментариями, отслеживающими основные блоки программы.

 

/* Вычислительное ядро, исполняется на графическом процессоре */

__global__ void MC_RandomGPU(float *d_Random, float *d_W_p, float *d_W_m, int N_Of_Steps)

{

const int tid = blockDim.x * blockIdx.x + threadIdx.x;

 

int iState, iState1, iStateM, iOut;

unsigned int mti, mti1, mtiM, x;

unsigned int mt[MT_NN];

 

/* Константы, характеризующие физику взаимодействия нейтронов с пластиной */

const float MC_h = 10.0f; // Толщина пластины

const float MC_sigma = 1.1f; // Полное макросечение взаимодействия

const float MC_sigma_S = 1.0f; /* Макросечение рассеяния, обратно средней длине свободного пробега */

const float MC_s = MC_sigma_S / MC_sigma; // Множитель веса нейтрона

 

mt_struct_stripped config = ds_MT[tid]; //Загрузка параметров Mersenne Twister из общей памяти

 

// Инициализация экземпляра Mersenne Twister

mt[0] = config.seed;

for(iState = 1; iState < MT_NN; iState++)

mt[iState] = (1812433253U * (mt[iState - 1] ^ (mt[iState - 1] >> 30)) + iState) & MT_WMASK;

 

iState = 0;

mti1 = mt[0];

 

/* Собственно моделирование прохождения нейтронов сквозь пластину */

 

float MC_x = 0.0f; // Положение нейтрона в пластине

float MC_w = 1.0f; // Вес нейтрона

float MC_m = 1.0f; // Косинус угла рассеяния нейтрона

 

float N_of_N = 0.0f;

float W_p = 0.0f;

float W_m = 0.0f;

 

for (int k = 0; k < N_Of_Steps; k++)

{

// Генерация случайной длины свободного пробега нейтрона

iState1 = iState + 1; iStateM = iState + MT_MM;

if(iState1 >= MT_NN) iState1 -= MT_NN; if(iStateM >= MT_NN) iStateM -= MT_NN;

mti = mti1; mti1 = mt[iState1]; mtiM = mt[iStateM];

x = (mti & MT_UMASK) | (mti1 & MT_LMASK);

x = mtiM ^ (x >> 1) ^ ((x & 1) ? config.matrix_a : 0);

mt[iState] = x; iState = iState1;

x ^= (x >> MT_SHIFT0); x ^= (x << MT_SHIFTB) & config.mask_b;

x ^= (x << MT_SHIFTC) & config.mask_c; x ^= (x >> MT_SHIFT1);

// Получение новой координаты нейтрона

MC_x -= MC_m * (__logf(((float)x + 1.0f) / 4294967296.0f) / MC_sigma);

 

// Генерация косинуса случайной проекции нейтрона на ось x

iState1 = iState + 1; iStateM = iState + MT_MM;

if(iState1 >= MT_NN) iState1 -= MT_NN; if(iStateM >= MT_NN) iStateM -= MT_NN;

mti = mti1; mti1 = mt[iState1]; mtiM = mt[iStateM];

x = (mti & MT_UMASK) | (mti1 & MT_LMASK);

x = mtiM ^ (x >> 1) ^ ((x & 1) ? config.matrix_a : 0);

mt[iState] = x; iState = iState1;

// Tempering transformation

x ^= (x >> MT_SHIFT0); x ^= (x << MT_SHIFTB) & config.mask_b;

x ^= (x << MT_SHIFTC) & config.mask_c; x ^= (x >> MT_SHIFT1);

// Получение значения косинуса

MC_m = 2.0f*(((float)x + 1.0f) / 4294967296.0f) - 1.0f; /* Случайный косинус угла отклонения */

 

if ((MC_x < 0.0f) || (MC_x > MC_h))

{

if (MC_x < 0.0f ) W_m += MC_w; else W_p += MC_w;

N_of_N += 1.0f;

MC_x = 0.0f;

MC_w = 1.0f;

MC_m = 1.0f;

}

else

{

MC_w *= MC_s; // Пересчёт веса нейтрона

}

 

} // Завершение перемещения нейтронов внутри пластины

__syncthreads();

 

// Сохранение результатов расчёта в общей памяти

d_Random[tid] = N_of_N;

d_W_p[tid] = W_p;

d_W_m[tid] = W_m;

 

} // Завершение ядра

 

 


Учебное издание

 

Некрасов Кирилл Александрович Поташников Святослав Игоревич Боярченков Антон Сергеевич Купряжкин Анатолий Яковлевич
МЕТОД МОНТЕ-КАРЛО НА ГРАФИЧЕСКИХ ПРОЦЕССОРАХ
Редактор А.Я. Купряжкин Компьютерная верстка А.В. Коромыслов
ИД № 06263 от 12.11.2001 г.
Подписано в печать 23.06.2009 Формат 60´84 1/16
Бумага типографская Плоская печать Усл. печ. л. 3.5
Усл. изд. л. 3.1 Тираж 8 экз.  
 
Издательство кафедры молекулярной физики УГТУ-УПИ 620002, г. Екатеринбург, ул. Мира, 19

 


Поделиться:

Дата добавления: 2015-09-13; просмотров: 55; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты