Skip to content
Closed

10 #21

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
406 changes: 397 additions & 9 deletions .gitignore

Large diffs are not rendered by default.

21 changes: 21 additions & 0 deletions Benchmarks/ImProcessingB/ImProcessingB.fsproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.15.2" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.6" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\ImageProcessing\ImageProcessing.fsproj" />
</ItemGroup>

</Project>
55 changes: 55 additions & 0 deletions Benchmarks/ImProcessingB/Program.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
namespace ImageProcessingB

open System
open BenchmarkDotNet.Attributes
open BenchmarkDotNet.Running
open BenchmarkDotNet.Configs
open BenchmarkDotNet.Reports
open Perfolizer.Horology

open ImageProcessing.ImProcessing
open SixLabors.ImageSharp.PixelFormats

type ipBenchmark() =

static member Sizes = [|2; 4|]
member this.Random = System.Random()

[<ParamsSource("Sizes")>]
member val MatrixSize = 0 with get, set
member val MatrixToSort = Array2D.zeroCreate<Rgba32> 1 1 with get, set

[<IterationSetup>]
member this.GetArrayToSort () =
this.MatrixToSort <- Array2D.init this.MatrixSize this.MatrixSize (fun _ _ ->
let r = byte (this.Random.Next 256)
let g = byte (this.Random.Next 256)
let b = byte (this.Random.Next 256)
let a = byte (this.Random.Next 256)
Rgba32 (r, g, b, a)
)

[<Benchmark>]
member this.NoParallelism () = applyFilterNoParallelism gaussianBlur this.MatrixToSort

[<Benchmark>]
member this.PixelParallelism () = applyFilterPixelParallelism gaussianBlur this.MatrixToSort

[<Benchmark>]
member this.ParallelismInParts () = applyFilterParallelismInParts gaussianBlur this.MatrixToSort

[<Benchmark>]
member this.RowParallelism () = applyFilterRowParallelism gaussianBlur this.MatrixToSort

[<Benchmark>]
member this.ColParallelism () = applyFilterColParallelism gaussianBlur this.MatrixToSort


module Main =
[<EntryPoint>]
let main argv =
let benchmarks =
BenchmarkSwitcher [| typeof<ipBenchmark> |]

benchmarks.Run argv |> ignore
0
152 changes: 76 additions & 76 deletions Benchmarks/Program.fs → Benchmarks/SortingsB/Program.fs
Original file line number Diff line number Diff line change
@@ -1,76 +1,76 @@
namespace Benchmarks
open System
open BenchmarkDotNet.Attributes
open BenchmarkDotNet.Running
open BenchmarkDotNet.Configs
open BenchmarkDotNet.Reports
open Perfolizer.Horology
open ArraySorts
open MyListSorts
type ArraysBenchmark() =
static member Lengths = [|10000..10000..100000|]
member this.Random = System.Random()
[<ParamsSource("Lengths")>]
member val ArrayLength = 0 with get, set
member val ArrayToSort = [|0.0|] with get, set
[<IterationSetup>]
member this.GetArrayToSort () =
this.ArrayToSort <- Array.init this.ArrayLength (fun _ -> this.Random.NextDouble())
[<Benchmark>]
member this.ArrayQuickSort () = Arrays.quickSort this.ArrayToSort
[<Benchmark>]
member this.ArrayBubbleSort () = Arrays.bubbleSort this.ArrayToSort
[<Benchmark>]
member this.ArrayMergeSort () = Arrays.mergeSort this.ArrayToSort
[<Benchmark>]
member this.ArraySystem () = Array.Sort this.ArrayToSort
type ListBenchmark() =
static member Lengths = [|10000..10000..100000|]
member this.Random = System.Random()
[<ParamsSource("Lengths")>]
member val ListLength = 0 with get, set
member val ListToSort = [0.0] with get, set
[<IterationSetup>]
member this.GetListToSort () =
this.ListToSort <- List.init this.ListLength (fun _ -> this.Random.NextDouble())
[<Benchmark>]
member this.MyListBubbleSort () = MyList.fromSystemList this.ListToSort |> MyList.quickSort
[<Benchmark>]
member this.MyListQuickSort () = MyList.fromSystemList this.ListToSort |> MyList.bubbleSort
[<Benchmark>]
member this.MyListMergeSort () = MyList.fromSystemList this.ListToSort |> MyList.mergeSort
[<Benchmark>]
member this.MyListSystem () = List.sort this.ListToSort
module Main =
[<EntryPoint>]
let main argv =
let config = ManualConfig.Create(DefaultConfig.Instance)
.WithSummaryStyle(SummaryStyle.Default.WithTimeUnit(TimeUnit.Millisecond))
.WithOptions(ConfigOptions.DisableOptimizationsValidator)
let benchmarks =
BenchmarkSwitcher [| typeof<ArraysBenchmark>; typeof<ListBenchmark>|]
benchmarks.Run argv |> ignore
0
namespace Benchmarks

open System
open BenchmarkDotNet.Attributes
open BenchmarkDotNet.Running
open BenchmarkDotNet.Configs
open BenchmarkDotNet.Reports
open Perfolizer.Horology

open ArraySorts
open MyListSorts

type ArraysBenchmark() =

static member Lengths = [|10000..10000..100000|]
member this.Random = System.Random()

[<ParamsSource("Lengths")>]
member val ArrayLength = 0 with get, set
member val ArrayToSort = [|0.0|] with get, set

[<IterationSetup>]
member this.GetArrayToSort () =
this.ArrayToSort <- Array.init this.ArrayLength (fun _ -> this.Random.NextDouble())

[<Benchmark>]
member this.ArrayQuickSort () = Arrays.quickSort this.ArrayToSort

[<Benchmark>]
member this.ArrayBubbleSort () = Arrays.bubbleSort this.ArrayToSort

[<Benchmark>]
member this.ArrayMergeSort () = Arrays.mergeSort this.ArrayToSort

[<Benchmark>]
member this.ArraySystem () = Array.Sort this.ArrayToSort


type ListBenchmark() =

static member Lengths = [|10000..10000..100000|]
member this.Random = System.Random()

[<ParamsSource("Lengths")>]
member val ListLength = 0 with get, set
member val ListToSort = [0.0] with get, set

[<IterationSetup>]
member this.GetListToSort () =
this.ListToSort <- List.init this.ListLength (fun _ -> this.Random.NextDouble())

[<Benchmark>]
member this.MyListBubbleSort () = MyList.fromSystemList this.ListToSort |> MyList.quickSort

[<Benchmark>]
member this.MyListQuickSort () = MyList.fromSystemList this.ListToSort |> MyList.bubbleSort

[<Benchmark>]
member this.MyListMergeSort () = MyList.fromSystemList this.ListToSort |> MyList.mergeSort

[<Benchmark>]
member this.MyListSystem () = List.sort this.ListToSort


module Main =
[<EntryPoint>]
let main argv =

let config = ManualConfig.Create(DefaultConfig.Instance)
.WithSummaryStyle(SummaryStyle.Default.WithTimeUnit(TimeUnit.Millisecond))
.WithOptions(ConfigOptions.DisableOptimizationsValidator)
let benchmarks =
BenchmarkSwitcher [| typeof<ArraysBenchmark>; typeof<ListBenchmark>|]

benchmarks.Run argv |> ignore
0
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\src\Library\Library.fsproj" />
</ItemGroup>

<Compile Include="Program.fs" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\Sortings\Sortings.fsproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.14.0" />
</ItemGroup>
</Project>
</ItemGroup>

</Project>
File renamed without changes.
Binary file added GraphicsAndStatistics/presentation.pdf
Binary file not shown.
101 changes: 85 additions & 16 deletions HomeWork.sln
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,33 @@ VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{00DFC406-0A95-4C11-8BF2-4FD28C28061D}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Library", "src\Library\Library.fsproj", "{B853FD9B-45DA-4524-8E5D-9BDC24C29F63}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B4AC50D2-34AD-46DF-B39E-FBCC5D0653C6}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Tests", "Tests\Tests.fsproj", "{8FFAF33E-03C8-4A55-84E1-C42E0C602625}"
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Functions", "src\Functions\Functions.fsproj", "{F793D6BB-E68A-473E-B11F-1D7888DF4D4A}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Benchmarks", "Benchmarks\Benchmarks.fsproj", "{66023F5A-8456-4F66-9318-A0BFB68ED14A}"
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FunctionsT", "Tests\FunctionsT\FunctionsT.fsproj", "{66214A3F-2D3A-4A98-8A9E-25412278BABD}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Sortings", "src\Sortings\Sortings.fsproj", "{55D388AF-E9D9-4EC0-923A-0735BFD93CB8}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SortingsT", "Tests\SortingsT\SortingsT.fsproj", "{1D6CFA13-FD9D-4586-A463-1C023123E2CA}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ImageProcessing", "src\ImageProcessing\ImageProcessing.fsproj", "{7B9D1692-F56C-43C7-92BA-2CDDE21A7D57}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ImageProcessingT", "Tests\ImageProcessingT\ImageProcessingT.fsproj", "{EB2F699B-DE06-42EC-974A-A2C39E5C8D2A}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Trees", "src\Trees\Trees.fsproj", "{CAC5303C-D4CF-493E-94B4-4409BE7F2865}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "TreesT", "Tests\TreesT\TreesT.fsproj", "{7E4032B2-27F7-4691-8474-5C57A97F5721}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "LineralAlgebra", "src\LineralAlgebra\LineralAlgebra.fsproj", "{C05FDC93-8EE3-442C-868A-031CE2A5F4E4}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "LineralAlgebraT", "Tests\LineralAlgebraT\LineralAlgebraT.fsproj", "{C42A6017-8A61-4469-8FCD-EEBF49198D80}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Benchmarks", "Benchmarks", "{6069DD77-A270-4D88-97FF-61D1AB48754C}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SortingsB", "Benchmarks\SortingsB\SortingsB.fsproj", "{FA459D58-7CC6-491C-82AE-12618F55CBEF}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ImProcessingB", "Benchmarks\ImProcessingB\ImProcessingB.fsproj", "{F44DA1CA-F101-4C9A-97EB-AECD77885CC6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand All @@ -20,20 +42,67 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B853FD9B-45DA-4524-8E5D-9BDC24C29F63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B853FD9B-45DA-4524-8E5D-9BDC24C29F63}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B853FD9B-45DA-4524-8E5D-9BDC24C29F63}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B853FD9B-45DA-4524-8E5D-9BDC24C29F63}.Release|Any CPU.Build.0 = Release|Any CPU
{8FFAF33E-03C8-4A55-84E1-C42E0C602625}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8FFAF33E-03C8-4A55-84E1-C42E0C602625}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8FFAF33E-03C8-4A55-84E1-C42E0C602625}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8FFAF33E-03C8-4A55-84E1-C42E0C602625}.Release|Any CPU.Build.0 = Release|Any CPU
{66023F5A-8456-4F66-9318-A0BFB68ED14A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{66023F5A-8456-4F66-9318-A0BFB68ED14A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{66023F5A-8456-4F66-9318-A0BFB68ED14A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{66023F5A-8456-4F66-9318-A0BFB68ED14A}.Release|Any CPU.Build.0 = Release|Any CPU
{F793D6BB-E68A-473E-B11F-1D7888DF4D4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F793D6BB-E68A-473E-B11F-1D7888DF4D4A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F793D6BB-E68A-473E-B11F-1D7888DF4D4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F793D6BB-E68A-473E-B11F-1D7888DF4D4A}.Release|Any CPU.Build.0 = Release|Any CPU
{66214A3F-2D3A-4A98-8A9E-25412278BABD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{66214A3F-2D3A-4A98-8A9E-25412278BABD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{66214A3F-2D3A-4A98-8A9E-25412278BABD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{66214A3F-2D3A-4A98-8A9E-25412278BABD}.Release|Any CPU.Build.0 = Release|Any CPU
{55D388AF-E9D9-4EC0-923A-0735BFD93CB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{55D388AF-E9D9-4EC0-923A-0735BFD93CB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{55D388AF-E9D9-4EC0-923A-0735BFD93CB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{55D388AF-E9D9-4EC0-923A-0735BFD93CB8}.Release|Any CPU.Build.0 = Release|Any CPU
{1D6CFA13-FD9D-4586-A463-1C023123E2CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D6CFA13-FD9D-4586-A463-1C023123E2CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D6CFA13-FD9D-4586-A463-1C023123E2CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1D6CFA13-FD9D-4586-A463-1C023123E2CA}.Release|Any CPU.Build.0 = Release|Any CPU
{7B9D1692-F56C-43C7-92BA-2CDDE21A7D57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7B9D1692-F56C-43C7-92BA-2CDDE21A7D57}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B9D1692-F56C-43C7-92BA-2CDDE21A7D57}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7B9D1692-F56C-43C7-92BA-2CDDE21A7D57}.Release|Any CPU.Build.0 = Release|Any CPU
{EB2F699B-DE06-42EC-974A-A2C39E5C8D2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EB2F699B-DE06-42EC-974A-A2C39E5C8D2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EB2F699B-DE06-42EC-974A-A2C39E5C8D2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EB2F699B-DE06-42EC-974A-A2C39E5C8D2A}.Release|Any CPU.Build.0 = Release|Any CPU
{CAC5303C-D4CF-493E-94B4-4409BE7F2865}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CAC5303C-D4CF-493E-94B4-4409BE7F2865}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CAC5303C-D4CF-493E-94B4-4409BE7F2865}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CAC5303C-D4CF-493E-94B4-4409BE7F2865}.Release|Any CPU.Build.0 = Release|Any CPU
{7E4032B2-27F7-4691-8474-5C57A97F5721}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7E4032B2-27F7-4691-8474-5C57A97F5721}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7E4032B2-27F7-4691-8474-5C57A97F5721}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7E4032B2-27F7-4691-8474-5C57A97F5721}.Release|Any CPU.Build.0 = Release|Any CPU
{C05FDC93-8EE3-442C-868A-031CE2A5F4E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C05FDC93-8EE3-442C-868A-031CE2A5F4E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C05FDC93-8EE3-442C-868A-031CE2A5F4E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C05FDC93-8EE3-442C-868A-031CE2A5F4E4}.Release|Any CPU.Build.0 = Release|Any CPU
{C42A6017-8A61-4469-8FCD-EEBF49198D80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C42A6017-8A61-4469-8FCD-EEBF49198D80}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C42A6017-8A61-4469-8FCD-EEBF49198D80}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C42A6017-8A61-4469-8FCD-EEBF49198D80}.Release|Any CPU.Build.0 = Release|Any CPU
{FA459D58-7CC6-491C-82AE-12618F55CBEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FA459D58-7CC6-491C-82AE-12618F55CBEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA459D58-7CC6-491C-82AE-12618F55CBEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA459D58-7CC6-491C-82AE-12618F55CBEF}.Release|Any CPU.Build.0 = Release|Any CPU
{F44DA1CA-F101-4C9A-97EB-AECD77885CC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F44DA1CA-F101-4C9A-97EB-AECD77885CC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F44DA1CA-F101-4C9A-97EB-AECD77885CC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F44DA1CA-F101-4C9A-97EB-AECD77885CC6}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{B853FD9B-45DA-4524-8E5D-9BDC24C29F63} = {00DFC406-0A95-4C11-8BF2-4FD28C28061D}
{F793D6BB-E68A-473E-B11F-1D7888DF4D4A} = {00DFC406-0A95-4C11-8BF2-4FD28C28061D}
{66214A3F-2D3A-4A98-8A9E-25412278BABD} = {B4AC50D2-34AD-46DF-B39E-FBCC5D0653C6}
{55D388AF-E9D9-4EC0-923A-0735BFD93CB8} = {00DFC406-0A95-4C11-8BF2-4FD28C28061D}
{1D6CFA13-FD9D-4586-A463-1C023123E2CA} = {B4AC50D2-34AD-46DF-B39E-FBCC5D0653C6}
{7B9D1692-F56C-43C7-92BA-2CDDE21A7D57} = {00DFC406-0A95-4C11-8BF2-4FD28C28061D}
{EB2F699B-DE06-42EC-974A-A2C39E5C8D2A} = {B4AC50D2-34AD-46DF-B39E-FBCC5D0653C6}
{CAC5303C-D4CF-493E-94B4-4409BE7F2865} = {00DFC406-0A95-4C11-8BF2-4FD28C28061D}
{7E4032B2-27F7-4691-8474-5C57A97F5721} = {B4AC50D2-34AD-46DF-B39E-FBCC5D0653C6}
{C05FDC93-8EE3-442C-868A-031CE2A5F4E4} = {00DFC406-0A95-4C11-8BF2-4FD28C28061D}
{C42A6017-8A61-4469-8FCD-EEBF49198D80} = {B4AC50D2-34AD-46DF-B39E-FBCC5D0653C6}
{FA459D58-7CC6-491C-82AE-12618F55CBEF} = {6069DD77-A270-4D88-97FF-61D1AB48754C}
{F44DA1CA-F101-4C9A-97EB-AECD77885CC6} = {6069DD77-A270-4D88-97FF-61D1AB48754C}
EndGlobalSection
EndGlobal
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2024 Kate Titova
Copyright (c) 2025 Kate Titova

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
Loading