Анализ эффективности функционального программирования на языке F# для многоядерных процессоров
Анализ существующих функциональных языков: история, семейства, преимущества. Анализ эффективности параллельного программирования для задачи обработки графического представления фрактальных функций. Программа умножения матриц, обработки изображения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 12.01.2016 |
Размер файла | 2,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
/// <param name="bmp">The Bitmap to be updated.</param>
let UpdatePalette (bmp : Bitmap) =
let p = bmp.Palette
System.Array.Copy(_paletteColors, p.Entries, _paletteColors.Length)
bmp.Palette <- p// The Bitmap will only update when the Palette property's setter is used
/// <summary>Renders a mandelbrot fractal.</summary>
/// <param name="position">The MandelbrotPosition representing the fractal boundaries to be rendered.</param>
/// <param name="imageWidth">The width in pixels of the image to create.</param>
/// <param name="imageHeight">The height in pixels of the image to create.</param>
/// <param name="parallelRendering">Whether to render the image in parallel.</param>
/// <returns>The rendered Bitmap.</returns>
let Create (position : MandelbrotPosition ) imageWidth (imageHeight : int) (cancellationToken: CancellationToken) parallelRendering =
// The maximum number of iterations to perform for each pixel. Higher number means better
// quality but also slower.
let maxIterations = 256
// In order to use the Bitmap ctor that accepts a stride, the stride must be divisible by four.
// We're using imageWidth as the stride, so shift it to be divisible by 4 as necessary.
let newImageWidth =
if imageWidth % 4 = 0
then imageWidth
else (imageWidth / 4) * 4
// Based on the fractal bounds, determine its upper left coordinate
let left = position.CenterX - (position.Width / 2.0)
let top = position.CenterY - (position.Height / 2.0)
// Get the factors that can be multiplied by row and col to arrive at specific x and y values
let colToXTranslation = position.Width / (float newImageWidth)
let rowToYTranslation = position.Height / (float imageHeight)
// Get Pixel Color for each complex number
let rec drawBit (z : Complex) c curIter =
match curIter with
x when x = maxIterations ->byte 0
|_ ->
match z with
x when x.Magnitude > 4.0 -> byte curIter
|_ -> drawBit (z*z+c) c (curIter+1)
let getbyte initialY j =
cancellationToken.ThrowIfCancellationRequested()
let c = new Complex((float j) * colToXTranslation + left, initialY)
drawBit c c 0
// Fill dataArray with pixel colors
let data =
if parallelRendering then
Array.Parallel.init imageHeight (fun i -> Array.init newImageWidth (fun j -> getbyte ((float i) * rowToYTranslation + top) j))
else
Array.init imageHeight (fun i -> Array.init newImageWidth (fun j -> getbyte ((float i) * rowToYTranslation + top) j))
// Create the bitmap
use bitMap = new Bitmap(newImageWidth,imageHeight,PixelFormat.Format8bppIndexed)
// Get the bitmap data for bitmap with a Read Write lock
let bitData = bitMap.LockBits(Rectangle(0,0,bitMap.Width,bitMap.Height),ImageLockMode.ReadWrite,PixelFormat.Format8bppIndexed)
// Setup the pointer
let mutable (p:nativeptr<byte>) = NativePtr.ofNativeInt (bitData.Scan0)
for i in 0..bitMap.Height-1 do
for j in 0..bitMap.Width-1 do
NativePtr.set p 0 (data.[i].[j])
p <- NativePtr.add p 1
use tempBitmap = new Bitmap(newImageWidth,imageHeight,newImageWidth,PixelFormat.Format8bppIndexed,bitData.Scan0)
// Needed to avoid memory errors
let newBitMap = tempBitmap.Clone(new Rectangle(0, 0, tempBitmap.Width, tempBitmap.Height), PixelFormat.Format8bppIndexed)
bitMap.UnlockBits(bitData)
// Change colors
UpdatePalette newBitMap
newBitMap
Размещено на Allbest.ru
Подобные документы
Приобретение теоретических и практических навыков программирования на языке Паскаль. Математическая формулировка задачи и выбор метода обработки информации. Разработка алгоритма и его описание. Описание программы. Форма представления исходных данных.
курсовая работа [224,3 K], добавлен 11.02.2016Создание информационной системы обработки матриц. Общая характеристика программного обеспечения, которое реализует выполнение заданных функций. Программа разработана с использованием среды визуального программирования Delphi 7 и языка Object Pascal.
курсовая работа [373,4 K], добавлен 14.01.2011Изучение организации диалоговой программы и закрепления основных элементов программирования на языке Паскаль и Си (Delphi, C++ Builder). Описание представления информации в программах на языках высокого уровня. Сравнительная характеристика Delphi и C++.
курсовая работа [3,1 M], добавлен 27.02.2015Задачи цифровой обработки изображений. Методы пороговой сегментации. Создание программы представления рисунка в виде матрицы и применения к нему пороговой обработки. Разработка интерфейса программы загрузки и фильтрации изображения с выбранным порогом.
курсовая работа [2,0 M], добавлен 12.11.2012Обзор существующих моделей параллельного программирования, основные средства отладки эффективности MPI-программ, общие проблемы всех средств трассировки. Создание экспериментальной системы отладки эффективности MPI-программ, этапы работы анализатора.
дипломная работа [767,2 K], добавлен 14.10.2010Анализ затрат и прибыли. Создание программного проекта для решения задачи о прибыли и убытках на языке программирования C#. Использование функций и переменных, компиляция программы. Алгоритмы и структуры данных. Тестирование программного обеспечения.
курсовая работа [1,2 M], добавлен 03.01.2015Понятия структурного программирования и алгоритма решения задачи. Краткая история развития языков программирования от машинных до языков ассемблера и языков высокого уровня. Процедурное программирование на C#. Методы и программы для моделирования.
учебное пособие [1,7 M], добавлен 26.10.2010Особенности способов описания языков программирования. Язык программирования как способ записи программ на ЭВМ в понятной для компьютера форме. Характеристика языка Паскаль, анализ стандартных его функций. Анализ примеров записи арифметических выражений.
курсовая работа [292,0 K], добавлен 18.03.2013Характеристика языков программирования: краткая история, хронология. Основные виды языков программирования: ассемблер; бейсик. Создание и использование формул в Excel. Применение операторов в формулах. Использование функций в Excel. Сайт дома отдыха.
отчет по практике [139,1 K], добавлен 03.06.2011Обзор основных используемых языков программирования (С++, Java, Pascal). Анализ существующих методов шифрования паролей. Основные понятия объектно-ориентированного программирования. Реализация приложения для генерирования паролей на языке Object Pascal.
курсовая работа [822,4 K], добавлен 07.07.2012