Paralel Programlama Uygulamasi [C#]
- Sevdanur GENC

- Feb 21, 2013
- 2 min read
Arastirmalarim sonucunda Visual Studio'da paralel programlama hakkinda kucuk bir uygulama ortaya cikarmak istedim. Bunun icin visual studio'da System.Diagnostics ve System.Threading.Tasks dll'leri ile calismam gerekiyor. Uygulamamiza gececek olursak oncelikle visual studio'da console application olusturuyoruz.
Ardindan, olusturmus oldugumuz projenin cs kismina using System.Diagnostics; ve using System.Threading.Tasks; komutlarini namespace'imize ekliyoruz. Uygulamamizda matematiksel bir formulun hem seri islemde hemde paralel islemde gorevler halinde islemcimize gonderiyoruz ve sonuclarini thread'ler uzerinde toplam surelerine gore gormus olucaz.
System.Threading.Thread.CurrentThread.ManagedThreadId komudu ile gondermis oldugum gorevin thread'in hangi id'sinde islem gordugune dair geri bir bilgi almis oluyoruz. time.ElapsedMilliseconds komutu ile yapmis oldugumuz islemlerin miliseccond turunden toplam suresini almis oluyoruz. Parallel.For ile seri islemimizde yapmis oldugumuz for dongusundeki islemleri paralel isleme cevirerek sonucunu vermis olacaktir.
Program.Cs Kaynak Kodlari;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading.Tasks;
namespace ParallelProgrammingApp03
{
class Program
{
static void Main(string[] args)
{
SeriIslemler();
ParalelIslemler();
Console.ReadKey();
}
static void SeriIslemler()
{
Console.WriteLine("Seri Islemler");
Stopwatch time = new Stopwatch();
time.Start();
for (int i = 1; i <= 10; i++)
{
var islemSonuclari = Islem(i);
Console.WriteLine("Deger {0} Sonucu : {1} Thread : {2}", i, islemSonuclari,
System.Threading.Thread.CurrentThread.ManagedThreadId);
}
Console.WriteLine("Toplam Sure : {0} milisecond", time.ElapsedMilliseconds);
Console.WriteLine();
}
static void ParalelIslemler()
{
Console.WriteLine("Paralel Islemler");
Stopwatch time = new Stopwatch();
time.Start();
Parallel.For(1, 11, i =>
{
var islemSonuclari = Islem(i);
Console.WriteLine("Deger {0} Sonucu : {1}, Thread : {2}", i, islemSonuclari,
System.Threading.Thread.CurrentThread.ManagedThreadId);
});
Console.WriteLine("Toplam Sure : {0} milisecond", time.ElapsedMilliseconds);
Console.WriteLine();
}
static double Islem(int Deger)
{
double Sonuc = 0;
for (int i = 0; i < 10000; i++)
{
Sonuc += (1 / Math.Sqrt(2 * Math.PI)) * Math.Exp(0.201 * Math.Pow(Deger, 2) * Math.Exp(Math.Sqrt(Deger)));
}
return Sonuc;
}
}
}
Uygulamanin Ekran Goruntusu;
Gelen sonuclarin hangi thread'den geldiklerine dikkat ediniz. Seri islemlerde sadece 9.thread kullanilirken paralel islemlerde 9,6 ve 10.thread'ler kullanilmis sonuclari kendi aralarinda paylasmislardir. Keyifli Calismalar Dilerim..
Comments