Создание решения для типовых задач, которые значительно ускоряют вычисления при анализе астрономических данных
Практическая реализация основных алгоритмов обработки. Особенности работы с графическими ускорителями, реализация алгоритмов агрегирующей статистики данных. Разработка архитектуры проекта, реализация алгоритмов Фурье. Специфика алгоритма Bitonic.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.09.2018 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
H_sum = new float[sumBufLen];
H_met = new float[metBufLen];
}
// call this before CalculateFFT()
void setup_clFFT()
{
/* FFT library realted declarations */
clfftDim dim = CLFFT_1D;
size_t clLengths[1] = { windowSize };
/* Setup clFFT. */
clfftSetupData fftSetup;
err = clfftInitSetupData(&fftSetup);
err = clfftSetup(&fftSetup);
/* Create a default plan for a complex FFT. */
err = clfftCreateDefaultPlan(&planHandle, ctx, dim, clLengths);
/* Set plan parameters. */
err = clfftSetPlanPrecision(planHandle, CLFFT_SINGLE);
err = clfftSetLayout(planHandle, CLFFT_REAL, CLFFT_HERMITIAN_INTERLEAVED);
err = clfftSetResultLocation(planHandle, CLFFT_OUTOFPLACE);
err = clfftSetPlanBatchSize(planHandle, fftTotalCount);
err = clfftSetPlanDistance(planHandle, shiftSize, halfedWindowSize);
/* Bake the plan. */
err = clfftBakePlan(planHandle, 1, &queue, NULL, NULL);
}
void calculateFFT()
{
err = clEnqueueWriteBuffer(queue, D_raw, CL_TRUE, 0, rawBufLen * sizeof(POINT_TYPE), H_raw, 0, NULL, NULL);
/* Execute the plan. */
err = clfftEnqueueTransform(planHandle, CLFFT_FORWARD, 1, &queue, 0, NULL, NULL, &D_raw, &D_fft, NULL);
/* Wait for calculations to be finished. */
err = clFinish(queue);
// NO NEED
/* Fetch results of calculations. */
//err = clEnqueueReadBuffer(queue, D_fft, CL_TRUE, 0, bandCount * fftsPerBand * halfedWindowSize * 2 * sizeof(POINT_TYPE), H_sum, 0, NULL, NULL);
}
// call this after you don't need calculateFFT() function anymore. Call before ocl and buffers finalization
void finalize_clFFT()
{
/* Release the plan. */
err = clfftDestroyPlan(&planHandle);
/* Release clFFT library. */
clfftTeardown();
}
// call this before sumVectors() and getMetrics()
void setup_Kernels()
{
kernelSource = getKernelSource();
// Number of work items in each local work group
localSize = 64;
// Number of total work items - localSize must be devisor
globalSize = ceil(resultBandwidth / (float)localSize)*localSize;
// Create the compute program from the source buffer
program = clCreateProgramWithSource(ctx, 1,
(const char **)& kernelSource, NULL, &err);
// Build the program executable
//err = clBuildProgram(program, 0, NULL, NULL, NULL, NULL);
if (clBuildProgram(program, 0, NULL, NULL, NULL, NULL) != CL_SUCCESS)
{
std::cout << "Program Build failed\n";
size_t length;
char buffer[4*2048];
err = clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, sizeof(buffer), buffer, &length);
std::cout << "--- Build log ---\n " << buffer << std::endl;
exit(1);
}
// Create the compute kernel in the program we wish to run
aggregateKernel = clCreateKernel(program, "aggregateFFTs", &err);
// Set the arguments to our compute kernel
err = clSetKernelArg(aggregateKernel, 0, sizeof(cl_mem), &D_fft);
err |= clSetKernelArg(aggregateKernel, 1, sizeof(cl_mem), &D_sum);
err |= clSetKernelArg(aggregateKernel, 2, sizeof(int), &resultBandwidth);
err |= clSetKernelArg(aggregateKernel, 3, sizeof(int), &totalBandwidth2);
err |= clSetKernelArg(aggregateKernel, 4, sizeof(int), &totalWidth2);
err |= clSetKernelArg(aggregateKernel, 5, sizeof(int), &bandCount);
metricsLocalSize = METRICS_LEN / 2;
metricsGlobalSize = metSmallBatchCount * metBigBatchCount * metricsLocalSize;
// metrics kernel
metricsKernel = clCreateKernel(program, "getMetrics", &err);
// Set the arguments to our metrics kernel
err = clSetKernelArg( metricsKernel, 0, sizeof(cl_mem), &D_raw);
err |= clSetKernelArg(metricsKernel, 1, sizeof(cl_mem), &D_met);
err |= clSetKernelArg(metricsKernel, 2, metPairCount * 2 * sizeof(POINT_TYPE), NULL);
err |= clSetKernelArg(metricsKernel, 3, metPairCount * 2 * sizeof(POINT_TYPE), NULL);
err |= clSetKernelArg(metricsKernel, 4, METRICS_COUNT * sizeof(POINT_TYPE), NULL);
err |= clSetKernelArg(metricsKernel, 5, sizeof(unsigned int), &metPairCount);
err |= clSetKernelArg(metricsKernel, 6, sizeof(unsigned int), &metSmallBatchCount);
err |= clSetKernelArg(metricsKernel, 7, sizeof(unsigned int), &metSmallBatchShift);
err |= clSetKernelArg(metricsKernel, 8, sizeof(unsigned int), &metBigBatchCount);
err |= clSetKernelArg(metricsKernel, 9, sizeof(unsigned int), &metBigBatchShift);
free(kernelSource);
}
void sumVectors()
{
// Execute the kernel over the entire range of the data set
err = clEnqueueNDRangeKernel(queue, aggregateKernel, 1, NULL, &globalSize, &localSize,
0, NULL, NULL);
// Wait for the command queue to get serviced before reading back results
err = clFinish(queue);
// Read the results from the device
err = clEnqueueReadBuffer(queue, D_sum, CL_TRUE, 0, sumBufLen * sizeof(POINT_TYPE), H_sum, 0, NULL, NULL);
}
void getMetrics()
{
// Execute the kernel over the entire range of the data set
err = clEnqueueNDRangeKernel(queue, metricsKernel, 1, NULL, &metricsGlobalSize, &metricsLocalSize,
0, NULL, NULL);
// Wait for the command queue to get serviced before reading back results
err = clFinish(queue);
// Read the results from the device
err = clEnqueueReadBuffer(queue, D_met, CL_TRUE, 0, metBufLen * sizeof(POINT_TYPE), H_met, 0, NULL, NULL);
}
// call this after you don't need sumVectors() and getMetrics() functions anymore. Call before ocl and buffers finalization
void finalize_Kernels()
{
// release OpenCL resources
clReleaseKernel(aggregateKernel);
clReleaseKernel(metricsKernel);
clReleaseProgram(program);
}
}
Размещено на Allbest.ru
...Подобные документы
Создание схем алгоритмов и составление программы на языке Pascal для вычисления значений заданных функций. Сущность и порядок нахождения значения определенного интеграла. Анализ работы подпрограмм. Разработка тестов для проверки правильности алгоритмов.
контрольная работа [831,0 K], добавлен 24.11.2013Разработка и анализ алгоритмов с использованием электронных таблиц и прикладных программ Smath Studio, Microsoft Excel. Проверка алгоритма ветвления или выбора. Реализация циклов на примере вычисления определённого интеграла с заданной точностью.
контрольная работа [1,0 M], добавлен 19.03.2016Общая характеристика и функциональные возможности системы "Компьютерное тестирование". Связи между информационными объектами. Проектирование алгоритмов обработки данных. Реализация алгоритмов обработки информации, разработка соответствующих макросов.
контрольная работа [542,8 K], добавлен 19.10.2010Переход от словесной неформальной постановки к математической формулировке данной задачи. Оценка различных вариантов с целью выбора наиболее эффективных структур данных и алгоритмов обработки. Реализация алгоритмов на одном из языков программирования.
курсовая работа [35,0 K], добавлен 25.06.2013Основные особенности эволюционных алгоритмов. Описание алгоритмов селекции, мутации, скрещивания, применяемых для реализации генетических алгоритмов. Вычисление функции приспособленности. Программная реализация. Тестирование и руководство пользователя.
курсовая работа [1,3 M], добавлен 11.03.2014История появления эволюционных алгоритмов. Нейрокомпьютерные исследования в России. Реализация генетических алгоритмов. Расчет эффективности процедур поиска конкурирующей процедуры. Schema и теорема шим. Примеры использования нейросетевых технологий.
курсовая работа [43,0 K], добавлен 20.10.2008Сущность построения, особенности применения и теоретическое обоснование алгоритмов приближенного решения математических задач. Основы численного метода, нахождение интерполяционного полинома методом Лагранжа. Руководство программиста и пользователя.
курсовая работа [527,6 K], добавлен 16.08.2012Целые числа в позиционных системах счисления. Недостатки двоичной системы. Разработка алгоритмов, структур данных. Программная реализация алгоритмов перевода в различные системы счисления на языке программирования С. Тестирование программного обеспечения.
курсовая работа [593,3 K], добавлен 03.01.2015Построение информационно-логической модели базы данных. Корректировка данных средствами запросов. Проектирование алгоритмов обработки данных. Реализация пользовательского интерфейса средствами форм. Разработка запросов для корректировки и выборки данных.
курсовая работа [680,9 K], добавлен 19.10.2010Разработка программы на языке Си++ и осуществление постановки и выбора алгоритмов решения задач обработки экономической информации, создание и редактирование базы данных, сортировка записей по определенному запросу, анализ эффективности обработки данных.
контрольная работа [316,8 K], добавлен 28.08.2012Описание особенностей программирования циклических алгоритмов на С/С++. Использование операторов цикла для организации повтора в программе определенных действий. Создание и реализация программы приближенного вычисления интеграла методом трапеций.
лабораторная работа [86,3 K], добавлен 25.03.2019Основные этапы создания алгоритмов, представление в виде программы. Рассмотрение методов решения задач. Метод поэтапных уточнений. Различие между численными и логическими алгоритмами. Реализация цикла со счетчиком. Процесс разработки сложного алгоритма.
презентация [1,3 M], добавлен 22.10.2013Разработка блок-схемы и программы обработки одномерного массива с доступом к элементам с помощью индексов и с помощью указателей. Словесное описание алгоритма и пользовательского интерфейса, листинг программы обработки матрицы и результат её выполнения.
курсовая работа [391,1 K], добавлен 30.09.2013Изучение применяемых в программировании и информатике структур данных, их спецификации и реализации, алгоритмов обработки данных и анализ этих алгоритмов. Программа определения среднего значения для увеличивающегося количества чисел заданного типа.
контрольная работа [16,0 K], добавлен 19.03.2015Обзор существующих подходов в генерации музыкальных произведений. Особенности создания стилизованных аудио произведений на основе современных нейросетевых алгоритмов. Выбор средств и библиотек разработки. Практические результаты работы алгоритма.
дипломная работа [4,0 M], добавлен 13.10.2017Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.
курсовая работа [314,2 K], добавлен 27.01.2015Создание набора классов, реализующих функции генерации метаданых для заданного файла данных спутника MTSAT-1R. Существующие методы решения. Реализация алгоритма получения необходимых полей с нужными данными. Разработка структуры базы данных инвентаря.
курсовая работа [38,6 K], добавлен 17.07.2009Описание и особенности некоторых алгоритмов архивации. Построение кода Хаффмана. Динамический алгоритм построения кода Хаффмана. Обратное восстановление текста. Способы двухступенчатого кодирования информации. Практическая реализация алгоритма LZ77.
курсовая работа [51,7 K], добавлен 24.12.2012Критерии и основные стратегии планирования процессора. Разработка моделей алгоритмов SPT (Shortest-processing-task-first) и RR (Round-Robin). Сравнительный анализ выбранных алгоритмов при различных условиях и различном количестве обрабатываемых данных.
курсовая работа [179,3 K], добавлен 21.06.2013Решение задачи средствами прикладных программ. Разработка алгоритмов и структур данных. Реализация задачи определения статистических данных по успеваемости на факультете на языке программирования C#. Программа перевода чисел в различные системы счисления.
курсовая работа [519,9 K], добавлен 03.01.2015