با سلام!
توابعی که در محاسبات موازی به کار گرفته می شود باید این قابلیت را داشته باشند که بخشی از محاسبه را در محدوده ی تعیین شده انجام دهند. با توجه به مثال پست اول؛ تابع پویش گر اعداد اول طوری برنامه ریزی می شود تا اعداد را در یک بازه ی خاص بررسی کند. کد نویسی تابع بدین صورت است:
کد:
Imports System.Math
Public Class SimpleClass
Inherits MarshalByRefObject
Dim adder As Boolean
Public Function NumScan(ByVal firstno As Long, ByVal lastno As Long) As ArrayList
Dim comparr As New ArrayList()
comparr.Add(2)
For i As Integer = 3 To Int(Sqrt(lastno))
adder = True
For j As Integer = 0 To comparr.Count - 1
If Int(Sqrt(comparr(j))) >= i Then Exit For
If i Mod comparr(j) = 0 Then
adder = False
Exit For
End If
Next
If adder = True Then comparr.Add(i)
Next
For i As Long = firstno To lastno
adder = True
For j As Integer = 0 To comparr.Count - 1
If Int(Sqrt(comparr(j))) >= i And comparr(j) <> i Then Exit For
If i Mod comparr(j) = 0 Then
adder = False
Exit For
End If
Next
If adder = True Then NumScan.Add(i)
Next
End Function
End Class
کلاس SimpleClass (شامل (NumScan بر روی هسته ی محاسباتی قرار می گیرد و با توجه به آرگومان تابع، اعداد طبیعی بین firstno و lastno را بررسی می کند. اعدادی که در این بین اول باشند در ArrayList تعریف شده وارد می شوند.
الگوریتم یافتن اعداد بر اساس غربال اراتستن است. در این روش برای بهبود سرعت پردازش، ابتدا یک حلقه برای یافتن مقسوم علیه های اول در نظر گرفته شده است. حلقه ی دوم عمل اصلی را انجام می دهد.
هسته ی اصلی می تواند با توجه به تعداد هسته های محاسباتی، بازه های تفکیک شده به دست آورد و سپس هر بازه را با توجه به رابطه ی زیر به یک محاسبه گر نسبت دهد:
[First, Last] => ScanNum(First As Long, Last As Long)
در نهات با ارسال دستور، محاسبات موازی آغاز می شوند. در ادامه در مورد نحوه ی تعامل هسته ها در شبکه بحث می کنیم.:11():