<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://hpc.mediawiki.hull.ac.uk/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NikolaiV</id>
	<title>HPC - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://hpc.mediawiki.hull.ac.uk/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NikolaiV"/>
	<link rel="alternate" type="text/html" href="https://hpc.mediawiki.hull.ac.uk/Special:Contributions/NikolaiV"/>
	<updated>2026-05-26T02:26:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://hpc.mediawiki.hull.ac.uk/index.php?title=Programming/C-Sharp&amp;diff=41652</id>
		<title>Programming/C-Sharp</title>
		<link rel="alternate" type="text/html" href="https://hpc.mediawiki.hull.ac.uk/index.php?title=Programming/C-Sharp&amp;diff=41652"/>
		<updated>2023-08-31T13:49:31Z</updated>

		<summary type="html">&lt;p&gt;NikolaiV: /* Programming example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Programming Details ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Programming example ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color: #C8C8C8; color: black; border: 2px solid #C8C8C8; font-family: monospace, sans-serif;&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using MPI;&lt;br /&gt;
&lt;br /&gt;
class Ring&lt;br /&gt;
{&lt;br /&gt;
    static void Main(string[] args)&lt;br /&gt;
    {&lt;br /&gt;
        using (new MPI.Environment(ref args))&lt;br /&gt;
        {&lt;br /&gt;
            Intracommunicator comm = Communicator.world;&lt;br /&gt;
            if (comm.Rank == 0)&lt;br /&gt;
            {&lt;br /&gt;
                // program for rank 0&lt;br /&gt;
            }&lt;br /&gt;
            else // not rank 0&lt;br /&gt;
            {&lt;br /&gt;
                // program for all other ranks&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color: #C8C8C8; color: black; border: 2px solid #C8C8C8; font-family: monospace, sans-serif;&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Collections.Concurrent;&lt;br /&gt;
&lt;br /&gt;
class MatrixCalc&lt;br /&gt;
{&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
                Random rnd = new Random();&lt;br /&gt;
&lt;br /&gt;
                int size = int.Parse(args[0]);&lt;br /&gt;
                int maxVal = 255;&lt;br /&gt;
&lt;br /&gt;
                double[,] m1 = new double[size, size];&lt;br /&gt;
                double[,] m2 = new double[size, size];&lt;br /&gt;
                double[,] res = new double[size, size];&lt;br /&gt;
&lt;br /&gt;
                for (int i = 0; i &amp;lt; size; i++)&lt;br /&gt;
                {&lt;br /&gt;
                        for (int j = 0; j &amp;lt; size; j++)&lt;br /&gt;
                        {&lt;br /&gt;
                                m1[i, j] = rnd.Next(0, maxVal);&lt;br /&gt;
                                m2[i, j] = rnd.Next(0, maxVal);&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                int para = Environment.ProcessorCount;&lt;br /&gt;
&lt;br /&gt;
                var watch = System.Diagnostics.Stopwatch.StartNew();&lt;br /&gt;
&lt;br /&gt;
                Parallel.For(0, para, worker =&amp;gt;&lt;br /&gt;
                {&lt;br /&gt;
                        var max = size * (worker + 1) / para;&lt;br /&gt;
                        var start = size * worker / para;&lt;br /&gt;
                        for (int row = start; row &amp;lt; max; row++)&lt;br /&gt;
                        {&lt;br /&gt;
                                for (int col = start; col &amp;lt; max; col++)&lt;br /&gt;
                                {&lt;br /&gt;
                                        double temp = 0;&lt;br /&gt;
                                        for (int ele = start; ele &amp;lt; max; ele++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                temp += m1[row, ele] * m2[ele, col];&lt;br /&gt;
                                        }&lt;br /&gt;
                                        res[row, col] = temp;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                });&lt;br /&gt;
&lt;br /&gt;
                watch.Stop();&lt;br /&gt;
                var elapsedMs = watch.ElapsedMilliseconds;&lt;br /&gt;
                System.Console.WriteLine(elapsedMs);&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modules Available ====&lt;br /&gt;
&lt;br /&gt;
The following modules are available:&lt;br /&gt;
&lt;br /&gt;
* module add mono/4.4.1&lt;br /&gt;
* module add mono/5.12.0&lt;br /&gt;
* module add mono/5.16.0.220&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Compilation ====&lt;br /&gt;
&lt;br /&gt;
The program would be compiled in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color: black; color: white; border: 2px solid black; font-family: monospace, sans-serif;&amp;quot;&amp;gt;&lt;br /&gt;
[username@login01 ~]$ module add mono/5.12.0&lt;br /&gt;
[username@login01 ~]$ mcs -out:cDEMO.exe cDEMO.cs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Batch example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color: #f5f5dc; color: black; font-family: monospace, sans-serif;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
#SBATCH -J openmpi-single-node&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node 28&lt;br /&gt;
#SBATCH -o %N.%j.%a.out&lt;br /&gt;
#SBATCH -e %N.%j.%a.err&lt;br /&gt;
#SBATCH -p compute&lt;br /&gt;
#SBATCH --exclusive&lt;br /&gt;
#SBATCH --mail-user= your email address here&lt;br /&gt;
&lt;br /&gt;
echo $SLURM_JOB_NODELIST&lt;br /&gt;
&lt;br /&gt;
module purge&lt;br /&gt;
module add mono/5.12.0&lt;br /&gt;
&lt;br /&gt;
export I_MPI_DEBUG=5&lt;br /&gt;
export I_MPI_FABRICS=shm:tmi&lt;br /&gt;
export I_MPI_FALLBACK=no&lt;br /&gt;
&lt;br /&gt;
mono /home/user/CODE_SAMPLES/C-SHARP/cDEMO.exe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color: black; color: white; border: 2px solid black; font-family: monospace, sans-serif;&amp;quot;&amp;gt;&lt;br /&gt;
[username@login01 ~]$ sbatch demo.job&lt;br /&gt;
Submitted batch job 1291552&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Next Steps ==&lt;br /&gt;
&lt;br /&gt;
* [https://en.wikibooks.org/wiki/C_Sharp_Programming https://en.wikibooks.org/wiki/C_Sharp_Programming]&lt;br /&gt;
* [[programming/OpenMP|OpenMP]]&lt;br /&gt;
* [[programming/OpenMPI|OpenMPI]]&lt;br /&gt;
&lt;br /&gt;
{{Languagespagenav}}&lt;/div&gt;</summary>
		<author><name>NikolaiV</name></author>
		
	</entry>
</feed>