Анализ эффективности функционального программирования на языке 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.