Difference between revisions of "Programming/C-Sharp"

From HPC
Jump to: navigation , search
m
(Programming example)
 
(8 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
== Programming Details ==
 
== Programming Details ==
  
C# is a multi-paradigm programming language encompassing strong typing, imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming. Although originally developed by Microsoft for their own platform it has been standardised and a Linux version called MONO has been developed and matured.
+
C# is a multi-paradigm programming language encompassing strong typing, imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming. Although originally developed by Microsoft for their own platform it has been standardized and a Linux version called MONO has been developed and matured.
  
 
The Mono project provides an open-source C# compiler, a complete open-source implementation of the Common Language Infrastructure including the required framework libraries as they appear in the ECMA specification, and a nearly complete implementation of the Microsoft proprietary .NET class libraries up to .NET 3.5. Note at this time Windows Presentation Foundation (WPF) does not exist.
 
The Mono project provides an open-source C# compiler, a complete open-source implementation of the Common Language Infrastructure including the required framework libraries as they appear in the ECMA specification, and a nearly complete implementation of the Microsoft proprietary .NET class libraries up to .NET 3.5. Note at this time Windows Presentation Foundation (WPF) does not exist.
Line 31: Line 31:
 
     }
 
     }
 
}
 
}
 +
</pre>
 +
<pre style="background-color: #C8C8C8; color: black; border: 2px solid #C8C8C8; font-family: monospace, sans-serif;">
 +
using System;
 +
using System.Linq;
 +
using System.Threading;
 +
using System.Threading.Tasks;
 +
using System.Collections.Concurrent;
 +
 +
class MatrixCalc
 +
{
 +
        static void Main(string[] args)
 +
        {
 +
                Random rnd = new Random();
 +
 +
                int size = int.Parse(args[0]);
 +
                int maxVal = 255;
 +
 +
                double[,] m1 = new double[size, size];
 +
                double[,] m2 = new double[size, size];
 +
                double[,] res = new double[size, size];
 +
 +
                for (int i = 0; i < size; i++)
 +
                {
 +
                        for (int j = 0; j < size; j++)
 +
                        {
 +
                                m1[i, j] = rnd.Next(0, maxVal);
 +
                                m2[i, j] = rnd.Next(0, maxVal);
 +
                        }
 +
                }
 +
                int para = Environment.ProcessorCount;
 +
 +
                var watch = System.Diagnostics.Stopwatch.StartNew();
 +
 +
                Parallel.For(0, para, worker =>
 +
                {
 +
                        var max = size * (worker + 1) / para;
 +
                        var start = size * worker / para;
 +
                        for (int row = start; row < max; row++)
 +
                        {
 +
                                for (int col = start; col < max; col++)
 +
                                {
 +
                                        double temp = 0;
 +
                                        for (int ele = start; ele < max; ele++)
 +
                                        {
 +
                                                temp += m1[row, ele] * m2[ele, col];
 +
                                        }
 +
                                        res[row, col] = temp;
 +
                                }
 +
                        }
 +
                });
 +
 +
                watch.Stop();
 +
                var elapsedMs = watch.ElapsedMilliseconds;
 +
                System.Console.WriteLine(elapsedMs);
 +
        }
 +
}
 +
 
</pre>
 
</pre>
  
Line 39: Line 96:
  
 
* module add mono/4.4.1
 
* module add mono/4.4.1
 
+
* module add mono/5.12.0
 +
* module add mono/5.16.0.220
  
  
Line 47: Line 105:
  
 
<pre style="background-color: black; color: white; border: 2px solid black; font-family: monospace, sans-serif;">
 
<pre style="background-color: black; color: white; border: 2px solid black; font-family: monospace, sans-serif;">
[username@login01 ~]$ module add mono/4.4.1
+
[username@login01 ~]$ module add mono/5.12.0
 
[username@login01 ~]$ mcs -out:cDEMO.exe cDEMO.cs
 
[username@login01 ~]$ mcs -out:cDEMO.exe cDEMO.cs
 
</pre>
 
</pre>
Line 65: Line 123:
 
#SBATCH -p compute
 
#SBATCH -p compute
 
#SBATCH --exclusive
 
#SBATCH --exclusive
 +
#SBATCH --mail-user= your email address here
  
 
echo $SLURM_JOB_NODELIST
 
echo $SLURM_JOB_NODELIST
  
 
module purge
 
module purge
module add mono/4.4.1
+
module add mono/5.12.0
  
 
export I_MPI_DEBUG=5
 
export I_MPI_DEBUG=5
Line 82: Line 141:
 
<pre style="background-color: black; color: white; border: 2px solid black; font-family: monospace, sans-serif;">
 
<pre style="background-color: black; color: white; border: 2px solid black; font-family: monospace, sans-serif;">
 
[username@login01 ~]$ sbatch demo.job
 
[username@login01 ~]$ sbatch demo.job
Submitted batch job 291552
+
Submitted batch job 1291552
 
</pre>
 
</pre>
  
== Further Information ==
+
== Next Steps ==
  
 
* [https://en.wikibooks.org/wiki/C_Sharp_Programming https://en.wikibooks.org/wiki/C_Sharp_Programming]
 
* [https://en.wikibooks.org/wiki/C_Sharp_Programming https://en.wikibooks.org/wiki/C_Sharp_Programming]
 
* [[programming/OpenMP|OpenMP]]
 
* [[programming/OpenMP|OpenMP]]
 
* [[programming/OpenMPI|OpenMPI]]
 
* [[programming/OpenMPI|OpenMPI]]
{|
+
 
|style="width:5%; border-width: 0" | [[File:icon_home.png]]
+
{{Languagespagenav}}
|style="width:95%; border-width: 0" | [[Programming|Programming support]]
 
|-
 
|}
 

Latest revision as of 13:49, 31 August 2023

Programming Details

C# is a multi-paradigm programming language encompassing strong typing, imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming. Although originally developed by Microsoft for their own platform it has been standardized and a Linux version called MONO has been developed and matured.

The Mono project provides an open-source C# compiler, a complete open-source implementation of the Common Language Infrastructure including the required framework libraries as they appear in the ECMA specification, and a nearly complete implementation of the Microsoft proprietary .NET class libraries up to .NET 3.5. Note at this time Windows Presentation Foundation (WPF) does not exist.


Programming example

using System;
using MPI;

class Ring
{
    static void Main(string[] args)
    {
        using (new MPI.Environment(ref args))
        {
            Intracommunicator comm = Communicator.world;
            if (comm.Rank == 0)
            {
                // program for rank 0
            }
            else // not rank 0
            {
                // program for all other ranks
            }
        }
    }
}
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Concurrent;

class MatrixCalc
{
        static void Main(string[] args)
        {
                Random rnd = new Random();

                int size = int.Parse(args[0]);
                int maxVal = 255;

                double[,] m1 = new double[size, size];
                double[,] m2 = new double[size, size];
                double[,] res = new double[size, size];

                for (int i = 0; i < size; i++)
                {
                        for (int j = 0; j < size; j++)
                        {
                                m1[i, j] = rnd.Next(0, maxVal);
                                m2[i, j] = rnd.Next(0, maxVal);
                        }
                }
                int para = Environment.ProcessorCount;

                var watch = System.Diagnostics.Stopwatch.StartNew();

                Parallel.For(0, para, worker =>
                {
                        var max = size * (worker + 1) / para;
                        var start = size * worker / para;
                        for (int row = start; row < max; row++)
                        {
                                for (int col = start; col < max; col++)
                                {
                                        double temp = 0;
                                        for (int ele = start; ele < max; ele++)
                                        {
                                                temp += m1[row, ele] * m2[ele, col];
                                        }
                                        res[row, col] = temp;
                                }
                        }
                });

                watch.Stop();
                var elapsedMs = watch.ElapsedMilliseconds;
                System.Console.WriteLine(elapsedMs);
        }
}


Modules Available

The following modules are available:

  • module add mono/4.4.1
  • module add mono/5.12.0
  • module add mono/5.16.0.220


Compilation

The program would be compiled in the following way:

[username@login01 ~]$ module add mono/5.12.0
[username@login01 ~]$ mcs -out:cDEMO.exe cDEMO.cs

Usage Examples

Batch example

#!/bin/bash

#SBATCH -J openmpi-single-node
#SBATCH -N 1
#SBATCH --ntasks-per-node 28
#SBATCH -o %N.%j.%a.out
#SBATCH -e %N.%j.%a.err
#SBATCH -p compute
#SBATCH --exclusive
#SBATCH --mail-user= your email address here

echo $SLURM_JOB_NODELIST

module purge
module add mono/5.12.0

export I_MPI_DEBUG=5
export I_MPI_FABRICS=shm:tmi
export I_MPI_FALLBACK=no

mono /home/user/CODE_SAMPLES/C-SHARP/cDEMO.exe


[username@login01 ~]$ sbatch demo.job
Submitted batch job 1291552

Next Steps





Languages | Main Page | Further Topics