Dienstag, 10. Oktober 2017
4. Aufgabe 4BHIF - C# Threads
Abgabename: 2017_4bhif_aufgabe4_name_vorname.zip
Abgabetermin - 14.11.2017 - Abgabe auf edvossh
Im folgenden Code werden Primzahlen berechnet. Ihre Aufgabe ist es aus diesem Code eine Multithreaded Version zu entwickeln. Die Anzahl der Threads und der Höchstwert der Primzahlen soll über Befehlszeilenargumente einstellbar sein. Testen Sie das Programm mit verschiedenen Höchstwerten und Threadanzahlen. (Zumindestens einmal mit einer Anzahl die den Prozessoren des Systems entsprechen) Erzeugen Sie mit den Ergebnissen eine Tabelle die die Zeiten gegen die der Single-Thread-Version vergleicht. (manuell z.B. in Excel oder auch im Programm)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Diagnostics; namespace Primzahlen { class Program { static void Main(string[] args) { Stopwatch watch = new Stopwatch(); int maxPrim = 0; int number = 0; int tests = 0; watch.Start(); Prim(1600000, out maxPrim, out number, out tests); watch.Stop(); Console.WriteLine("Es wurden {0} Primzahlen gefunden", number); Console.WriteLine("Die höchste gefundene Primzahl ist {0}", maxPrim); Console.WriteLine("Die Laufzeit betrug {0:F0} Millisekungen", watch.ElapsedMilliseconds); Console.WriteLine("Es wurden {0} Vergleiche durchgeführt", tests); } private static void Prim(int max, out int maxPrim, out int number, out int tests) { List<int> prims = new List<int>(); int i = 5; tests = 0; prims.Add(2); prims.Add(3); while (i < max) { int maxTeiler = (int)Math.Sqrt(i) + 1; int j = 0; while (true) { int n = prims[j]; int rest = (i % n); ++tests; if (rest == 0) break; //keine Primzahl if(n >= maxTeiler) { prims.Add(i); break; } ++j; } i += 2; } number = prims.Count; maxPrim = prims[number - 1]; } } }
Beispieltabelle für Ausgabe:
max Primzahl nr. Primzahlen ein Thread zwei Threads vier Threads 100000 9592 44ms 60ms 80ms 200000 17984 95ms 98ms 104ms 400000 33860 223ms 227ms 230ms ... 51200000 3068712 106000ms 61300ms 32940ms
Abonnieren Posts [Atom]
Kommentar veröffentlichen