Running parallel Excel on Windows HPC 2008 R2 hosted in Windows Azure IaaS VMs: Part 4
click here to Move to previous blog-Part3
1 Introduction
In this post, we proceed with further discussion on simulation through Excel workbook running in parallel on HPC cluster. Below the list of related blogs:
- Blog-Part1 : how to build up a Windows HPC 2008 R2 cluster in Azure IaaS VMs and installation of Excel 2010 on HPC cluster nodes
- Blog-Part2 : how to run a Excel 2010 workbook in parallel on Windows HPC 2008 R2 cluster; it is discussed a basic multiplication table rows by columns
- Blog-Part3 : how to run in Excel 2010 workbook a multiplication table row by column in parallel with data partition in block
In this forth blog we discuss a more complex Excel workbook to calculate a Fresnel transform, very common in linear optics. Fresnel transform is CPU intensive and therefore a good example to point out advantages to run Excel on multiple HPC compute nodes vs single desktop/laptop.
2 Fresnel transform in Excel running in parallel on Windows HPC cluster
In linear optics, electromagnetic diffraction through a plane screen is described in good approximation with Fresnel transform. Let V0(s,t) the electromagnetic field on a point (p,q,z=0) on a plane z=0 and V(x,y,z) the electromagnetic field on point (x,y,z) as shown in Figure 1
Figure 1
At distance z>> l the electromagnetic field V(x,y,z) is described with good approximation through the Fresnel transform:
Equation 1: Fresnel equation
Our goal is to write an Excel workbook able to run in parallel on Windows HPC cluster installed in windows Azure IaaS VMs. By substitution of Eulero's formula
in Equation 1 we get the electromagnetic pattern V(x,y,z) on a plan (x,y,z) composed of real part and imaginary part:
Equation 2: Fresnel equation slit up in real and imaginary parts
For simplicity, we set the real and imaginary part:
Equation 3: real and imaginary part of Fresnel equation
To run a compute simulation we need to apply a sampling in plane (p,q,z=0) and in plane (x,y,z). Let consider
- a segment Lp centered around the p axis and Lq centered around the q axis
- a segment Xm centered around the x axis and Yn centered aroung the y axis
- Np the number of samples in the p axis
- Nq the number of samples in the q axis
- Nm the number of samples in the x axis
- Nn the number of samples in the y axis
Figure 2: sampling intervals on two planes
In Equation 4 is reported the sampling intervals and the relative ranges
Equation 4: sampling intervals and range of sampling
In Equation 4 we have following values:
Dp: it is distance between two adjacency samples along the p axis
Dq: it is the distance between two adjacency samples along the q axis
Dx: it is the distance between two adjacency samples along the x axis
Dy: it is the distance between two adjacency samples along the y axis
The distance rjl between the sample (pj,ql,z=0) and the sample (xm,yn,z) is shown in Equation 5:
Equation 5: sampled intervals
The discrete expression for real and imaginary part of electromagnetic field are shown in the Equation 6:
Equation 6: discrete expression of real and imaginary part of Fresnel equation
The intensity I(xm,yn,z) of electromagnetic field is equal to the square of module of electromagnetic field V(xm,yn,z):
Equation 7: discrete expression of electromagnetic intensity
Our simulation is based on the Equation 4-Equation 7.
3 Project organization
Project is organized in four modules:
- HPCExcelMacros.bas : it contains all HPC macro framework functions designated to support parallel execution
- HPCControlMacros.bas : a set of VBA codes contains the “control” functions. In this VBA module we have few parameters as the name of HPC head node and the shared folder used from the different HPC compute nodes to get the Excel file for running the simulation
- WorkingFunctions.bas : code to run discrete Fresnel transform (Equation 4- Equation 7)
- PlottingGraph.bas : function to plot outcome of simulation [intensity I(x,y,z) of electromagnetic field in Fresnel approximation].This VBA module contains some controls that allow to change view and orientation of graphical chart (clockwise rotation, anticlockwise rotation, change in perspective angle, elevation angle).
3.1 HPCExcelMacros.bas
Attribute VB_Name = "HPCExcelMacros"
Option Explicit
'==========================================================
' Section 1: Variables and constants
'==========================================================
Public Pi As Double
Public z As Double
Public lambda As Double
Public K As Double
Public V0 As Double
Public Nx As Integer
Public Ny As Integer
Public Lx As Double
Public Ly As Double
Public deltaX As Double
Public deltaY As Double
Public Np As Integer
Public Nq As Integer
Public Lp As Double
Public Lq As Double
Public percentageCompletion As Single
Public m As Integer
Public n As Integer
Public indexRow As Integer
Public indexCol As Integer
Public CounterStatus As Integer
Dim CalculationComplete As Boolean
Dim StartTime As Double
Dim FinishTime As Double
Public Const SingleBlock As Integer = 5
Public Const NumBlocks As Integer = 50
Public Const SizeVector As Integer = NumBlocks * SingleBlock
'==========================================================
' Section 2: HPC Calculation Macros
'==========================================================
Public Function HPC_GetVersion()
HPC_GetVersion = "1.0"
End Function
Public Function HPC_Initialize()
ThisWorkbook.Sheets("Sheet2").Cells.ClearContents
ThisWorkbook.Sheets("Sheet1").Range("percentageCompletion").Value = 0
percentageCompletion = 0
Call DeleteGraph("Sheet1")
'==============================================
Application.ScreenUpdating = False
V0 = ThisWorkbook.Sheets("Sheet1").Range("V0").Value
z = ThisWorkbook.Sheets("Sheet1").Range("zaxis").Value
lambda = ThisWorkbook.Sheets("Sheet1").Range("lambda").Value
Nx = ThisWorkbook.Sheets("Sheet1").Range("Nx").Value ' Nx: number of samples in x-axis
Ny = ThisWorkbook.Sheets("Sheet1").Range("Ny").Value ' Ny: number of samples in y-axis
Lx = ThisWorkbook.Sheets("Sheet1").Range("Lx").Value
Ly = ThisWorkbook.Sheets("Sheet1").Range("Ly").Value
Np = ThisWorkbook.Sheets("Sheet1").Range("Np").Value ' Np: number of samples in x-axis
Nq = ThisWorkbook.Sheets("Sheet1").Range("Nq").Value ' Nq: number of samples in y-axis
Lp = ThisWorkbook.Sheets("Sheet1").Range("Lp").Value
Lq = ThisWorkbook.Sheets("Sheet1").Range("Lq").Value
deltaX = Lx / Nx
deltaY = Ly / Ny
Pi = 4 * Atn(1)
m = -Nx / 2
n = -Ny / 2
indexRow = 1
indexCol = 1
CounterStatus = 0 ' counter on number of record computed
CalculationComplete = False
StartTime = Timer
End Function
Public Function HPC_Partition() As Variant
Dim data(SizeVector) As Variant
Dim indexBlock As Integer
Dim x As Double
Dim y As Double
For indexBlock = 0 To (NumBlocks - 1)
If indexCol > Nx Then
indexCol = 1
m = -Nx / 2
'----
indexRow = indexRow + 1
n = n + 1
End If
If indexRow > Ny Then
' return null to indicate the end of the calculation
HPC_Partition = Null
' and exit the function now, we can skip the rest
Exit Function
End If
x = m * deltaX
y = n * deltaY
data(0 + indexBlock * SingleBlock) = indexCol
data(1 + indexBlock * SingleBlock) = indexRow
data(2 + indexBlock * SingleBlock) = x
data(3 + indexBlock * SingleBlock) = y
If ((indexRow = Nx) And (indexCol = Ny)) Then
m = m + 1
indexCol = indexCol + 1
Exit For
End If
' move to the next sample
m = m + 1
' move to the next col
indexCol = indexCol + 1
Next
HPC_Partition = data
End Function
Public Function HPC_Execute(data As Variant) As Variant
Dim x As Double
Dim y As Double
Dim resultVal As Double
Dim indexBlock As Integer
V0 = ThisWorkbook.Sheets("Sheet1").Range("V0").Value
z = ThisWorkbook.Sheets("Sheet1").Range("zaxis").Value
lambda = ThisWorkbook.Sheets("Sheet1").Range("lambda").Value
Np = ThisWorkbook.Sheets("Sheet1").Range("Np").Value ' Np: number of samples in x-axis
Nq = ThisWorkbook.Sheets("Sheet1").Range("Nq").Value ' Nq: number of samples in y-axis
Lp = ThisWorkbook.Sheets("Sheet1").Range("Lp").Value
Lq = ThisWorkbook.Sheets("Sheet1").Range("Lq").Value
For indexBlock = 0 To (((UBound(data)) / SingleBlock) - 1)
x = data(2 + indexBlock * SingleBlock)
y = data(3 + indexBlock * SingleBlock)
resultVal = FresnelTransform(x, y, z, V0, lambda, Lp, Lq, Np, Nq)
data(4 + indexBlock * SingleBlock) = resultVal
Next
' return value from the function
HPC_Execute = data
End Function
Public Function HPC_Merge(data As Variant)
Dim indexBlock As Integer
Dim i As Integer
Dim j As Integer
Dim x As Double
Dim y As Double
Dim resultVal As Double
'Application.ScreenUpdating = False
For indexBlock = 0 To (((UBound(data)) / SingleBlock) - 1)
i = data(0 + indexBlock * SingleBlock)
j = data(1 + indexBlock * SingleBlock)
x = data(2 + indexBlock * SingleBlock)
y = data(3 + indexBlock * SingleBlock)
resultVal = data(4 + indexBlock * SingleBlock)
ThisWorkbook.Sheets("Sheet2").Cells(1, i + 1).Value = x
ThisWorkbook.Sheets("Sheet2").Cells(j + 1, 1).Value = y
ThisWorkbook.Sheets("Sheet2").Cells(j + 1, i + 1).Value = resultVal
CounterStatus = CounterStatus + 1
If (i = Nx) And (j = Ny) Then
Call UpdateStatus
Application.ScreenUpdating = True
Exit For
End If
Next
Call UpdateStatus
'Application.ScreenUpdating = True
End Function
Public Function HPC_Finalize()
Dim cellRangeGraph As String
Dim cellRangeFormatting As String
FinishTime = Timer
CalculationComplete = True
Call UpdateStatus
' Clean up the calculation. It's a good idea to
' leave this here, even if you make changes to
' this function. The function we call here is in
' the "HPCControlMacros" module.
CleanUpClusterCalculation
cellRangeGraph = Worksheets("Sheet2").Cells(1, 1).Address(False, False) + ":" + Worksheets("Sheet2").Cells(Nx + 1, Ny + 1).Address(False, False)
cellRangeFormatting = Worksheets("Sheet2").Cells(2, 2).Address(False, False) + ":" + Worksheets("Sheet2").Cells(Nx + 1, Ny + 1).Address(False, False)
Call GenerateGraph("Sheet1", "Sheet2", cellRangeGraph)
Call ConditionalFormatting("Sheet2", cellRangeFormatting)
Application.ScreenUpdating = True
End Function
Public Function HPC_ExecutionError(errorMessage As String, errorContents As String)
MsgBox errorMessage & vbCrLf & vbCrLf & errorContents
End Function
Sub UpdateStatus()
Dim statusMessage As String
Application.ScreenUpdating = True
If Not CalculationComplete Then
statusMessage = "Calculated " & CounterStatus & "/" & (Nx * Ny)
Else
statusMessage = "Calculated " & CounterStatus & "/" & (Nx * Ny)
statusMessage = statusMessage & "; completed in " & FormatNumber(FinishTime - StartTime) & "s"
End If
Application.StatusBar = statusMessage
ActiveSheet.Range("percentageCompletion").Value = CounterStatus / (Nx * Ny)
Application.ScreenUpdating = False
End Sub
3.2 HPCControlMacros.bas
Attribute VB_Name = "HPCControlMacros"
Option Explicit
'==========================================================
' Section 1: Variables and constants
'==========================================================
Private Const HPC_ClusterScheduler = "exhn001"
Private Const HPC_NetworkShare = "\\exhn001\share"
Private Const HPC_JobTemplate = ""
Private HPCExcelClient As IExcelClient
'==========================================================
' Section 2: Control Functions
'==========================================================
Private Sub CalculateWorkbook(CalculateOnDesktop As Boolean)
Dim HPCWorkbookPath As String
On Error GoTo ErrorHandler
' Create a new excelCient instance per session
Set HPCExcelClient = New ExcelClient
' Initialize the excel client object with the current workbook
HPCExcelClient.Initialize ActiveWorkbook
If CalculateOnDesktop = False Then
' We need a copy of the file on the network, so it's accessible
' by the cluster compute nodes. Save a temporary copy to the
' share directory.
HPCWorkbookPath = HPC_NetworkShare & Application.PathSeparator & ActiveWorkbook.Name
ActiveWorkbook.SaveCopyAs HPCWorkbookPath
' Create a cluster session with the desired options. Here, we're
' just using the scheduler name and (optionally) a job template.
If HPC_JobTemplate <> "" Then
HPCExcelClient.OpenSession headNode:=HPC_ClusterScheduler, remoteWorkbookPath:=HPCWorkbookPath, jobTemplate:=HPC_JobTemplate
Else
HPCExcelClient.OpenSession headNode:=HPC_ClusterScheduler, remoteWorkbookPath:=HPCWorkbookPath
End If
End If
' Run on local machine or cluster as chosen in workbook
HPCExcelClient.Run CalculateOnDesktop
Exit Sub
ErrorHandler:
' Notify user of error and clean up any allocated resources
MsgBox Prompt:=Err.Description, Title:="HPC Calculation Error"
If Not HPCExcelClient Is Nothing Then
HPCExcelClient.Dispose
End If
End Sub
Public Sub CalculateWorkbookOnDesktop()
CalculateWorkbook (True)
End Sub
Public Sub CalculateWorkbookOnCluster()
CalculateWorkbook (False)
End Sub
Public Sub CleanUpClusterCalculation()
On Error Resume Next
HPCExcelClient.CloseSession
HPCExcelClient.Dispose
On Error GoTo 0
End Sub
3.3 WorkingFunctions.bas
Attribute VB_Name = "WorkingFunctions"
Option Explicit
' Np: number samples in origin plane in p axis
' Nq: number samples in origin plane in q axis
Public Function FresnelTransform(x As Double, y As Double, z As Double, V0 As Double, lambda As Double, Lp As Double, Lq As Double, Np As Integer, Nq As Integer) As Double
Dim realPart As Double
Dim imgPart As Double
Dim i As Integer
Dim j As Integer
Dim p As Double
Dim q As Double
Dim r As Double
Dim deltaP As Double
Dim deltaQ As Double
deltaP = Lp / Np
deltaQ = Lq / Nq
Pi = 4 * Atn(1)
K = 2 * Pi / lambda
realPart = 0
imgPart = 0
For j = (-Nq / 2) To (Nq / 2) Step 1
q = j * deltaQ
For i = (-Np / 2) To (Np / 2) Step 1
p = i * deltaP
r = Sqr(z ^ 2 + (x - p) ^ 2 + (y - q) ^ 2)
realPart = realPart + disturbance(V0, p, q) * Sin(K * r) * ((z * deltaP * deltaQ) / (lambda * (r ^ 2)))
imgPart = imgPart - disturbance(V0, p, q) * Cos(K * r) * ((z * deltaP * deltaQ) / (lambda * (r ^ 2)))
Next i
Next j
' return value
FresnelTransform = ((realPart ^ 2) + (imgPart ^ 2))
End Function
Function disturbance(V0 As Double, p As Double, q As Double) As Double
Dim Radius As Double
Radius = 0.0005
If ((p ^ 2) + (q ^ 2)) <= (Radius * Radius) Then
disturbance = V0
Else
disturbance = 0
End If
End Function
In the WorkingFunctions.bas macro it is useful enlighten some variables:
- lambda: it is the wavelength
- K=2 * Pi / lambda : it is the wavenumber
- the Function disturbance(V0 As Double, p As Double, q As Double) is the electromagnetic function in the plane (p,q,z0)
- R is the radius of pinhole in the plane z=0
- Public Function FresnelTransform it is the Intensity of light at the coordinate (x,y,z)
3.4 PlottingGraph.bas
Attribute VB_Name = "PlottingGraph" <br> Option Explicit Public Const NameGraph As String = "Intensity" Public Sub DeleteGraph(sheetGraphName As String) <br> Dim ws As Worksheet <br> Set ws = Worksheets(sheetGraphName) <br> On Error Resume Next <br> 'ActiveSheet.ChartObjects.Delete <br> ws.ChartObjects.Delete <br> End Sub Public Sub GenerateGraph(sheetGraphName As String, sheetDataName As String, rangeCellsToBePlot As String) <br> Dim ws As Worksheet <br> Dim wsData As Worksheet <br> Dim rSrc As Range, rLocation As Range <br> Dim chtO As ChartObject Set ws = Worksheets(sheetGraphName) <br> Set wsData = Worksheets(sheetDataName) Set rSrc = wsData.Range(rangeCellsToBePlot) <br> Set rLocation = ws.Range("E4:L33") With rLocation <br> Set chtO = ws.ChartObjects.Add(.Left, .Top, .Width, .Height) <br> chtO.Name = NameGraph <br> End With With chtO.Chart <br> .SetSourceData Source:=rSrc <br> ' xlSurface: Displays a standard surface chart <br> ' xlSurfaceWireFrame: Displays a surface chart without colors <br> ' xlSurfaceTopView: Displays the a surface chart viewed from above <br> ' xlSurfaceTopViewWireFrame: Displays a surface chart without colors, viewed from abov <br> .ChartType = xlSurface <br> .HasTitle = True <br> .ChartTitle.Font.Size = 10 <br> .ChartTitle.Font.Color = RGB(110, 10, 155) <br> .ChartTitle.Text = "Intensity-Fresnel approx." <br> .Legend.Position = xlRight <br> .Legend.Font.Size = 8 <br> .Legend.Font.Name = "Arial" <br> End With 'With chtO.Chart <br> ' .Rotation = 40 <br> ' .Elevation = 30 <br> ' .Perspective = 15 <br> 'End With <br> End Sub <br> ' The rotation of the 3-D chart view (the rotation of the plot area around the z-axis, in degrees). <br> ' The default value is 20. <br> Sub Rotation1_Click() <br> Dim objCht As ChartObject <br> Dim rotationValue As Integer <br> On Error Resume Next <br> Set objCht = Worksheets("Sheet1").ChartObjects(NameGraph) <br> If Not objCht Is Nothing Then <br> rotationValue = Worksheets("Sheet1").ChartObjects(NameGraph).Chart.Rotation <br> With Worksheets("Sheet1").ChartObjects(NameGraph).Chart <br> .Rotation = rotationValue + 20 <br> End With <br> End If <br> End Sub ' The rotation of the 3-D chart view (the rotation of the plot area around the z-axis, in degrees). <br> ' The default value is 20. <br> Sub Rotation2_Click() <br> Dim objCht As ChartObject <br> Dim rotationValue As Integer <br> On Error Resume Next <br> Set objCht = Worksheets("Sheet1").ChartObjects(NameGraph) <br> If Not objCht Is Nothing Then <br> rotationValue = Worksheets("Sheet1").ChartObjects(NameGraph).Chart.Rotation <br> With Worksheets("Sheet1").ChartObjects(NameGraph).Chart <br> .Rotation = rotationValue - 20 <br> End With <br> End If <br> End Sub Sub Elevation1_Click() <br> Dim objCht As ChartObject <br> Dim elevationValue As Integer <br> On Error Resume Next <br> Set objCht = Worksheets("Sheet1").ChartObjects(NameGraph) <br> If Not objCht Is Nothing Then <br> 'Elevation: Gets or sets the elevation of the 3-D chart view, in degrees. <br> elevationValue = Worksheets("Sheet1").ChartObjects(NameGraph).Chart.Elevation <br> With Worksheets("Sheet1").ChartObjects(NameGraph).Chart <br> .Elevation = (elevationValue + 20) Mod 90 <br> End With <br> End If <br> End Sub Sub Elevation2_Click() <br> Dim objCht As ChartObject <br> Dim elevationValue As Integer <br> On Error Resume Next <br> Set objCht = Worksheets("Sheet1").ChartObjects(NameGraph) <br> If Not objCht Is Nothing Then <br> 'Elevation: Gets or sets the elevation of the 3-D chart view, in degrees. <br> elevationValue = Worksheets("Sheet1").ChartObjects(NameGraph).Chart.Elevation <br> With Worksheets("Sheet1").ChartObjects(NameGraph).Chart <br> .Elevation = Abs((elevationValue - 20) Mod 90) <br> End With <br> End If <br> End Sub ' Perspective: Gets or sets the perspective for the 3-D chart view. <br> ' the perspective for the 3-D chart view. Must be between 0 and 100. <br> Sub Perspective1_Click() <br> Dim objCht As ChartObject <br> Dim perspectiveValue As Integer <br> On Error Resume Next <br> Set objCht = Worksheets("Sheet1").ChartObjects(NameGraph) <br> If Not objCht Is Nothing Then <br> 'Elevation: Gets or sets the elevation of the 3-D chart view, in degrees. <br> perspectiveValue = Worksheets("Sheet1").ChartObjects(NameGraph).Chart.Perspective <br> With Worksheets("Sheet1").ChartObjects(NameGraph).Chart <br> .Perspective = (perspectiveValue + 20) Mod 100 <br> End With <br> End If <br> End Sub <br> Sub Perspective2_Click() <br> Dim objCht As ChartObject <br> Dim perspectiveValue As Integer <br> On Error Resume Next <br> Set objCht = Worksheets("Sheet1").ChartObjects(NameGraph) <br> If Not objCht Is Nothing Then <br> 'Elevation: Gets or sets the elevation of the 3-D chart view, in degrees. <br> perspectiveValue = Worksheets("Sheet1").ChartObjects(NameGraph).Chart.Perspective <br> With Worksheets("Sheet1").ChartObjects(NameGraph).Chart <br> .Perspective = Abs((perspectiveValue - 20) Mod 100) <br> End With <br> End If <br> End Sub ' https://msdn.microsoft.com/en-us/library/office/hh203953%28v=office.14%29.aspx <br> Public Sub ConditionalFormatting(sheetDataName As String, rangeDataCells As String) <br> Dim rng As Range <br> Set rng = Worksheets(sheetDataName).Range(rangeDataCells) '"B2:AY51" <br> rng.FormatConditions.Delete ' Add a 2-color scale. <br> Dim cs As ColorScale <br> Set cs = rng.FormatConditions.AddColorScale(ColorScaleType:=3) ' Set the color of the lowest value, with a range up to <br> ' the next scale criteria. The color should be red. <br> With cs.ColorScaleCriteria(1) <br> .Type = xlConditionValueLowestValue <br> With .FormatColor <br> .Color = &H6B69F8 <br> ' TintAndShade takes a value between -1 and 1. <br> ' ' -1 is darkest, 1 is lightest. <br> .TintAndShade = 0 <br> End With <br> End With ' At the 50th percentile, the color should be red/green. <br> ' Note that you cannot set the Value property for all values of Type. <br> With cs.ColorScaleCriteria(2) <br> .Type = xlConditionValuePercentile <br> .Value = 50 <br> With .FormatColor <br> .Color = &H84EBFF <br> .TintAndShade = 0 <br> End With <br> End With ' At the highest value, the color should be green. <br> With cs.ColorScaleCriteria(3) <br> .Type = xlConditionValueHighestValue <br> With .FormatColor <br> .Color = &H7BBE63 <br> .TintAndShade = 0 <br> End With <br> End With <br> End Sub
4 Run simulations on HPC cluster with different number of cores
Now that our Excel workbook ( .xlsb file) contains the four modules HPCExcelMacros.bas, HPCControlMacros.bas, WorkingFunctions.bas, PlottingGraph.bas and reference to HPC library (Microsoft_Hpc_Excel) is added, we are ready to run it on Windows HPC cluster. In the macro HPCControlMacros.bas there is a constant:
Private Const HPC_JobTemplate
referring an HPC job template; by default this constant is set to empty ("") that means to use the default job template.
Through the job template the HPC administrator can specify which resources (max job duration, maximum number of nodes, maximum number of cores, etc.) a specific HPC user is authorized to use for HPC job submission. We want to evaluate the performance of our Excel worksheet running many times the same discrete Fresnel transform with same simulation input parameters, but with different number of HPC cores. for this purpose we create by the HPC management console different HPC job template each with different number of maximum number of usable cores:
Login with HPC administrator you see presence of default job template (Figure 3)
Figure 3: default job template
The default job template is create at installation time and it does not set any limitation on resources available in the system.
To define new job templates, click on "New…" in the action pane (Figure 3); a job template wizard drive you to set few parameters (Figure 4)
Figure 4: job template wizard
After specifying job template name click on Next button
Figure 5: limitation of how long a job can run in the HPC cluster
We do not specify any limitation on maximum amount of time a job can run in our HPC cluster (Figure 3).
Next steps in the job template wizard is to set the priority of job; we do not have interest in our test in contention of simultaneous jobs so we left the Priority to Normal default).
Figure 6: job priority set to Normal
Figure 7: option to set a constraint on project name
Last step in job template creation is the node group; default node group “ComputeNodes” include in our case EXCN001 and EXCN002 (Figure 8)
Figure 8: node group
At the end of wizard procedure the new job template appears in the list (Figure 9)
Figure 9: list of job templates
We need to set in the job template the maximum number of cores; right click-on job template and choose “Edit…” (Figure 10)
Figure 10: edit the new job template
In the job template Editor click on Add button and select “Maximum Cores” (Figure 11)
Figure 11: Maximum number of cores
In the Max Value set the value two; in this case when the use will submit a job specifying the job template named “JobTemplate2Cores” it can be used no more than two cores (Figure 12).
Figure 12: job template with maximum two cores
We have as shortcut “Copy” to create a duplicate job template (Figure 13)
Figure 13: copy operation to duplicate the job template
Editing the new copied template we can set the right name and the new max value (Figure 14)
Figure 14: job template with maximum 4 cores
Repeating the procedure we have following list of job templates
Figure 15: list o of job templates
A short description of job templates is reported in the Table 1:
- JobTemplate2Cores: Maximum number of usable cores=2
- JobTemplate4Cores: Maximum number of usable cores=4
- JobTemplate8Cores: Maximum number of usable cores=8
- JobTemplate10Cores: Maximum number of usable cores=10
- JobTemplate12Cores: Maximum number of usable cores=12
- Default: it is the default job template create in installation procedure. tis job template allocate all available cores (in our case 16 cores because we have two XL Azure IaaS VMs)
To run all simulations we consider a circular pinhole in the plane z=0 with radius R (Figure 16) and we fix the input parameters:
Figure 16: pinhole in the plane z=0
R = 0.005m (radius of circular pinhole in the plane z=0)
Nx = 128 (number of samples in Lx segment)
Ny = 128 (number of samples in Ly segment)
Lx = 0.002 m (segment centered around x axis)
Ly = 0.002 m (segment centered around y axis)
Np = 128(number of samples in Lp segment)
Nq = 128 (number of segment in Lq segment)
Lp = 0.005 m (segment centered around the p axis)
Lq = 0.005 m (segment centered around the q axis)
z = 0.25 m
l = 6.94x10-7 m (light length)
V0 = 10 (electromagnetic field value on the plane (p,q,z=0))
In Figure 17 is shown the outcome of simulation for the diffraction field of a circular pinhole.
Figure 17: outcome of simulation
The Sheet1 has few buttons to change the orientation and prospective.
Though the submission of same job with different job templates, we have the chart with elapsed times (Figure 18) Figure 18: elapsed times with different job templates
The chart seems strongly non linear mostly due to the initial value with 2 cores; excluding the values with 2 cores and 4 cores and re-plotting we have the new chart:
Figure 19: elapsed times with different scale factor
The chart in Figure 19 points out a good behavior with strong reduction of elapsed time when the number of available cores increase. Charts in Figure 18-Figure 19 describe the behavior of Excel workbook with block in HPC_Partition equal to 50. it is useful to compare performance of Excel workbook with different block sizes; chart in Figure 20 shows the simulation elapsed time for block size equal to 50 vs block size equal to 5.
With low number of cores 2,4,8 there is no much difference in block size; influence of block size appears in HPC job with larger number of cores. A larger block size reduce traffic between the client and HPC head node carry on a better efficiency in CPU usage (with larger block size every single HpcServiceHost.exe process waits less time).
Figure 20: simulation elapsed times with different block size
HPC heatmap in Figure 21-Figure 24 give an rough idea of CPU utilization and cores allocation with different job templates.
Figure 21: HPC heatmap when runs the job with 16 cores
Figure 20: HPC heatmap when runs a job with 12 cores
Figure 23: HPC heatmap when runs the job with 10 cores
Figure 24: HPC heatmap when runs the job with 4 cores
Here you have all elements to write your Excel workbook and runs on HPC cluster in Azure IaaS VMs; enjoy it!
Fresnel.xlsb
Fresnel simulation