Skip to content
Closed
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
12 changes: 12 additions & 0 deletions App/App.fsproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">

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

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

</Project>
25 changes: 25 additions & 0 deletions App/Program.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
open System.Threading.Tasks

let height = 10
let width = 20

// Parallel.For(0, height * width, fun index ->
// let i = index / width
// let j = index % width

// printfn "i: %d, j: %d, Thread: %d" i j System.Threading.Thread.CurrentThread.ManagedThreadId
// ) |> ignore

(*
0 .. 10
..
20
*)

// for k in 0 .. 10 * 20 - 1 do
// let i = k / 10
// let j = k % 10
// printfn "%d %d %d" k i j
let a = 5 / 2

printfn "%d" a
21 changes: 21 additions & 0 deletions Benchmarks/ImageProcessingB/ImageProcessingB.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/ImageProcessingB/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
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>
<ItemGroup>
<ProjectReference Include="..\src\Sortings\Sortings.fsproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.14.0" />
</ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">

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

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

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

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

</Project>
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 SortingsB

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
20 changes: 19 additions & 1 deletion HomeWork.sln
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,14 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Sortings", "src\Sortings\So
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SortingsT", "Tests\SortingsT\SortingsT.fsproj", "{1D6CFA13-FD9D-4586-A463-1C023123E2CA}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Benchmarks", "Benchmarks\Benchmarks.fsproj", "{66023F5A-8456-4F66-9318-A0BFB68ED14A}"
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SortingsB", "Benchmarks\SortingsB\Benchmarks.fsproj", "{66023F5A-8456-4F66-9318-A0BFB68ED14A}"
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}") = "ImageProcessingB", "Benchmarks\ImageProcessingB\ImageProcessingB.fsproj", "{538E3C6C-8ADC-44EE-919C-EAD4C67C3AF0}"
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}"
Expand All @@ -29,6 +31,12 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "LineralAlgebra", "src\Liner
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "LineralAlgebraT", "Tests\LineralAlgebraT\LineralAlgebraT.fsproj", "{C42A6017-8A61-4469-8FCD-EEBF49198D80}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "App", "App\App.fsproj", "{9C6529F4-1014-4655-A47E-D807D8604BD0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Benchmarks\SortingsB", "Benchmarks\SortingsB", "{2DE1F8AE-2C09-422E-84AD-AC77FA4BFDED}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Benchmarks", "Benchmarks", "{BD15DB9C-BF1B-4219-AF93-796337C6399A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -58,6 +66,10 @@ Global
{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
{538E3C6C-8ADC-44EE-919C-EAD4C67C3AF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{538E3C6C-8ADC-44EE-919C-EAD4C67C3AF0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{538E3C6C-8ADC-44EE-919C-EAD4C67C3AF0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{538E3C6C-8ADC-44EE-919C-EAD4C67C3AF0}.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
Expand All @@ -82,6 +94,10 @@ Global
{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
{9C6529F4-1014-4655-A47E-D807D8604BD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9C6529F4-1014-4655-A47E-D807D8604BD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C6529F4-1014-4655-A47E-D807D8604BD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C6529F4-1014-4655-A47E-D807D8604BD0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{F793D6BB-E68A-473E-B11F-1D7888DF4D4A} = {00DFC406-0A95-4C11-8BF2-4FD28C28061D}
Expand All @@ -94,5 +110,7 @@ Global
{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}
{66023F5A-8456-4F66-9318-A0BFB68ED14A} = {2DE1F8AE-2C09-422E-84AD-AC77FA4BFDED}
{538E3C6C-8ADC-44EE-919C-EAD4C67C3AF0} = {BD15DB9C-BF1B-4219-AF93-796337C6399A}
EndGlobalSection
EndGlobal
Loading