<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
		<id>https://wiki.niif.hu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kzoli%28AT%29niif.hu</id>
		<title>Pro-M - Oktatási Üzletág - Wiki - Szerkesztő közreműködései [hu]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.niif.hu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kzoli%28AT%29niif.hu"/>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Speci%C3%A1lis:Szerkeszt%C5%91_k%C3%B6zrem%C5%B1k%C3%B6d%C3%A9sei/Kzoli(AT)niif.hu"/>
		<updated>2026-11-07T20:48:14Z</updated>
		<subtitle>Szerkesztő közreműködései</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC-Portal&amp;diff=5114</id>
		<title>HPC-Portal</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC-Portal&amp;diff=5114"/>
				<updated>2026-04-23T11:26:59Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: elavult adatok, törölve&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==A portál célja==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:A HPC portál célja a szuperszámítógépek és felhasználóik egységes, és kényelmes adminisztrációja, a kommunikáció egyszerűsítése.&amp;lt;br /&amp;gt;&lt;br /&gt;
:A honlapon az éppen futó kutatási projektekről lehet tájékozódni, mint például a felhasznált processzor idő (felhasználói és aggregált), havi kvóta (szuperszámítógépekre bontva), munkacsoport felhasználóinak aktivitása stb. Az adatokat megtekinthetőek dinamikusan kezelhető diagramokon, általános információk jeleníthetőek meg a szolgáltatások aktuális állapotáról illetve a várható eseményekről, valamint megújított hibabejelentő rendszer is igénybevehető.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Projektvezetőknek továbbfejlesztett adminisztrációt és leegyszerűsített munkamenetet nyújt az új kvótaigénylési rendszer, melynek során az igénylések gyorsabban kerülnek elbírálásra, így a lehető leghamarabb állhat rendelkezésre az igényelt processzoridő, valamint egyszerűen és áttekinthető módon nyerhet információt a projekten dolgozó munkatársak által felhasznált erőforrások alakulásáról.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==A portál bemutatása==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A portál itt érhető el:&lt;br /&gt;
 https://portal.hpc.dkf.hu/&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=4698</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=4698"/>
				<updated>2021-01-12T09:52:23Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|KIFÜ HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
A Kormányzati Informatikai Fejlesztési Ügynökség (KIFÜ) szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* KIFÜ központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=A KIFÜ szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket a KIFÜ nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert a KIFÜ üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll a KIFÜ-vel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF Program adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (Leo)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) ]] &lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 3.75 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi (KNC)&lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |45 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 45&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 5&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== A KIFÜ HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen3 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [https://hpc.kifu.hu/wp-content/uploads/2020/09/KIFU_HPC_Portal_manual.pdf HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
* [https://wiki.niif.hu/index.php?title=HPC_felhasznaloi_alapelvek#Az_NIIF_Szupersz.C3.A1m.C3.ADt.C3.B3g.C3.A9p_Felhaszn.C3.A1l.C3.B3i_Szab.C3.A1lyzata Az NIIF Szuperszámítógép Felhasználói Szabályzata]&lt;br /&gt;
* [https://wiki.niif.hu/index.php?title=HPC_konyvtarak#El.C3.A9rhet.C5.91_f.C3.A1jlrendszerek_a_HPC_k.C3.B6zpontokban Elérhető fájlrendszerek a HPC központokban]&lt;br /&gt;
* [https://wiki.niif.hu/index.php?title=HPC_vizualizacio HPC vizualizációs infrastruktúra elérése]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=4697</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=4697"/>
				<updated>2021-01-12T09:50:20Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: portál törlés, KIFÜ-re átírás&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|KIFÜ HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
A Kormányzati Informatikai Fejlesztési Ügynökség (KIFÜ) szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* KIFÜ központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=A KIFÜ szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket a KIFÜ nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert a KIFÜ üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll a KIFÜ-vel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF Program adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (Leo)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) ]] &lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 3.75 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi (KNC)&lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |45 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 45&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 5&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== A KIFÜ HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen3 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[https://hpc.kifu.hu/wp-content/uploads/2020/09/KIFU_HPC_Portal_manual.pdf|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
* [https://wiki.niif.hu/index.php?title=HPC_felhasznaloi_alapelvek#Az_NIIF_Szupersz.C3.A1m.C3.ADt.C3.B3g.C3.A9p_Felhaszn.C3.A1l.C3.B3i_Szab.C3.A1lyzata Az NIIF Szuperszámítógép Felhasználói Szabályzata]&lt;br /&gt;
* [https://wiki.niif.hu/index.php?title=HPC_konyvtarak#El.C3.A9rhet.C5.91_f.C3.A1jlrendszerek_a_HPC_k.C3.B6zpontokban Elérhető fájlrendszerek a HPC központokban]&lt;br /&gt;
* [https://wiki.niif.hu/index.php?title=HPC_vizualizacio HPC vizualizációs infrastruktúra elérése]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=NIIF_szupersz%C3%A1m%C3%ADt%C3%B3g%C3%A9pek_haszn%C3%A1lata&amp;diff=4501</id>
		<title>NIIF szuperszámítógépek használata</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=NIIF_szupersz%C3%A1m%C3%ADt%C3%B3g%C3%A9pek_haszn%C3%A1lata&amp;diff=4501"/>
				<updated>2019-10-29T13:57:39Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Köszönetnyilvánítás */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A szuperszámítógépekről ==&lt;br /&gt;
A KIFÜ szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* KIFÜ központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: egy helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket a KIFÜ nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert a KIFÜ üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll a KIFÜ-vel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, a KIFÜ adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
=== Köszönetnyilvánítás ===&lt;br /&gt;
Tudományos publikációkban a következő köszönetnyilvánítást javasoljuk:&lt;br /&gt;
&lt;br /&gt;
'''We acknowledge KIFÜ for awarding us access to resource based in Hungary.'''&lt;br /&gt;
&lt;br /&gt;
Where technical support has been received the following additional text should also be used:&lt;br /&gt;
&lt;br /&gt;
'''The support of [name of person/people] from KIFÜ, Hungary to the technical work is gratefully acknowledged.'''&lt;br /&gt;
&lt;br /&gt;
== Hozzáférés a szuperszámítógépekhez ==&lt;br /&gt;
&lt;br /&gt;
A témában több videót is készítettünk, amelyek bemutatják a hozzáférés menetét (kulcsgenerálás és hozzáférés) és a filefeltöltés gyakorlati tutoriál keretében Windows operációs rendszeren.&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/recordings/details/12290,Hozza_fe_re_s_a_HPC-hez_kezdo_le_pe_sek_elo_ada_s_e_s_demo_ Kezdő lépések (videó)]&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/recordings/details/12307,A_HPC_felhaszna_la_s_gyakorlati_le_pe_sei_demo_.mp4 A HPC felhasználás gyakorlati lépései (videó)]&lt;br /&gt;
&lt;br /&gt;
A fenti videók tartalmazhatnak elavult információkat pl. az ütemezővel kapcsolatban, a jelenlegi ütemező használatához külön videóanyagot ajánljunk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A szuperszámítógépekhez kulcsos SSH használatával lehet hozzáférni. Ajánlott UTF-8 képes terminált használ az ékezetes betűk megjeelenítése érdekében. PUTTY terminál esetén a ''Window/Translation'' beállítás alatt a character set-et kell UTF-8-ra állítani.&lt;br /&gt;
&lt;br /&gt;
=== SSH belépés ===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
ssh USER@login.SITE.hpc.niif.hu&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; a felhasználónév, a &amp;lt;code&amp;gt;SITE&amp;lt;/code&amp;gt; pedig a belépéshez használt szupergép neve: '''budapest''', '''debrecen''', '''pecs''', '''szeged'''. Nem alapértelmezett kulcs használata a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval lehetséges.&lt;br /&gt;
&lt;br /&gt;
Belépés a szegedi gépre alice felhasználóként, az SSH privát kulcsot a &amp;lt;code&amp;gt;keys/szeged&amp;lt;/code&amp;gt; fájlból olvasva:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
ssh -i keys/szeged alice@login.szeged.hpc.niif.hu&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fájl másolás SCP segítségével ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp USER@login.SITE.hpc.niif.hu:FILE FILE&lt;br /&gt;
scp FILE USER@login.SITE.hpc.niif.hu:FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A szegedi gép HOME könyvtárában lévő &amp;lt;code&amp;gt;stuff.tgz&amp;lt;/code&amp;gt; fájl letöltése a helyi gép aktuális könyvtárába:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
scp bob@login.szeged.hpc.niif.hu:stuff.tgz .&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatátvitel rsync segítségével ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához az SSH-t és az rsync-et együtt kell használni. Fel- és leszinkronizálás:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -a -e ssh DIRECTORY USER@login.budapest.hpc.niif.hu:/home/USER&lt;br /&gt;
rsync -a -e ssh USER@login.budapest.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A budapesti gépre szinkronizálom a helyi &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; könyvtár tartalmát (nem az alapértelmezett kulcsot használva) és a másolás folyamatát nyomonkövetem:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rsync -a -h --progress -e &amp;quot;ssh -i keys/budapest&amp;quot; ./src alice@login.budapest.hpc.niif.hu:/home/alice&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
A szupergépek elsődleges felhasználói felülete a Bash shell. Az automatikusan betöltődő NIIF Common Environment (NCE) a PS1 promptot a következőképp állítja be:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                    |&lt;br /&gt;
    BUDAPEST[login] ~ (0)$&lt;br /&gt;
        |      |       |&lt;br /&gt;
   HPC állomás |       |&lt;br /&gt;
         rövid gép név |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
A szupergépekre telepített alkalmazásokat az ún. modul rendszer segítségével lehet használ. A modul rendszer lehetővé teszi egy adott alkalmazás több verziójának használatát is. Feladata a shell környezeti változók helyes beállítása. Normál felhasználók számára az alapértelmezett modul környezet automatikusan betöltődik. Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module load APPS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;APPS&amp;lt;/code&amp;gt; a betöltendő modulok space-szel elválasztott listája.&lt;br /&gt;
&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
==== Példa ====&lt;br /&gt;
A Maple, netcfd és az R csomagok betöltése:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module load maple netcdf R&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához használjuk a [http://www.techrepublic.com/blog/linux-and-open-source/learn-to-use-extended-file-attributes-in-linux-to-boost-security/](fájlrendszer ACL-eket). Az ACL-ekkel a hagyományos unix engedélyeken felül finoman szabályozhatjuk a fájlok és könyvtárak hozzáférési engedélyeit. &amp;lt;span style=&amp;quot;color:#ce1256&amp;quot;&amp;gt; Kérjük, hogy fokozottan figyeljenek arra, hogy a teljes &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; könyvtárra sose adjanak &amp;quot;rwx&amp;quot; jogot más felhasználóknak, mivel pl. a &amp;lt;code&amp;gt;.ssh&amp;lt;/code&amp;gt; mappa nagyon érzékeny a jogosultságokra, és a rendszer nem fogja beengedni legközelebb a felhasználót!&amp;lt;/span&amp;gt; A következő példában a &amp;lt;code&amp;gt;$HOME/Shared&amp;lt;/code&amp;gt; könyvtárat osztjuk egy munkatárs számára:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# a home könyvtár beállítása&lt;br /&gt;
# user1 user számára belépsi engedély: u:user1:x &lt;br /&gt;
$ setfacl -m u:user1:x $HOME&lt;br /&gt;
$ getfacl $HOME&lt;br /&gt;
# file: user2/user2&lt;br /&gt;
# owner: user2&lt;br /&gt;
# group: user2&lt;br /&gt;
user::rwx&lt;br /&gt;
user:user1:--x&lt;br /&gt;
group::r-x&lt;br /&gt;
mask::r-x&lt;br /&gt;
other::---&lt;br /&gt;
# Shared könyvtár megosztása&lt;br /&gt;
# user1 számára minden unix jog&lt;br /&gt;
$ cd&lt;br /&gt;
$ mkdir Shared&lt;br /&gt;
$ setfacl -m u:user1:rwx $HOME/Shared&lt;br /&gt;
$ getfacl Shared&lt;br /&gt;
# file: Shared&lt;br /&gt;
# owner: user2&lt;br /&gt;
# group: user2&lt;br /&gt;
user::rwx&lt;br /&gt;
user:user1:rwx&lt;br /&gt;
group::rwx&lt;br /&gt;
mask::rwx&lt;br /&gt;
other::r-x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python csomag telepítése a saját home könyvtárunkba ==&lt;br /&gt;
Itt egy példa arra, hogy hogyan tudjuk feltelepíteni a mercurial python csomagot.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load python &lt;br /&gt;
$ pip install --user mercurial&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login és vserver node-jai osztott home könyvtárral vannak összekötve. Fontos, hogy az osztott könyvtárat a számítási node-ok nem érik el, ezért az osztott home-ot csak tárolásra ill. megosztásra lehet használni. Az osztott terület Debrecenben van, ezért ott a leggyorsabb. A másik három helyen lassabb a hozzáférés a nagyobb távolság miatt. A programok kimenetét továbbra is a lokális scratch vagy home könyvtárba kell írni. Amelyik login node-on használni szeretnénk az osztott home könyvtárat, ott adjuk ki a következő parancsokat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd; mkdir shared; ln -s /mnt/fhgfs/home/$USER shared/$USER &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ezek után a &amp;lt;code&amp;gt;$HOME/shared/$USER&amp;lt;/code&amp;gt; könyvtárba másoljuk a megosztott fájlokat. Ez a könyvtár a következő környezeti változóba is exportálódik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$NCE_SHARED &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Biztonsági mentés, adatmegosztás ===&lt;br /&gt;
A következő példa mentést végez a &amp;lt;code&amp;gt;$HOME/data&amp;lt;/code&amp;gt; könyvtárról:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP $HOME/data $NCE_SHARED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Törölje a fájlokat a mentésben is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/data $NCE_SHARED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. A KIFÜ HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
Weboldal:&lt;br /&gt;
&lt;br /&gt;
http://slurm.schedmd.com&lt;br /&gt;
&lt;br /&gt;
A SLURM ütemező bemutatása: &lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/recordings/details/6122,A_slurm_HPC_utemezo Slurm HPC ütemező]&lt;br /&gt;
&lt;br /&gt;
A szupergépeken CPU óra (gépidő) alapú ütemezés működik. Ez azt jelenti, hogy a fogyasztási időtartamra (hónap) az elérhető maximális gépidő fel van osztva a felhasználók között. Minden UNIX felhasználó egy vagy több számlához (''Account'') tartozhat. Az ütemező számla egy adott HPC-s projekthez tartozik, hasonló a UNIX csoporthoz. Szupergépes feladatokat csak az egyes számlák terhére lehet indítani. A CPU óra az elhasznált idő (''Walltime'') és az igényelt processzorok számának szorzata. Például a budapesti gépen 2 db node (48 processzor mag) foglalása 30 percre 48 * 30 = 1440 CPU perc = 24 CPU óra. A CPU órát az ütemező a futás kezdetétől a befejezésig méri.&lt;br /&gt;
&lt;br /&gt;
'''Rendkívül fontos arról meggyőződni, hogy a futtatandó alkalmazás rendesen kihasználja-e a szupergépet. Egy üres vagy rosszul futó job hamar elhasználja a rendelkezésre álló gépidőt. Elfogyasztott gépidő esetén új jobokat már nem lehet indítani, és meg kell várni a számlázási időszak végét. A gépidő limitek (Account Limit) minden hónap elején jóváíródnak.'''&lt;br /&gt;
&lt;br /&gt;
Számláink állapotáról a következő paranccsal kapunk információt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A parancs a következő táblázatot jeleníti meg. A felhasználó két számlához (foobar,barfoo) is hozzáfér, futatthat a számla terhére. Saját magát megcsillagozva látja a listában. Bobbal mindkét számlán (Account oszlop) Alice is osztozik. A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyeik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még alérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
alice                0 |           foobar           0 |             0           0&lt;br /&gt;
bob *                0 |           foobar           0 |             0           0&lt;br /&gt;
&lt;br /&gt;
bob *                7 |           barfoo           7 |         1,000         993&lt;br /&gt;
alice                0 |           barfoo           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
Alice 2 nap 10 órára és 2 node-ra szeretne foglalást kérni, megnézi van-e elég gépidő a számláján:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N 2 -t 2-10:00:00&lt;br /&gt;
&lt;br /&gt;
Estimated CPU hours: 2784&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sajnos ebben a hónapban erre már nem telik.&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csőkkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
Az ütemezőben 3 feladat van. Az első egy arrayjob, éppen erőforrásra vár (PENDING). A második egy MPI job, ami 4 node-on fut már 25 perce (TIME). A harmadik egy egy node-os OMP futtatás, éppen most indult el. A feladatik nevei (NAME) egyénileg adható meg. Rövid, informatív neveket érdemes adni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
squeue -l&lt;br /&gt;
&lt;br /&gt;
Wed Oct 16 08:30:07 2013              &lt;br /&gt;
     JOBID PARTITION     NAME     USER    STATE       TIME TIMELIMIT  NODES NODELIST(REASON)&lt;br /&gt;
591_[1-96]    normal    array    alice  PENDING       0:00     30:00      1 (None)&lt;br /&gt;
       589    normal      mpi      bob  RUNNING      25:55   2:00:00      4 cn[05-08]&lt;br /&gt;
       590    normal      omp    alice  RUNNING       0:25   1:00:00      1 cn09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ennek a 2 node-os batch jobnak a jellemző memóriaterhelés a következő volt: kb. 10GB virtuális és 6.5GB RSS memóriát használt el node-onként.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory 430&lt;br /&gt;
&lt;br /&gt;
 MaxVMSize  MaxVMSizeNode  AveVMSize     MaxRSS MaxRSSNode     AveRSS&lt;br /&gt;
---------- -------------- ---------- ---------- ---------- ----------&lt;br /&gt;
10271792K           cn06  10271792K   6544524K       cn06   6544524K   &lt;br /&gt;
10085152K           cn07  10085152K   6538492K       cn07   6534876K &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CPU felhasználás ellenőrzése ====&lt;br /&gt;
Nagyon fontos meggyőződni arról, hogy az alkalmazás kihasználja-e a rendelkezésre álló gépidőt. Egy futó alkalmazás a következő paranccsal tudunk monitorozni:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sjobcheck JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ez a job 4 node-on fut. A LOAD csoport a gép általános terheléséről ad információt és kb. a core-ok számával egyezik meg. A helyes felhasználásról a CPU csoport ad tájékoztatást. Ideális esetben a &amp;lt;code&amp;gt;User&amp;lt;/code&amp;gt; oszlop értékei 90 fölött vannak. Ez alatt valamilyen probléma lépett fel és a futást érdemes megszakítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hostname                     LOAD                       CPU              Gexec  &lt;br /&gt;
 CPUs (Procs/Total) [     1,     5, 15min] [  User,  Nice, System, Idle, Wio]&lt;br /&gt;
cn08    24 (   25/  529) [ 24.83, 24.84, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn07    24 (   25/  529) [ 24.93, 24.88, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn06    24 (   25/  529) [ 25.00, 24.90, 20.97] [  99.9,   0.0,   0.1,   0.0,   0.0] OFF&lt;br /&gt;
cn05    24 (   25/  544) [ 25.11, 24.96, 20.97] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=niif Start=2014-01-01&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
niif helyett a saját projektünk azonosítóját kell megadni.&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni. Az ütemezők összehasonlításáról és a Slurm-ban elérhető direktívákról a következő [http://slurm.schedmd.com/rosetta.pdf táblázat] ad bővebb tájékoztatást.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sbatch jobscript.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; sor és a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt; sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt;. A teszt partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
A memória a CPU-hoz hasonlóan korlátozott, foglalható erőforrás. A felhasználás mérése a memória / core alapon történik: 1 core óra, 2600 MB órának felel meg. Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. Budapesten és Szegeden a maximális memória/core 2600 MB.&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 24 órára ad fel 96 db soros jobot. A &amp;lt;code&amp;gt;#SBATCH --array=1-96&amp;lt;/code&amp;gt; direktíva jelzi, hogy tömbfeladatról van szó. Az alkalmazást az &amp;lt;code&amp;gt;srun&amp;lt;/code&amp;gt; paranccsal kell indítani. Ebben az esetben ez egy shell szkript.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Soros (serial) jobok ====&lt;br /&gt;
Több soros job futtatását a tömbfeladatokhoz hasonlóan kell indítani.&lt;br /&gt;
&lt;br /&gt;
A következő példában a test sorban 3 egy szálon dutó programot indítunk el. A programok és az inputok lehetnek különbözőek. Fontos, hogy az utolsó parancsot nem kell a háttérben (&amp;amp;) indítani és a wait-tel kell befejezni a job szkriptet.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=serial&lt;br /&gt;
#SBATCH --time=24:30:00&lt;br /&gt;
#SBATCH -n 3&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
srun -n 1 program input1 &amp;amp;&lt;br /&gt;
srun -n 1 program input2 &amp;amp;&lt;br /&gt;
srun -n 1 program input3&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&lt;br /&gt;
Bob felhasználó a barfoo számla terhére 2 node-ot, 12 órára foglal le egy MPI job számára. Az egyes node-okon 24 MPI szálat fog elindítani. A program stdout kimenetét a &amp;lt;code&amp;gt;slurm.out&amp;lt;/code&amp;gt; fájlba irányítja (&amp;lt;code&amp;gt;#SBATCH -o&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SGI ccNUMA UV 1000 (Pécs) ====&lt;br /&gt;
A pécsi gépen legalább 6 szálon működő jobok futtatása lehetságes. Az egyetlen elfogadott paraméter a szálak szám (`-n`), amelynek 6 többszörösének kell lenni. Ezen a gépen nincs teszt sor. Kérjük, hogy 48-nál kevesebb szálon futó programokat az UV-n ne futtassanak! Egy szálú ill. array jobok futtatása nem lehetséges.&lt;br /&gt;
&lt;br /&gt;
===== OMP Példa =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH -n 48&lt;br /&gt;
#SBATCH --time=03:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
/opt/nce/bin/numainfo&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_NTASKS ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SGI MPT MPI Példa =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH -n 48&lt;br /&gt;
#SBATCH --time=03:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
/opt/nce/bin/numainfo&lt;br /&gt;
mpirun $SLURM_NTASKS ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Jobok monitorozása =====&lt;br /&gt;
CPU használat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smonitor -n &amp;lt;JOBID&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Memória használat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smonitor -m &amp;lt;JOBID&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ütemezés sor foglaltsága:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sinfo_uv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SGI MPT MPI feladatok (Debrecen) ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani. Az SGI MPT MPI paraméterezése kicsit más, mint az OpenMPI. '''Debrecen az SGI MPT az alpértelmezett MPI környezet!'''&lt;br /&gt;
&lt;br /&gt;
Bob felhasználó a barfoo számla terhére 2 node-ot, 12 órára foglal le egy MPI job számára. Az egyes node-okon 24 MPI szálat fog elindítani. A program stdout kimenetét a &amp;lt;code&amp;gt;slurm.out&amp;lt;/code&amp;gt; fájlba irányítja (&amp;lt;code&amp;gt;#SBATCH -o&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=12&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
source /opt/nce/bin/machines&lt;br /&gt;
export MPI_OPT=&amp;quot;${MACHINES} -np ${SLURM_NTASKS_PER_NODE}&amp;quot;&lt;br /&gt;
mpirun ${MPI_OPT} ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SGI PerfBoost egyéb MPI feladatokra (Debrecen) ====&lt;br /&gt;
Az SGI MPT lehetőséget ad arra, hogy nem MPT MPI-vel fordított MPI programok is használjunk. Ebben az esetben az MPI hívások MPT hívásokkal cserélődnek ki.&lt;br /&gt;
&lt;br /&gt;
Egy OpenMPI-re fordított program indítása:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=12&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
source /opt/nce/bin/machines&lt;br /&gt;
export MPI_OPT=&amp;quot;${MACHINES} -np ${SLURM_NTASKS_PER_NODE}&amp;quot;&lt;br /&gt;
mpirun ${MPI_OPT} perfboost -ompi ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CPU binding ====&lt;br /&gt;
Az MPI programok teljesítménye általában javítható a processzek CPU magokhoz kötésével. Ilyenkor a párhuzamos program szálait az operációs rendszer nem ütemezi a CPU magok között, ezért javulhat a memória lokalizáció (kevesebb cache miss). A kötés használata ajánlott. Tesztekkel meg kell győződni, hogy egy adott alkalmazás esetén melyik kötési stratégia adja a legjobb eredményt. A következő beállítások az OpenMPI környezetre vontakoznak. A kötésekről részletes információt a &amp;lt;code&amp;gt;--report-bindings&amp;lt;/code&amp;gt; MPI opcióval kaphatunk. Az indítási parancsok melett a részletes binding információ néhány sora is látható. Fontos, hogy az ütemező task binding-ját nem kell használni!&lt;br /&gt;
&lt;br /&gt;
===== Kötés CPU magonként =====&lt;br /&gt;
Ebben az esetben az MPI szálak (rank) sorban töltik fel a CPU magokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Indítási parancs: mpirun --bind-to-core --bycore&lt;br /&gt;
&lt;br /&gt;
[cn05:05493] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 1 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 2 bound to socket 0[core 2]: [. . B . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 3 bound to socket 0[core 3]: [. . . B . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Kötés CPU foglalat szerint =====&lt;br /&gt;
Ebben az esetben az MPI szálak váltakozva töltik fel a CPU-kat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Indítási parancs: mpirun --bind-to-core --bysocket&lt;br /&gt;
&lt;br /&gt;
[cn05:05659] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 1 bound to socket 1[core 0]: [. . . . . . . . . . . .][B . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 3 bound to socket 1[core 1]: [. . . . . . . . . . . .][. B . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Kötés node-ok szerint =====&lt;br /&gt;
Ebben az esetben az MPI szálak váltakozva töltik fel a node-okat. Lagalább 2 node foglalása szükséges.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Indítási parancs: mpirun --bind-to-core --bynode&lt;br /&gt;
&lt;br /&gt;
[cn05:05904] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05904] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 1 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 3 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=10&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 10 CPU core-t rendeltunk, a 10 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 10 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=10&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 24 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 24 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 24 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=24&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid feladatok ====&lt;br /&gt;
Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). A Maple feladat indátását a &amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; paranccsal kell elvégezni.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Matlab feladatok ====&lt;br /&gt;
Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (&amp;lt;code&amp;gt;#SBATCH --licenses=matlabdce:1,matlabdct:1,matlab:1&amp;lt;/code&amp;gt;). Összesen 96 darab &lt;br /&gt;
Distributed Computing Server, 13 darab Distributed Computing Toolbox és 13 Matlab licensz lett megvásárolva.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=&amp;quot;Matlab test job&amp;quot;&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH --licenses=matlabdce:1,matlabdct:1,matlab:1&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
&lt;br /&gt;
matlab -nodisplay &amp;lt; job.m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GPU-k használata ====&lt;br /&gt;
A szegedi szuperszámítógép rendelkezik 2db GPU kártyákkal is felszerelt compute node-dal. A GPU node-okban 2x6db Nvidia Tesla M2070-es kártya található. A GPU-s node-ok külön job sorban található (&amp;lt;code&amp;gt;--partition gpu&amp;lt;/code&amp;gt;). A GPU-k számát a &amp;lt;code&amp;gt;--gres gpu:#&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, 4GPU-n, 6 órára indítja a következő jobot.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=GPU&lt;br /&gt;
#SBATCH --partition gpu&lt;br /&gt;
#SBATCH --gres gpu:4&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
&lt;br /&gt;
$PWD/gpu_burnout 3600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások beállításai ==&lt;br /&gt;
=== Saját programok telepítése ===&lt;br /&gt;
A saját fordítású programokat a HOME könyvtáradba kell telepíteni, ezt általában a fordítás előtti lefuttatott configure szkripttel lehet beállítani. Az adott program a $HOME/local alá fog települni. A PATH és egyéb környezeti változókat értelem szerűen kell beállítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $HOME&lt;br /&gt;
mkdir local&lt;br /&gt;
(belépés az alklamazás könyvtárába)&lt;br /&gt;
./configure --prefix=$HOME/local&lt;br /&gt;
make; make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A frontend gépeken felhasználói limitek vannak beállítva. Ezekről a következő paranccsal kapunk információt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
ulimit -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A limitek a compute node-okon és az UV-n nincsenek beállítva.&lt;br /&gt;
&lt;br /&gt;
=== Java JVM heap méret ===&lt;br /&gt;
A memória limit miatt a Java virtuális gépen és fordító nem jól működik, ezért meg kell adni a maximális heap méretét:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java -Xmx512m -version&lt;br /&gt;
javac -J-Xmx512m -version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
vagy exportálni kell a következő változót:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export _JAVA_OPTIONS=&amp;quot;-Xms1g -Xmx1g&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python Numpy és Scipy használat ===&lt;br /&gt;
A numerikus Python használatához a következő csomagokat kell betölteni:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module load python numpy scipy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A numpy és a scipy csomagok az Intel MKL OpenMP gyorsítását használják. A jobokat az &amp;lt;code&amp;gt;openmp&amp;lt;/code&amp;gt; párhuzamos környezetbe kell elküldeni.&lt;br /&gt;
&lt;br /&gt;
== HP Budapest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fordítás ===&lt;br /&gt;
Elérhető fordítók listája&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Forító&lt;br /&gt;
! Soros&lt;br /&gt;
! Párhuzamos&lt;br /&gt;
|-&lt;br /&gt;
| Intel Fortran&lt;br /&gt;
| ifort&lt;br /&gt;
| mpiif90&lt;br /&gt;
|-&lt;br /&gt;
| Intel C&lt;br /&gt;
| icc&lt;br /&gt;
| mpiicc&lt;br /&gt;
|-&lt;br /&gt;
| GNU Fortran&lt;br /&gt;
| gfotran&lt;br /&gt;
| mpif90&lt;br /&gt;
|-&lt;br /&gt;
| GNU C&lt;br /&gt;
| gcc&lt;br /&gt;
| mpicc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A fordítási paramétereket az NCE környezeti változókból érdemes kiolvasni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NCE_OFLAGS - optimalizációs kapcsolók C és Fortran&lt;br /&gt;
NCE_FFLAGS - Fortran kapcsolók&lt;br /&gt;
NCE_CFLAGS - C kapcsolók&lt;br /&gt;
NCE_LDFLAGS - könyvtárak C és Fortran&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az NCE környezeti változó listáját az &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; paranccsal kérhetjük le.&lt;br /&gt;
&lt;br /&gt;
A budapesti gépen elérhető a PRACE környezet is, amely tartalmaz egy ajánlott kapcsoló és könyvtár összeállítást tartalmaz. A PRACE környezet betöltése:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module load prace&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A PRACE környezet az AMD ACML matematikai könyvtárakat használja, amennyiben az Intel MKL-re van szükségünk, akkor a PRACE környezetet nem kell betölteni. A megfelelő MKL kapcsolókat az [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Intel Link Advisor] szerint kell beállítani, pl.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FFLAGS=-openmp -I$(MKLROOT)/include&lt;br /&gt;
CFLAGS=-openmp -I$(MKLROOT)/include&lt;br /&gt;
LDFLAGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \&lt;br /&gt;
  -Wl,--start-group \&lt;br /&gt;
  $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \&lt;br /&gt;
  $(MKLROOT)/lib/intel64/libmkl_intel_thread.a \&lt;br /&gt;
  $(MKLROOT)/lib/intel64/libmkl_core.a \&lt;br /&gt;
  $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a \&lt;br /&gt;
  -Wl,--end-group -lpthread -lm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Párhuzamos környezet ===&lt;br /&gt;
==== OpenMP ====&lt;br /&gt;
Az OpenMP paraméterket környezeti változókon keresztül kell beállítani. Az &amp;lt;code&amp;gt;openmp&amp;lt;/code&amp;gt; párhuzamos SLURM környezet az OpenMP szálak számát beállítja. Tovább környezeti változókat az [https://computing.llnl.gov/tutorials/openMP/#EnvironmentVariables LLNL OpenMP oldalán] találtok.&lt;br /&gt;
&lt;br /&gt;
==== MPI ====&lt;br /&gt;
Az alapértelmezett MPI könyvtár az Open MPI. Ajánlott optimalizációs kapcsolók (CPU binding):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
--bind-to-core --bycore&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SGI ICE Debrecen ==&lt;br /&gt;
Az alapértelmezett MPI könyvtár az SGI MPT. A felhasználói programokat ehhez a könyvtárhoz érdemes fordítani. Ajánlott fordítás opciók:&lt;br /&gt;
&lt;br /&gt;
=== MPI fordítási opciók ===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    CFLAGS=-O2 -xSSE4.2&lt;br /&gt;
    FFLAGS=-O2 -xSSE4.2&lt;br /&gt;
    LDFLAGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \&lt;br /&gt;
      -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_sequential.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_core.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_blacs_sgimpt_lp64.a -Wl,--end-group \&lt;br /&gt;
      -lpthread -lm&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MPI és OpenMP fordítási opciók ===&lt;br /&gt;
Ebben az esetben az MKL műveletek OpenMP szálasíthatók, a program hibrid MPI és OMP módban is tud üzemelni.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    CFLAGS=-O2 -xSSE4.2 -openmp&lt;br /&gt;
    FFLAGS=-O2 -xSSE4.2 -openmp&lt;br /&gt;
    LDFALGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \&lt;br /&gt;
      -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_intel_thread.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_core.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_blacs_sgimpt_lp64.a -Wl,--end-group \&lt;br /&gt;
      -liomp5 -lpthread -lm -openmp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ARC köztesréteg ==&lt;br /&gt;
Ez a NorduGrid közösség által fejlesztett Grid köztesréteg. Részletes dokumentációkért [http://www.nordugrid.org/documents ezt a weboldalt] érdemes felkeresni.&lt;br /&gt;
&lt;br /&gt;
=== Miért is használjuk?! ===&lt;br /&gt;
* Jobb terhelés elosztást tesz lehetővé a szuperszámítógépek között&lt;br /&gt;
* A jobok azon a gépen fognak elindulni, ami a legmegfelelőbb a számára&lt;br /&gt;
* Egy nagy egységgé kapcsolja össze a szuperszámítógépeket&lt;br /&gt;
* Szabványos webservice interfésszel ([https://www.ogf.org/documents/GFD.108.pdf OGSA-BES], [https://www.ogf.org/documents/GFD.114.pdf HPC Basic Profile]) rendelkezik. Ezáltal könnyen lehet integrálni más rendszerekkel&lt;br /&gt;
* Nagyon sok operációs rendszert támogat&lt;br /&gt;
* A saját számítógépünkről tudjuk kezelni a szuperszámítógépes jobokat&lt;br /&gt;
* A [http://pulse.fgi.csc.fi/gridrer/htdocs/index.phtml futás idejű környezetek használatával] a megfelelő módon lefordított alkalmazást tudjuk használni és nem kell észben tartani, hogy éppen melyik szuperszámítógépen van telepítve a program&lt;br /&gt;
&lt;br /&gt;
=== Grid tanúsítvány igénylése ===&lt;br /&gt;
Első lépésként szükségünk lesz egy '''Grides X.509 tanúsítványra''', amivel az ARC klienseket használni tudjuk. A [https://portal.hpc.niif.hu HPC portálon] keresztül lehetőségünk van igényelni egy 2 hétig érvényes SLCS tanúsítványt. A személyes adatok menüpontra kell kattintani és az oldal végén lesz az igénylő felület. '''Fontos: legalább egy HPC projekt tagsággal rendelkeznünk kell a HPC portálon. ''' Itt található az a letölthető UNIX script is, ami minden szükséges beállítást elvégez a számunkra: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           &lt;br /&gt;
 $ chmod +x slcs_unix_install.sh &lt;br /&gt;
 $ ./slcs_unix_install.sh &lt;br /&gt;
 $HOME/.globus/usercert.pem and $HOME/.globus/userkey.pem installed&lt;br /&gt;
 NIIF HPC SLCS Root CA installed: $HOME/.globus/certificates/SLCSCA.pem&lt;br /&gt;
 Default ARC client configuration created: $HOME/.arc/client.conf&lt;br /&gt;
 NIIF Root CA 2 installed: $HOME/.globus/certificates/NIIFCA.pem&lt;br /&gt;
 $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Az SLCS másik nagy előnye az egyszerűsített igénylésen kívül az, hogy 1 órán belül az összes szuperszámítógépen automatikusan engedélyezve lesz. Viszont ha nem szeretnénk minden második héten új X.509-es tanúsítványt igényelni, akkor lehetőség van arra is, hogy 1 évig érvényes [https://www.igtf.net IGTF] tanúsítványt igényeljünk a KIFÜ-től [http://www.ca.niif.hu/hu/igenyles ezen az oldal keresztül]. Ebben az esetben a [mailto:hpc-support@niif.hu] címre kell elküldenünk az IGTF-es tanúsítványunk publikus részét és meg kell adnunk, hogy melyik témaszámunkhoz legyen majd rendelve a szuperszámítógépeken.&lt;br /&gt;
&lt;br /&gt;
=== ARC kliensek használatba vétele ===&lt;br /&gt;
==== Telepítés ====&lt;br /&gt;
A csomagok telepítéséhez az itt leírt repo-kat lehet használni: http://download.nordugrid.org/repos-15.03.html&lt;br /&gt;
'''Fontos''': 5.0-ás ARC verziót telepítsük.&lt;br /&gt;
&lt;br /&gt;
Debian alapú rendszerek esetén:  &lt;br /&gt;
  apt-get install nordugrid-arc-client  &lt;br /&gt;
&lt;br /&gt;
Redhat alapú rendszerek esetén:  &lt;br /&gt;
  yum install nordugrid-arc-client&lt;br /&gt;
&lt;br /&gt;
OSX csomag telepítése [http://brew.sh brew] segítségével:&lt;br /&gt;
  brew install nordugrid-arc&lt;br /&gt;
&lt;br /&gt;
Ha nem találtunk megfelelő csomagot, akkor [http://download.nordugrid.org/packages/nordugrid-arc/releases/5.0.0/src/nordugrid-arc-5.0.0.tar.gz innen] le tudjuk tölteni a forráskódját és le tudjuk fordítani.&lt;br /&gt;
&lt;br /&gt;
==== Konfigurálás ====&lt;br /&gt;
$HOME/.arc/client.conf:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [common]&lt;br /&gt;
            &lt;br /&gt;
 [computing/budapest] &lt;br /&gt;
 url=https://login.budapest.hpc.niif.hu:60000/arex&lt;br /&gt;
 infointerface=org.nordugrid.wsrfglue2&lt;br /&gt;
 submissioninterface=org.ogf.bes&lt;br /&gt;
 default=yes&lt;br /&gt;
 &lt;br /&gt;
 [computing/szeged]&lt;br /&gt;
 url=https://login.szeged.hpc.niif.hu:60000/arex&lt;br /&gt;
 infointerface=org.nordugrid.wsrfglue2&lt;br /&gt;
 submissioninterface=org.ogf.bes&lt;br /&gt;
 default=yes&lt;br /&gt;
 &lt;br /&gt;
 [computing/debrecen]&lt;br /&gt;
 url=https://login.debrecen.hpc.niif.hu:60000/arex&lt;br /&gt;
 infointerface=org.nordugrid.wsrfglue2&lt;br /&gt;
 submissioninterface=org.ogf.bes&lt;br /&gt;
 default=yes&lt;br /&gt;
 &lt;br /&gt;
 [computing/pecs]&lt;br /&gt;
 url=https://login.pecs.hpc.niif.hu:60000/arex&lt;br /&gt;
 infointerface=org.nordugrid.wsrfglue2&lt;br /&gt;
 submissioninterface=org.ogf.bes&lt;br /&gt;
 default=yes&lt;br /&gt;
  &lt;br /&gt;
 # FastestQueue – ranks targets according to their queue length&lt;br /&gt;
 brokername=FastestQueue&lt;br /&gt;
 &lt;br /&gt;
 # Random – ranks targets randomly&lt;br /&gt;
 #brokername=Random&lt;br /&gt;
 &lt;br /&gt;
 # Data – ranks targets according the amount of megabytes of the requested input files that are already&lt;br /&gt;
 # in the computing resources cache. &lt;br /&gt;
 #brokername=Data&lt;br /&gt;
 &lt;br /&gt;
 # PythonBroker:&amp;lt;module&amp;gt;.&amp;lt;class&amp;gt;[:arguments] – ranks targets using any user-supplied custom&lt;br /&gt;
 # Python broker module, optionally with broker arguments. Such module can reside anywhere in&lt;br /&gt;
 # user’s PYTHONPATH&lt;br /&gt;
 #brokername=PythonBroker&lt;br /&gt;
 &lt;br /&gt;
 [alias]&lt;br /&gt;
 pecs=computing:ARC1:https://login.pecs.hpc.niif.hu:60000/arex&lt;br /&gt;
 szeged=computing:ARC1:https://login.szeged.hpc.niif.hu:60000/arex&lt;br /&gt;
 debrecen=computing:ARC1:https://login.debrecen.hpc.niif.hu:60000/arex&lt;br /&gt;
 budapest=computing:ARC1:https://login.budapest.hpc.niif.hu:60000/arex&lt;br /&gt;
 hp=budapest szeged&lt;br /&gt;
 sgi=pecs debrecen   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Érdemes beállítani, hogy alapértelmezés szerint a FastestQueue brókert használja, ezáltal mindig arra a szuperszámítógépre fogja küldeni a jobokat, ahol a legkevesebb a várakozó jobok száma. A konfigurációs fájl részletes dokumentációját és az ARC kliensek leírásait [http://www.nordugrid.org/documents/arc-ui.pdf itt lehet] megnézni.&lt;br /&gt;
&lt;br /&gt;
=== Grid proxy készítése ===&lt;br /&gt;
&lt;br /&gt;
Ha már telepítettük a tanúsítványunkat és az ARC klienseket akkor a következő lépés az, hogy egy proxy tanúsítványt kell készítenünk, ami alapértelmezés szerint 12 óráig érvényes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ arcproxy &lt;br /&gt;
 Enter pass phrase for private key:&lt;br /&gt;
 Your identity: /C=HU/O=NIIF/OU=SLCS/L=hpcteszt/CN=joe&lt;br /&gt;
 Proxy generation succeeded&lt;br /&gt;
 Your proxy is valid until: 2015-03-30 05:01:09&lt;br /&gt;
 $    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
Tesztelési célból ezeket a parancsokat érdemes kipróbálni:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ arcinfo -c szeged  &lt;br /&gt;
 $ arcinfo -c hp -l&lt;br /&gt;
 $ arcinfo&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Grid job készítése ===&lt;br /&gt;
A jobok leírására több formátumot is használhatunk: [https://www.ogf.org/documents/GFD.56.pdf JSDL], vagy [http://www.nordugrid.org/documents/xrsl.pdf xRSL]. Így adjuk meg, hogy a jobunknak mire van szüksége. Itt egy példa job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
 $ cat job.xrsl &lt;br /&gt;
 &amp;amp;&lt;br /&gt;
 (executable=&amp;quot;matlab.sh&amp;quot;)&lt;br /&gt;
 (arguments=&amp;quot;matlab.m&amp;quot;)&lt;br /&gt;
 (stdout=&amp;quot;stdout.txt&amp;quot;)&lt;br /&gt;
 (stderr=&amp;quot;stderr.txt&amp;quot;)&lt;br /&gt;
 (jobname=&amp;quot;Matlab test&amp;quot;)&lt;br /&gt;
 (inputFiles=&lt;br /&gt;
 (&amp;quot;matlab.m&amp;quot; &amp;quot;&amp;quot;)&lt;br /&gt;
 )&lt;br /&gt;
 (memory&amp;gt;=&amp;quot;1000&amp;quot;)&lt;br /&gt;
 (gmlog=&amp;quot;gm.log&amp;quot;)&lt;br /&gt;
 (wallTime=&amp;quot;240&amp;quot;)&lt;br /&gt;
 (runTimeEnvironment=&amp;quot;APPS/MATH/MATLAB-7.13&amp;quot;)  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ cat matlab.sh &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;Compute node: &amp;quot; `/bin/hostname -f`&lt;br /&gt;
 echo&lt;br /&gt;
 matlab -nodisplay &amp;lt; $1&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ cat matlab.m&lt;br /&gt;
 2+3&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ennél a példánál a '''APPS/MATH/MATLAB-7.13''' futásidejű környezetet kértük, ezáltal ez a job csak azon a szuperszámítógépen fog elindulni, ahol ez telepítve van. Továbbá azt kértük még, hogy 240 percig futhasson és legalább 1000 MByte memória rendelkezésre álljon.&lt;br /&gt;
&lt;br /&gt;
Az '''arcinfo -l''' paranccsal tudjuk megnézni, hogy a szuperszámítógépeken milyen futás idejű környezetek (runtime environment-ek) vannak telepítve. Ha szeretnénk egy új környezet beállíttatni, akkor [mailto:hpc-support@niif.hu ide] kell levelet küldeni.&lt;br /&gt;
&lt;br /&gt;
==== OpenMP példa ====&lt;br /&gt;
&lt;br /&gt;
Job elkészítése:&lt;br /&gt;
&amp;lt;code&amp;gt;        &lt;br /&gt;
 $ cat job-openmp.xrsl &lt;br /&gt;
 &amp;amp;&lt;br /&gt;
 (executable=&amp;quot;omp_mm&amp;quot;)&lt;br /&gt;
 (stdout=&amp;quot;stdout.txt&amp;quot;)&lt;br /&gt;
 (stderr=&amp;quot;stderr.txt&amp;quot;)&lt;br /&gt;
 (jobname=&amp;quot;OpenMP test&amp;quot;)&lt;br /&gt;
 (queue=&amp;quot;test&amp;quot;)&lt;br /&gt;
 (executables=&amp;quot;omp_mm&amp;quot;)&lt;br /&gt;
 (count=&amp;quot;10&amp;quot;)&lt;br /&gt;
 (countpernode=&amp;quot;10&amp;quot;)&lt;br /&gt;
 (environment=(&amp;quot;OMP_NUM_THREADS&amp;quot; &amp;quot;10&amp;quot;))&lt;br /&gt;
 (queue=&amp;quot;test&amp;quot;)&lt;br /&gt;
 (inputFiles=&lt;br /&gt;
    (&amp;quot;omp_mm&amp;quot; &amp;quot;&amp;quot;)&lt;br /&gt;
 )&lt;br /&gt;
 (memory&amp;gt;=&amp;quot;2600&amp;quot;)&lt;br /&gt;
 (gmlog=&amp;quot;gm.log&amp;quot;)&lt;br /&gt;
 (wallTime=&amp;quot;20&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Job elküldése:&lt;br /&gt;
&lt;br /&gt;
 $ arcsub job-openmp.xrsl&lt;br /&gt;
 Job submitted with jobid: https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
&lt;br /&gt;
Job állapotának a lekérdezése:&lt;br /&gt;
&lt;br /&gt;
 $ arcstat https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
 Job: https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
  Name: OpenMP test&lt;br /&gt;
  State: Finished&lt;br /&gt;
  Exit Code: 0&lt;br /&gt;
 &lt;br /&gt;
 Status of 1 jobs was queried, 1 jobs returned information&lt;br /&gt;
&lt;br /&gt;
Job letöltése:&lt;br /&gt;
&lt;br /&gt;
 $ arcget https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
 Results stored at: cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
 Jobs processed: 1, successfully retrieved: 1, successfully cleaned: 1&lt;br /&gt;
 zion:~ joe $ cd cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
 zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $ ls -l&lt;br /&gt;
 total 16&lt;br /&gt;
 drwx------  12 joe  staff   408 Mar 29 21:24 gm.log&lt;br /&gt;
 -rw-------   1 joe  staff     0 Mar 29 21:24 stderr.txt&lt;br /&gt;
 -rw-------   1 joe  staff  6362 Mar 29 21:24 stdout.txt&lt;br /&gt;
 zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $&lt;br /&gt;
&lt;br /&gt;
Adatok ellenőrzése:&lt;br /&gt;
&lt;br /&gt;
 zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $ head stdout.txt &lt;br /&gt;
 Starting matrix multiple example with 10 threads&lt;br /&gt;
 Initializing matrices...&lt;br /&gt;
 Thread 0 starting matrix multiply...&lt;br /&gt;
 Thread=0 did row=0&lt;br /&gt;
 Thread 9 starting matrix multiply...&lt;br /&gt;
 Thread 6 starting matrix multiply...&lt;br /&gt;
 Thread=0 did row=1&lt;br /&gt;
 Thread 5 starting matrix multiply...&lt;br /&gt;
 Thread=5 did row=50&lt;br /&gt;
 Thread=5 did row=51&lt;br /&gt;
 zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe$           &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MPI példa ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ cat job-mpi.xrsl &lt;br /&gt;
 &amp;amp;&lt;br /&gt;
 (executable=&amp;quot;mpi.sh&amp;quot;)&lt;br /&gt;
 (stdout=&amp;quot;stdout.txt&amp;quot;)&lt;br /&gt;
 (stderr=&amp;quot;stderr.txt&amp;quot;)&lt;br /&gt;
 (jobname=&amp;quot;MPI test&amp;quot;)&lt;br /&gt;
 (executables=&amp;quot;connectivity&amp;quot; &amp;quot;mpi.sh&amp;quot;)&lt;br /&gt;
 (count=&amp;quot;10&amp;quot;)&lt;br /&gt;
 (inputFiles=&lt;br /&gt;
     (&amp;quot;connectivity&amp;quot; &amp;quot;&amp;quot;)&lt;br /&gt;
     (&amp;quot;mpi.sh&amp;quot; &amp;quot;&amp;quot;)&lt;br /&gt;
 )&lt;br /&gt;
 (memory&amp;gt;=&amp;quot;2600&amp;quot;)&lt;br /&gt;
 (gmlog=&amp;quot;gm.log&amp;quot;)&lt;br /&gt;
 (wallTime=&amp;quot;20&amp;quot;)&lt;br /&gt;
 (runTimeEnvironment&amp;gt;=ENV/GCC/MPI/OPENMPI-1.4.3)  &lt;br /&gt;
&lt;br /&gt;
 $ cat mpi.sh &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 mpirun -np 10 ./connectivity -v   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Grafikus felületű ARC kliens ====&lt;br /&gt;
Parancssoros klienseken kívül használni lehet még grafikus klienseket is. [http://sourceforge.net/projects/arc-gui-clients/?source=directory Innen tudják] letölteni őket.&lt;br /&gt;
&lt;br /&gt;
[[Category: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=NIIF_szupersz%C3%A1m%C3%ADt%C3%B3g%C3%A9pek_haszn%C3%A1lata&amp;diff=4500</id>
		<title>NIIF szuperszámítógépek használata</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=NIIF_szupersz%C3%A1m%C3%ADt%C3%B3g%C3%A9pek_haszn%C3%A1lata&amp;diff=4500"/>
				<updated>2019-10-29T13:57:10Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Köszönetnyilvánítás */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A szuperszámítógépekről ==&lt;br /&gt;
A KIFÜ szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* KIFÜ központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: egy helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket a KIFÜ nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert a KIFÜ üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll a KIFÜ-vel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, a KIFÜ adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
=== Köszönetnyilvánítás ===&lt;br /&gt;
Tudományos publikációkban a következő köszönetnyilvánítást javasoljuk:&lt;br /&gt;
&lt;br /&gt;
'''We acknowledge [KIFÜ] for awarding us access to resource based in Hungary at [Budapest/Debrecen/Pécs/Szeged].'''&lt;br /&gt;
&lt;br /&gt;
Where technical support has been received the following additional text should also be used:&lt;br /&gt;
&lt;br /&gt;
'''The support of [name of person/people] from KIFÜ, Hungary to the technical work is gratefully acknowledged.'''&lt;br /&gt;
&lt;br /&gt;
== Hozzáférés a szuperszámítógépekhez ==&lt;br /&gt;
&lt;br /&gt;
A témában több videót is készítettünk, amelyek bemutatják a hozzáférés menetét (kulcsgenerálás és hozzáférés) és a filefeltöltés gyakorlati tutoriál keretében Windows operációs rendszeren.&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/recordings/details/12290,Hozza_fe_re_s_a_HPC-hez_kezdo_le_pe_sek_elo_ada_s_e_s_demo_ Kezdő lépések (videó)]&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/recordings/details/12307,A_HPC_felhaszna_la_s_gyakorlati_le_pe_sei_demo_.mp4 A HPC felhasználás gyakorlati lépései (videó)]&lt;br /&gt;
&lt;br /&gt;
A fenti videók tartalmazhatnak elavult információkat pl. az ütemezővel kapcsolatban, a jelenlegi ütemező használatához külön videóanyagot ajánljunk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A szuperszámítógépekhez kulcsos SSH használatával lehet hozzáférni. Ajánlott UTF-8 képes terminált használ az ékezetes betűk megjeelenítése érdekében. PUTTY terminál esetén a ''Window/Translation'' beállítás alatt a character set-et kell UTF-8-ra állítani.&lt;br /&gt;
&lt;br /&gt;
=== SSH belépés ===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
ssh USER@login.SITE.hpc.niif.hu&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; a felhasználónév, a &amp;lt;code&amp;gt;SITE&amp;lt;/code&amp;gt; pedig a belépéshez használt szupergép neve: '''budapest''', '''debrecen''', '''pecs''', '''szeged'''. Nem alapértelmezett kulcs használata a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval lehetséges.&lt;br /&gt;
&lt;br /&gt;
Belépés a szegedi gépre alice felhasználóként, az SSH privát kulcsot a &amp;lt;code&amp;gt;keys/szeged&amp;lt;/code&amp;gt; fájlból olvasva:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
ssh -i keys/szeged alice@login.szeged.hpc.niif.hu&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fájl másolás SCP segítségével ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp USER@login.SITE.hpc.niif.hu:FILE FILE&lt;br /&gt;
scp FILE USER@login.SITE.hpc.niif.hu:FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A szegedi gép HOME könyvtárában lévő &amp;lt;code&amp;gt;stuff.tgz&amp;lt;/code&amp;gt; fájl letöltése a helyi gép aktuális könyvtárába:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
scp bob@login.szeged.hpc.niif.hu:stuff.tgz .&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatátvitel rsync segítségével ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához az SSH-t és az rsync-et együtt kell használni. Fel- és leszinkronizálás:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -a -e ssh DIRECTORY USER@login.budapest.hpc.niif.hu:/home/USER&lt;br /&gt;
rsync -a -e ssh USER@login.budapest.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A budapesti gépre szinkronizálom a helyi &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; könyvtár tartalmát (nem az alapértelmezett kulcsot használva) és a másolás folyamatát nyomonkövetem:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
rsync -a -h --progress -e &amp;quot;ssh -i keys/budapest&amp;quot; ./src alice@login.budapest.hpc.niif.hu:/home/alice&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
A szupergépek elsődleges felhasználói felülete a Bash shell. Az automatikusan betöltődő NIIF Common Environment (NCE) a PS1 promptot a következőképp állítja be:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                    |&lt;br /&gt;
    BUDAPEST[login] ~ (0)$&lt;br /&gt;
        |      |       |&lt;br /&gt;
   HPC állomás |       |&lt;br /&gt;
         rövid gép név |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
A szupergépekre telepített alkalmazásokat az ún. modul rendszer segítségével lehet használ. A modul rendszer lehetővé teszi egy adott alkalmazás több verziójának használatát is. Feladata a shell környezeti változók helyes beállítása. Normál felhasználók számára az alapértelmezett modul környezet automatikusan betöltődik. Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module load APPS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;APPS&amp;lt;/code&amp;gt; a betöltendő modulok space-szel elválasztott listája.&lt;br /&gt;
&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
==== Példa ====&lt;br /&gt;
A Maple, netcfd és az R csomagok betöltése:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module load maple netcdf R&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához használjuk a [http://www.techrepublic.com/blog/linux-and-open-source/learn-to-use-extended-file-attributes-in-linux-to-boost-security/](fájlrendszer ACL-eket). Az ACL-ekkel a hagyományos unix engedélyeken felül finoman szabályozhatjuk a fájlok és könyvtárak hozzáférési engedélyeit. &amp;lt;span style=&amp;quot;color:#ce1256&amp;quot;&amp;gt; Kérjük, hogy fokozottan figyeljenek arra, hogy a teljes &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt; könyvtárra sose adjanak &amp;quot;rwx&amp;quot; jogot más felhasználóknak, mivel pl. a &amp;lt;code&amp;gt;.ssh&amp;lt;/code&amp;gt; mappa nagyon érzékeny a jogosultságokra, és a rendszer nem fogja beengedni legközelebb a felhasználót!&amp;lt;/span&amp;gt; A következő példában a &amp;lt;code&amp;gt;$HOME/Shared&amp;lt;/code&amp;gt; könyvtárat osztjuk egy munkatárs számára:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# a home könyvtár beállítása&lt;br /&gt;
# user1 user számára belépsi engedély: u:user1:x &lt;br /&gt;
$ setfacl -m u:user1:x $HOME&lt;br /&gt;
$ getfacl $HOME&lt;br /&gt;
# file: user2/user2&lt;br /&gt;
# owner: user2&lt;br /&gt;
# group: user2&lt;br /&gt;
user::rwx&lt;br /&gt;
user:user1:--x&lt;br /&gt;
group::r-x&lt;br /&gt;
mask::r-x&lt;br /&gt;
other::---&lt;br /&gt;
# Shared könyvtár megosztása&lt;br /&gt;
# user1 számára minden unix jog&lt;br /&gt;
$ cd&lt;br /&gt;
$ mkdir Shared&lt;br /&gt;
$ setfacl -m u:user1:rwx $HOME/Shared&lt;br /&gt;
$ getfacl Shared&lt;br /&gt;
# file: Shared&lt;br /&gt;
# owner: user2&lt;br /&gt;
# group: user2&lt;br /&gt;
user::rwx&lt;br /&gt;
user:user1:rwx&lt;br /&gt;
group::rwx&lt;br /&gt;
mask::rwx&lt;br /&gt;
other::r-x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python csomag telepítése a saját home könyvtárunkba ==&lt;br /&gt;
Itt egy példa arra, hogy hogyan tudjuk feltelepíteni a mercurial python csomagot.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ module load python &lt;br /&gt;
$ pip install --user mercurial&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login és vserver node-jai osztott home könyvtárral vannak összekötve. Fontos, hogy az osztott könyvtárat a számítási node-ok nem érik el, ezért az osztott home-ot csak tárolásra ill. megosztásra lehet használni. Az osztott terület Debrecenben van, ezért ott a leggyorsabb. A másik három helyen lassabb a hozzáférés a nagyobb távolság miatt. A programok kimenetét továbbra is a lokális scratch vagy home könyvtárba kell írni. Amelyik login node-on használni szeretnénk az osztott home könyvtárat, ott adjuk ki a következő parancsokat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd; mkdir shared; ln -s /mnt/fhgfs/home/$USER shared/$USER &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ezek után a &amp;lt;code&amp;gt;$HOME/shared/$USER&amp;lt;/code&amp;gt; könyvtárba másoljuk a megosztott fájlokat. Ez a könyvtár a következő környezeti változóba is exportálódik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$NCE_SHARED &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Biztonsági mentés, adatmegosztás ===&lt;br /&gt;
A következő példa mentést végez a &amp;lt;code&amp;gt;$HOME/data&amp;lt;/code&amp;gt; könyvtárról:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP $HOME/data $NCE_SHARED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Törölje a fájlokat a mentésben is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/data $NCE_SHARED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. A KIFÜ HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
Weboldal:&lt;br /&gt;
&lt;br /&gt;
http://slurm.schedmd.com&lt;br /&gt;
&lt;br /&gt;
A SLURM ütemező bemutatása: &lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/recordings/details/6122,A_slurm_HPC_utemezo Slurm HPC ütemező]&lt;br /&gt;
&lt;br /&gt;
A szupergépeken CPU óra (gépidő) alapú ütemezés működik. Ez azt jelenti, hogy a fogyasztási időtartamra (hónap) az elérhető maximális gépidő fel van osztva a felhasználók között. Minden UNIX felhasználó egy vagy több számlához (''Account'') tartozhat. Az ütemező számla egy adott HPC-s projekthez tartozik, hasonló a UNIX csoporthoz. Szupergépes feladatokat csak az egyes számlák terhére lehet indítani. A CPU óra az elhasznált idő (''Walltime'') és az igényelt processzorok számának szorzata. Például a budapesti gépen 2 db node (48 processzor mag) foglalása 30 percre 48 * 30 = 1440 CPU perc = 24 CPU óra. A CPU órát az ütemező a futás kezdetétől a befejezésig méri.&lt;br /&gt;
&lt;br /&gt;
'''Rendkívül fontos arról meggyőződni, hogy a futtatandó alkalmazás rendesen kihasználja-e a szupergépet. Egy üres vagy rosszul futó job hamar elhasználja a rendelkezésre álló gépidőt. Elfogyasztott gépidő esetén új jobokat már nem lehet indítani, és meg kell várni a számlázási időszak végét. A gépidő limitek (Account Limit) minden hónap elején jóváíródnak.'''&lt;br /&gt;
&lt;br /&gt;
Számláink állapotáról a következő paranccsal kapunk információt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A parancs a következő táblázatot jeleníti meg. A felhasználó két számlához (foobar,barfoo) is hozzáfér, futatthat a számla terhére. Saját magát megcsillagozva látja a listában. Bobbal mindkét számlán (Account oszlop) Alice is osztozik. A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyeik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még alérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
alice                0 |           foobar           0 |             0           0&lt;br /&gt;
bob *                0 |           foobar           0 |             0           0&lt;br /&gt;
&lt;br /&gt;
bob *                7 |           barfoo           7 |         1,000         993&lt;br /&gt;
alice                0 |           barfoo           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
Alice 2 nap 10 órára és 2 node-ra szeretne foglalást kérni, megnézi van-e elég gépidő a számláján:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N 2 -t 2-10:00:00&lt;br /&gt;
&lt;br /&gt;
Estimated CPU hours: 2784&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sajnos ebben a hónapban erre már nem telik.&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csőkkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
Az ütemezőben 3 feladat van. Az első egy arrayjob, éppen erőforrásra vár (PENDING). A második egy MPI job, ami 4 node-on fut már 25 perce (TIME). A harmadik egy egy node-os OMP futtatás, éppen most indult el. A feladatik nevei (NAME) egyénileg adható meg. Rövid, informatív neveket érdemes adni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
squeue -l&lt;br /&gt;
&lt;br /&gt;
Wed Oct 16 08:30:07 2013              &lt;br /&gt;
     JOBID PARTITION     NAME     USER    STATE       TIME TIMELIMIT  NODES NODELIST(REASON)&lt;br /&gt;
591_[1-96]    normal    array    alice  PENDING       0:00     30:00      1 (None)&lt;br /&gt;
       589    normal      mpi      bob  RUNNING      25:55   2:00:00      4 cn[05-08]&lt;br /&gt;
       590    normal      omp    alice  RUNNING       0:25   1:00:00      1 cn09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ennek a 2 node-os batch jobnak a jellemző memóriaterhelés a következő volt: kb. 10GB virtuális és 6.5GB RSS memóriát használt el node-onként.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory 430&lt;br /&gt;
&lt;br /&gt;
 MaxVMSize  MaxVMSizeNode  AveVMSize     MaxRSS MaxRSSNode     AveRSS&lt;br /&gt;
---------- -------------- ---------- ---------- ---------- ----------&lt;br /&gt;
10271792K           cn06  10271792K   6544524K       cn06   6544524K   &lt;br /&gt;
10085152K           cn07  10085152K   6538492K       cn07   6534876K &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CPU felhasználás ellenőrzése ====&lt;br /&gt;
Nagyon fontos meggyőződni arról, hogy az alkalmazás kihasználja-e a rendelkezésre álló gépidőt. Egy futó alkalmazás a következő paranccsal tudunk monitorozni:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sjobcheck JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ez a job 4 node-on fut. A LOAD csoport a gép általános terheléséről ad információt és kb. a core-ok számával egyezik meg. A helyes felhasználásról a CPU csoport ad tájékoztatást. Ideális esetben a &amp;lt;code&amp;gt;User&amp;lt;/code&amp;gt; oszlop értékei 90 fölött vannak. Ez alatt valamilyen probléma lépett fel és a futást érdemes megszakítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hostname                     LOAD                       CPU              Gexec  &lt;br /&gt;
 CPUs (Procs/Total) [     1,     5, 15min] [  User,  Nice, System, Idle, Wio]&lt;br /&gt;
cn08    24 (   25/  529) [ 24.83, 24.84, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn07    24 (   25/  529) [ 24.93, 24.88, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn06    24 (   25/  529) [ 25.00, 24.90, 20.97] [  99.9,   0.0,   0.1,   0.0,   0.0] OFF&lt;br /&gt;
cn05    24 (   25/  544) [ 25.11, 24.96, 20.97] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=niif Start=2014-01-01&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
niif helyett a saját projektünk azonosítóját kell megadni.&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni. Az ütemezők összehasonlításáról és a Slurm-ban elérhető direktívákról a következő [http://slurm.schedmd.com/rosetta.pdf táblázat] ad bővebb tájékoztatást.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sbatch jobscript.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; sor és a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt; sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt;. A teszt partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
A memória a CPU-hoz hasonlóan korlátozott, foglalható erőforrás. A felhasználás mérése a memória / core alapon történik: 1 core óra, 2600 MB órának felel meg. Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. Budapesten és Szegeden a maximális memória/core 2600 MB.&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 24 órára ad fel 96 db soros jobot. A &amp;lt;code&amp;gt;#SBATCH --array=1-96&amp;lt;/code&amp;gt; direktíva jelzi, hogy tömbfeladatról van szó. Az alkalmazást az &amp;lt;code&amp;gt;srun&amp;lt;/code&amp;gt; paranccsal kell indítani. Ebben az esetben ez egy shell szkript.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Soros (serial) jobok ====&lt;br /&gt;
Több soros job futtatását a tömbfeladatokhoz hasonlóan kell indítani.&lt;br /&gt;
&lt;br /&gt;
A következő példában a test sorban 3 egy szálon dutó programot indítunk el. A programok és az inputok lehetnek különbözőek. Fontos, hogy az utolsó parancsot nem kell a háttérben (&amp;amp;) indítani és a wait-tel kell befejezni a job szkriptet.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH --job-name=serial&lt;br /&gt;
#SBATCH --time=24:30:00&lt;br /&gt;
#SBATCH -n 3&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
srun -n 1 program input1 &amp;amp;&lt;br /&gt;
srun -n 1 program input2 &amp;amp;&lt;br /&gt;
srun -n 1 program input3&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&lt;br /&gt;
Bob felhasználó a barfoo számla terhére 2 node-ot, 12 órára foglal le egy MPI job számára. Az egyes node-okon 24 MPI szálat fog elindítani. A program stdout kimenetét a &amp;lt;code&amp;gt;slurm.out&amp;lt;/code&amp;gt; fájlba irányítja (&amp;lt;code&amp;gt;#SBATCH -o&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SGI ccNUMA UV 1000 (Pécs) ====&lt;br /&gt;
A pécsi gépen legalább 6 szálon működő jobok futtatása lehetságes. Az egyetlen elfogadott paraméter a szálak szám (`-n`), amelynek 6 többszörösének kell lenni. Ezen a gépen nincs teszt sor. Kérjük, hogy 48-nál kevesebb szálon futó programokat az UV-n ne futtassanak! Egy szálú ill. array jobok futtatása nem lehetséges.&lt;br /&gt;
&lt;br /&gt;
===== OMP Példa =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH -n 48&lt;br /&gt;
#SBATCH --time=03:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
/opt/nce/bin/numainfo&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_NTASKS ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== SGI MPT MPI Példa =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH -n 48&lt;br /&gt;
#SBATCH --time=03:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
/opt/nce/bin/numainfo&lt;br /&gt;
mpirun $SLURM_NTASKS ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Jobok monitorozása =====&lt;br /&gt;
CPU használat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smonitor -n &amp;lt;JOBID&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Memória használat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smonitor -m &amp;lt;JOBID&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ütemezés sor foglaltsága:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sinfo_uv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SGI MPT MPI feladatok (Debrecen) ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani. Az SGI MPT MPI paraméterezése kicsit más, mint az OpenMPI. '''Debrecen az SGI MPT az alpértelmezett MPI környezet!'''&lt;br /&gt;
&lt;br /&gt;
Bob felhasználó a barfoo számla terhére 2 node-ot, 12 órára foglal le egy MPI job számára. Az egyes node-okon 24 MPI szálat fog elindítani. A program stdout kimenetét a &amp;lt;code&amp;gt;slurm.out&amp;lt;/code&amp;gt; fájlba irányítja (&amp;lt;code&amp;gt;#SBATCH -o&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=12&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
source /opt/nce/bin/machines&lt;br /&gt;
export MPI_OPT=&amp;quot;${MACHINES} -np ${SLURM_NTASKS_PER_NODE}&amp;quot;&lt;br /&gt;
mpirun ${MPI_OPT} ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SGI PerfBoost egyéb MPI feladatokra (Debrecen) ====&lt;br /&gt;
Az SGI MPT lehetőséget ad arra, hogy nem MPT MPI-vel fordított MPI programok is használjunk. Ebben az esetben az MPI hívások MPT hívásokkal cserélődnek ki.&lt;br /&gt;
&lt;br /&gt;
Egy OpenMPI-re fordított program indítása:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=12&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
source /opt/nce/bin/machines&lt;br /&gt;
export MPI_OPT=&amp;quot;${MACHINES} -np ${SLURM_NTASKS_PER_NODE}&amp;quot;&lt;br /&gt;
mpirun ${MPI_OPT} perfboost -ompi ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CPU binding ====&lt;br /&gt;
Az MPI programok teljesítménye általában javítható a processzek CPU magokhoz kötésével. Ilyenkor a párhuzamos program szálait az operációs rendszer nem ütemezi a CPU magok között, ezért javulhat a memória lokalizáció (kevesebb cache miss). A kötés használata ajánlott. Tesztekkel meg kell győződni, hogy egy adott alkalmazás esetén melyik kötési stratégia adja a legjobb eredményt. A következő beállítások az OpenMPI környezetre vontakoznak. A kötésekről részletes információt a &amp;lt;code&amp;gt;--report-bindings&amp;lt;/code&amp;gt; MPI opcióval kaphatunk. Az indítási parancsok melett a részletes binding információ néhány sora is látható. Fontos, hogy az ütemező task binding-ját nem kell használni!&lt;br /&gt;
&lt;br /&gt;
===== Kötés CPU magonként =====&lt;br /&gt;
Ebben az esetben az MPI szálak (rank) sorban töltik fel a CPU magokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Indítási parancs: mpirun --bind-to-core --bycore&lt;br /&gt;
&lt;br /&gt;
[cn05:05493] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 1 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 2 bound to socket 0[core 2]: [. . B . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 3 bound to socket 0[core 3]: [. . . B . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Kötés CPU foglalat szerint =====&lt;br /&gt;
Ebben az esetben az MPI szálak váltakozva töltik fel a CPU-kat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Indítási parancs: mpirun --bind-to-core --bysocket&lt;br /&gt;
&lt;br /&gt;
[cn05:05659] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 1 bound to socket 1[core 0]: [. . . . . . . . . . . .][B . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 3 bound to socket 1[core 1]: [. . . . . . . . . . . .][. B . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Kötés node-ok szerint =====&lt;br /&gt;
Ebben az esetben az MPI szálak váltakozva töltik fel a node-okat. Lagalább 2 node foglalása szükséges.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Indítási parancs: mpirun --bind-to-core --bynode&lt;br /&gt;
&lt;br /&gt;
[cn05:05904] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05904] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 1 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 3 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=10&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 10 CPU core-t rendeltunk, a 10 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 10 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=10&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 24 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 24 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 24 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=24&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid feladatok ====&lt;br /&gt;
Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). A Maple feladat indátását a &amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; paranccsal kell elvégezni.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Matlab feladatok ====&lt;br /&gt;
Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (&amp;lt;code&amp;gt;#SBATCH --licenses=matlabdce:1,matlabdct:1,matlab:1&amp;lt;/code&amp;gt;). Összesen 96 darab &lt;br /&gt;
Distributed Computing Server, 13 darab Distributed Computing Toolbox és 13 Matlab licensz lett megvásárolva.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=&amp;quot;Matlab test job&amp;quot;&lt;br /&gt;
#SBATCH -n 1&lt;br /&gt;
#SBATCH --licenses=matlabdce:1,matlabdct:1,matlab:1&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
&lt;br /&gt;
matlab -nodisplay &amp;lt; job.m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GPU-k használata ====&lt;br /&gt;
A szegedi szuperszámítógép rendelkezik 2db GPU kártyákkal is felszerelt compute node-dal. A GPU node-okban 2x6db Nvidia Tesla M2070-es kártya található. A GPU-s node-ok külön job sorban található (&amp;lt;code&amp;gt;--partition gpu&amp;lt;/code&amp;gt;). A GPU-k számát a &amp;lt;code&amp;gt;--gres gpu:#&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, 4GPU-n, 6 órára indítja a következő jobot.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=GPU&lt;br /&gt;
#SBATCH --partition gpu&lt;br /&gt;
#SBATCH --gres gpu:4&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
&lt;br /&gt;
$PWD/gpu_burnout 3600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások beállításai ==&lt;br /&gt;
=== Saját programok telepítése ===&lt;br /&gt;
A saját fordítású programokat a HOME könyvtáradba kell telepíteni, ezt általában a fordítás előtti lefuttatott configure szkripttel lehet beállítani. Az adott program a $HOME/local alá fog települni. A PATH és egyéb környezeti változókat értelem szerűen kell beállítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $HOME&lt;br /&gt;
mkdir local&lt;br /&gt;
(belépés az alklamazás könyvtárába)&lt;br /&gt;
./configure --prefix=$HOME/local&lt;br /&gt;
make; make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A frontend gépeken felhasználói limitek vannak beállítva. Ezekről a következő paranccsal kapunk információt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
ulimit -a&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A limitek a compute node-okon és az UV-n nincsenek beállítva.&lt;br /&gt;
&lt;br /&gt;
=== Java JVM heap méret ===&lt;br /&gt;
A memória limit miatt a Java virtuális gépen és fordító nem jól működik, ezért meg kell adni a maximális heap méretét:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java -Xmx512m -version&lt;br /&gt;
javac -J-Xmx512m -version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
vagy exportálni kell a következő változót:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export _JAVA_OPTIONS=&amp;quot;-Xms1g -Xmx1g&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python Numpy és Scipy használat ===&lt;br /&gt;
A numerikus Python használatához a következő csomagokat kell betölteni:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module load python numpy scipy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A numpy és a scipy csomagok az Intel MKL OpenMP gyorsítását használják. A jobokat az &amp;lt;code&amp;gt;openmp&amp;lt;/code&amp;gt; párhuzamos környezetbe kell elküldeni.&lt;br /&gt;
&lt;br /&gt;
== HP Budapest ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fordítás ===&lt;br /&gt;
Elérhető fordítók listája&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Forító&lt;br /&gt;
! Soros&lt;br /&gt;
! Párhuzamos&lt;br /&gt;
|-&lt;br /&gt;
| Intel Fortran&lt;br /&gt;
| ifort&lt;br /&gt;
| mpiif90&lt;br /&gt;
|-&lt;br /&gt;
| Intel C&lt;br /&gt;
| icc&lt;br /&gt;
| mpiicc&lt;br /&gt;
|-&lt;br /&gt;
| GNU Fortran&lt;br /&gt;
| gfotran&lt;br /&gt;
| mpif90&lt;br /&gt;
|-&lt;br /&gt;
| GNU C&lt;br /&gt;
| gcc&lt;br /&gt;
| mpicc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A fordítási paramétereket az NCE környezeti változókból érdemes kiolvasni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NCE_OFLAGS - optimalizációs kapcsolók C és Fortran&lt;br /&gt;
NCE_FFLAGS - Fortran kapcsolók&lt;br /&gt;
NCE_CFLAGS - C kapcsolók&lt;br /&gt;
NCE_LDFLAGS - könyvtárak C és Fortran&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az NCE környezeti változó listáját az &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; paranccsal kérhetjük le.&lt;br /&gt;
&lt;br /&gt;
A budapesti gépen elérhető a PRACE környezet is, amely tartalmaz egy ajánlott kapcsoló és könyvtár összeállítást tartalmaz. A PRACE környezet betöltése:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
module load prace&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A PRACE környezet az AMD ACML matematikai könyvtárakat használja, amennyiben az Intel MKL-re van szükségünk, akkor a PRACE környezetet nem kell betölteni. A megfelelő MKL kapcsolókat az [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Intel Link Advisor] szerint kell beállítani, pl.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FFLAGS=-openmp -I$(MKLROOT)/include&lt;br /&gt;
CFLAGS=-openmp -I$(MKLROOT)/include&lt;br /&gt;
LDFLAGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \&lt;br /&gt;
  -Wl,--start-group \&lt;br /&gt;
  $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \&lt;br /&gt;
  $(MKLROOT)/lib/intel64/libmkl_intel_thread.a \&lt;br /&gt;
  $(MKLROOT)/lib/intel64/libmkl_core.a \&lt;br /&gt;
  $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a \&lt;br /&gt;
  -Wl,--end-group -lpthread -lm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Párhuzamos környezet ===&lt;br /&gt;
==== OpenMP ====&lt;br /&gt;
Az OpenMP paraméterket környezeti változókon keresztül kell beállítani. Az &amp;lt;code&amp;gt;openmp&amp;lt;/code&amp;gt; párhuzamos SLURM környezet az OpenMP szálak számát beállítja. Tovább környezeti változókat az [https://computing.llnl.gov/tutorials/openMP/#EnvironmentVariables LLNL OpenMP oldalán] találtok.&lt;br /&gt;
&lt;br /&gt;
==== MPI ====&lt;br /&gt;
Az alapértelmezett MPI könyvtár az Open MPI. Ajánlott optimalizációs kapcsolók (CPU binding):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
--bind-to-core --bycore&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SGI ICE Debrecen ==&lt;br /&gt;
Az alapértelmezett MPI könyvtár az SGI MPT. A felhasználói programokat ehhez a könyvtárhoz érdemes fordítani. Ajánlott fordítás opciók:&lt;br /&gt;
&lt;br /&gt;
=== MPI fordítási opciók ===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    CFLAGS=-O2 -xSSE4.2&lt;br /&gt;
    FFLAGS=-O2 -xSSE4.2&lt;br /&gt;
    LDFLAGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \&lt;br /&gt;
      -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_sequential.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_core.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_blacs_sgimpt_lp64.a -Wl,--end-group \&lt;br /&gt;
      -lpthread -lm&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MPI és OpenMP fordítási opciók ===&lt;br /&gt;
Ebben az esetben az MKL műveletek OpenMP szálasíthatók, a program hibrid MPI és OMP módban is tud üzemelni.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    CFLAGS=-O2 -xSSE4.2 -openmp&lt;br /&gt;
    FFLAGS=-O2 -xSSE4.2 -openmp&lt;br /&gt;
    LDFALGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \&lt;br /&gt;
      -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_intel_thread.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_core.a \&lt;br /&gt;
      $(MKLROOT)/lib/intel64/libmkl_blacs_sgimpt_lp64.a -Wl,--end-group \&lt;br /&gt;
      -liomp5 -lpthread -lm -openmp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ARC köztesréteg ==&lt;br /&gt;
Ez a NorduGrid közösség által fejlesztett Grid köztesréteg. Részletes dokumentációkért [http://www.nordugrid.org/documents ezt a weboldalt] érdemes felkeresni.&lt;br /&gt;
&lt;br /&gt;
=== Miért is használjuk?! ===&lt;br /&gt;
* Jobb terhelés elosztást tesz lehetővé a szuperszámítógépek között&lt;br /&gt;
* A jobok azon a gépen fognak elindulni, ami a legmegfelelőbb a számára&lt;br /&gt;
* Egy nagy egységgé kapcsolja össze a szuperszámítógépeket&lt;br /&gt;
* Szabványos webservice interfésszel ([https://www.ogf.org/documents/GFD.108.pdf OGSA-BES], [https://www.ogf.org/documents/GFD.114.pdf HPC Basic Profile]) rendelkezik. Ezáltal könnyen lehet integrálni más rendszerekkel&lt;br /&gt;
* Nagyon sok operációs rendszert támogat&lt;br /&gt;
* A saját számítógépünkről tudjuk kezelni a szuperszámítógépes jobokat&lt;br /&gt;
* A [http://pulse.fgi.csc.fi/gridrer/htdocs/index.phtml futás idejű környezetek használatával] a megfelelő módon lefordított alkalmazást tudjuk használni és nem kell észben tartani, hogy éppen melyik szuperszámítógépen van telepítve a program&lt;br /&gt;
&lt;br /&gt;
=== Grid tanúsítvány igénylése ===&lt;br /&gt;
Első lépésként szükségünk lesz egy '''Grides X.509 tanúsítványra''', amivel az ARC klienseket használni tudjuk. A [https://portal.hpc.niif.hu HPC portálon] keresztül lehetőségünk van igényelni egy 2 hétig érvényes SLCS tanúsítványt. A személyes adatok menüpontra kell kattintani és az oldal végén lesz az igénylő felület. '''Fontos: legalább egy HPC projekt tagsággal rendelkeznünk kell a HPC portálon. ''' Itt található az a letölthető UNIX script is, ami minden szükséges beállítást elvégez a számunkra: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;           &lt;br /&gt;
 $ chmod +x slcs_unix_install.sh &lt;br /&gt;
 $ ./slcs_unix_install.sh &lt;br /&gt;
 $HOME/.globus/usercert.pem and $HOME/.globus/userkey.pem installed&lt;br /&gt;
 NIIF HPC SLCS Root CA installed: $HOME/.globus/certificates/SLCSCA.pem&lt;br /&gt;
 Default ARC client configuration created: $HOME/.arc/client.conf&lt;br /&gt;
 NIIF Root CA 2 installed: $HOME/.globus/certificates/NIIFCA.pem&lt;br /&gt;
 $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Az SLCS másik nagy előnye az egyszerűsített igénylésen kívül az, hogy 1 órán belül az összes szuperszámítógépen automatikusan engedélyezve lesz. Viszont ha nem szeretnénk minden második héten új X.509-es tanúsítványt igényelni, akkor lehetőség van arra is, hogy 1 évig érvényes [https://www.igtf.net IGTF] tanúsítványt igényeljünk a KIFÜ-től [http://www.ca.niif.hu/hu/igenyles ezen az oldal keresztül]. Ebben az esetben a [mailto:hpc-support@niif.hu] címre kell elküldenünk az IGTF-es tanúsítványunk publikus részét és meg kell adnunk, hogy melyik témaszámunkhoz legyen majd rendelve a szuperszámítógépeken.&lt;br /&gt;
&lt;br /&gt;
=== ARC kliensek használatba vétele ===&lt;br /&gt;
==== Telepítés ====&lt;br /&gt;
A csomagok telepítéséhez az itt leírt repo-kat lehet használni: http://download.nordugrid.org/repos-15.03.html&lt;br /&gt;
'''Fontos''': 5.0-ás ARC verziót telepítsük.&lt;br /&gt;
&lt;br /&gt;
Debian alapú rendszerek esetén:  &lt;br /&gt;
  apt-get install nordugrid-arc-client  &lt;br /&gt;
&lt;br /&gt;
Redhat alapú rendszerek esetén:  &lt;br /&gt;
  yum install nordugrid-arc-client&lt;br /&gt;
&lt;br /&gt;
OSX csomag telepítése [http://brew.sh brew] segítségével:&lt;br /&gt;
  brew install nordugrid-arc&lt;br /&gt;
&lt;br /&gt;
Ha nem találtunk megfelelő csomagot, akkor [http://download.nordugrid.org/packages/nordugrid-arc/releases/5.0.0/src/nordugrid-arc-5.0.0.tar.gz innen] le tudjuk tölteni a forráskódját és le tudjuk fordítani.&lt;br /&gt;
&lt;br /&gt;
==== Konfigurálás ====&lt;br /&gt;
$HOME/.arc/client.conf:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [common]&lt;br /&gt;
            &lt;br /&gt;
 [computing/budapest] &lt;br /&gt;
 url=https://login.budapest.hpc.niif.hu:60000/arex&lt;br /&gt;
 infointerface=org.nordugrid.wsrfglue2&lt;br /&gt;
 submissioninterface=org.ogf.bes&lt;br /&gt;
 default=yes&lt;br /&gt;
 &lt;br /&gt;
 [computing/szeged]&lt;br /&gt;
 url=https://login.szeged.hpc.niif.hu:60000/arex&lt;br /&gt;
 infointerface=org.nordugrid.wsrfglue2&lt;br /&gt;
 submissioninterface=org.ogf.bes&lt;br /&gt;
 default=yes&lt;br /&gt;
 &lt;br /&gt;
 [computing/debrecen]&lt;br /&gt;
 url=https://login.debrecen.hpc.niif.hu:60000/arex&lt;br /&gt;
 infointerface=org.nordugrid.wsrfglue2&lt;br /&gt;
 submissioninterface=org.ogf.bes&lt;br /&gt;
 default=yes&lt;br /&gt;
 &lt;br /&gt;
 [computing/pecs]&lt;br /&gt;
 url=https://login.pecs.hpc.niif.hu:60000/arex&lt;br /&gt;
 infointerface=org.nordugrid.wsrfglue2&lt;br /&gt;
 submissioninterface=org.ogf.bes&lt;br /&gt;
 default=yes&lt;br /&gt;
  &lt;br /&gt;
 # FastestQueue – ranks targets according to their queue length&lt;br /&gt;
 brokername=FastestQueue&lt;br /&gt;
 &lt;br /&gt;
 # Random – ranks targets randomly&lt;br /&gt;
 #brokername=Random&lt;br /&gt;
 &lt;br /&gt;
 # Data – ranks targets according the amount of megabytes of the requested input files that are already&lt;br /&gt;
 # in the computing resources cache. &lt;br /&gt;
 #brokername=Data&lt;br /&gt;
 &lt;br /&gt;
 # PythonBroker:&amp;lt;module&amp;gt;.&amp;lt;class&amp;gt;[:arguments] – ranks targets using any user-supplied custom&lt;br /&gt;
 # Python broker module, optionally with broker arguments. Such module can reside anywhere in&lt;br /&gt;
 # user’s PYTHONPATH&lt;br /&gt;
 #brokername=PythonBroker&lt;br /&gt;
 &lt;br /&gt;
 [alias]&lt;br /&gt;
 pecs=computing:ARC1:https://login.pecs.hpc.niif.hu:60000/arex&lt;br /&gt;
 szeged=computing:ARC1:https://login.szeged.hpc.niif.hu:60000/arex&lt;br /&gt;
 debrecen=computing:ARC1:https://login.debrecen.hpc.niif.hu:60000/arex&lt;br /&gt;
 budapest=computing:ARC1:https://login.budapest.hpc.niif.hu:60000/arex&lt;br /&gt;
 hp=budapest szeged&lt;br /&gt;
 sgi=pecs debrecen   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Érdemes beállítani, hogy alapértelmezés szerint a FastestQueue brókert használja, ezáltal mindig arra a szuperszámítógépre fogja küldeni a jobokat, ahol a legkevesebb a várakozó jobok száma. A konfigurációs fájl részletes dokumentációját és az ARC kliensek leírásait [http://www.nordugrid.org/documents/arc-ui.pdf itt lehet] megnézni.&lt;br /&gt;
&lt;br /&gt;
=== Grid proxy készítése ===&lt;br /&gt;
&lt;br /&gt;
Ha már telepítettük a tanúsítványunkat és az ARC klienseket akkor a következő lépés az, hogy egy proxy tanúsítványt kell készítenünk, ami alapértelmezés szerint 12 óráig érvényes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ arcproxy &lt;br /&gt;
 Enter pass phrase for private key:&lt;br /&gt;
 Your identity: /C=HU/O=NIIF/OU=SLCS/L=hpcteszt/CN=joe&lt;br /&gt;
 Proxy generation succeeded&lt;br /&gt;
 Your proxy is valid until: 2015-03-30 05:01:09&lt;br /&gt;
 $    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
Tesztelési célból ezeket a parancsokat érdemes kipróbálni:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ arcinfo -c szeged  &lt;br /&gt;
 $ arcinfo -c hp -l&lt;br /&gt;
 $ arcinfo&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Grid job készítése ===&lt;br /&gt;
A jobok leírására több formátumot is használhatunk: [https://www.ogf.org/documents/GFD.56.pdf JSDL], vagy [http://www.nordugrid.org/documents/xrsl.pdf xRSL]. Így adjuk meg, hogy a jobunknak mire van szüksége. Itt egy példa job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
 $ cat job.xrsl &lt;br /&gt;
 &amp;amp;&lt;br /&gt;
 (executable=&amp;quot;matlab.sh&amp;quot;)&lt;br /&gt;
 (arguments=&amp;quot;matlab.m&amp;quot;)&lt;br /&gt;
 (stdout=&amp;quot;stdout.txt&amp;quot;)&lt;br /&gt;
 (stderr=&amp;quot;stderr.txt&amp;quot;)&lt;br /&gt;
 (jobname=&amp;quot;Matlab test&amp;quot;)&lt;br /&gt;
 (inputFiles=&lt;br /&gt;
 (&amp;quot;matlab.m&amp;quot; &amp;quot;&amp;quot;)&lt;br /&gt;
 )&lt;br /&gt;
 (memory&amp;gt;=&amp;quot;1000&amp;quot;)&lt;br /&gt;
 (gmlog=&amp;quot;gm.log&amp;quot;)&lt;br /&gt;
 (wallTime=&amp;quot;240&amp;quot;)&lt;br /&gt;
 (runTimeEnvironment=&amp;quot;APPS/MATH/MATLAB-7.13&amp;quot;)  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ cat matlab.sh &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;Compute node: &amp;quot; `/bin/hostname -f`&lt;br /&gt;
 echo&lt;br /&gt;
 matlab -nodisplay &amp;lt; $1&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ cat matlab.m&lt;br /&gt;
 2+3&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ennél a példánál a '''APPS/MATH/MATLAB-7.13''' futásidejű környezetet kértük, ezáltal ez a job csak azon a szuperszámítógépen fog elindulni, ahol ez telepítve van. Továbbá azt kértük még, hogy 240 percig futhasson és legalább 1000 MByte memória rendelkezésre álljon.&lt;br /&gt;
&lt;br /&gt;
Az '''arcinfo -l''' paranccsal tudjuk megnézni, hogy a szuperszámítógépeken milyen futás idejű környezetek (runtime environment-ek) vannak telepítve. Ha szeretnénk egy új környezet beállíttatni, akkor [mailto:hpc-support@niif.hu ide] kell levelet küldeni.&lt;br /&gt;
&lt;br /&gt;
==== OpenMP példa ====&lt;br /&gt;
&lt;br /&gt;
Job elkészítése:&lt;br /&gt;
&amp;lt;code&amp;gt;        &lt;br /&gt;
 $ cat job-openmp.xrsl &lt;br /&gt;
 &amp;amp;&lt;br /&gt;
 (executable=&amp;quot;omp_mm&amp;quot;)&lt;br /&gt;
 (stdout=&amp;quot;stdout.txt&amp;quot;)&lt;br /&gt;
 (stderr=&amp;quot;stderr.txt&amp;quot;)&lt;br /&gt;
 (jobname=&amp;quot;OpenMP test&amp;quot;)&lt;br /&gt;
 (queue=&amp;quot;test&amp;quot;)&lt;br /&gt;
 (executables=&amp;quot;omp_mm&amp;quot;)&lt;br /&gt;
 (count=&amp;quot;10&amp;quot;)&lt;br /&gt;
 (countpernode=&amp;quot;10&amp;quot;)&lt;br /&gt;
 (environment=(&amp;quot;OMP_NUM_THREADS&amp;quot; &amp;quot;10&amp;quot;))&lt;br /&gt;
 (queue=&amp;quot;test&amp;quot;)&lt;br /&gt;
 (inputFiles=&lt;br /&gt;
    (&amp;quot;omp_mm&amp;quot; &amp;quot;&amp;quot;)&lt;br /&gt;
 )&lt;br /&gt;
 (memory&amp;gt;=&amp;quot;2600&amp;quot;)&lt;br /&gt;
 (gmlog=&amp;quot;gm.log&amp;quot;)&lt;br /&gt;
 (wallTime=&amp;quot;20&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Job elküldése:&lt;br /&gt;
&lt;br /&gt;
 $ arcsub job-openmp.xrsl&lt;br /&gt;
 Job submitted with jobid: https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
&lt;br /&gt;
Job állapotának a lekérdezése:&lt;br /&gt;
&lt;br /&gt;
 $ arcstat https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
 Job: https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
  Name: OpenMP test&lt;br /&gt;
  State: Finished&lt;br /&gt;
  Exit Code: 0&lt;br /&gt;
 &lt;br /&gt;
 Status of 1 jobs was queried, 1 jobs returned information&lt;br /&gt;
&lt;br /&gt;
Job letöltése:&lt;br /&gt;
&lt;br /&gt;
 $ arcget https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
 Results stored at: cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
 Jobs processed: 1, successfully retrieved: 1, successfully cleaned: 1&lt;br /&gt;
 zion:~ joe $ cd cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn&lt;br /&gt;
 zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $ ls -l&lt;br /&gt;
 total 16&lt;br /&gt;
 drwx------  12 joe  staff   408 Mar 29 21:24 gm.log&lt;br /&gt;
 -rw-------   1 joe  staff     0 Mar 29 21:24 stderr.txt&lt;br /&gt;
 -rw-------   1 joe  staff  6362 Mar 29 21:24 stdout.txt&lt;br /&gt;
 zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $&lt;br /&gt;
&lt;br /&gt;
Adatok ellenőrzése:&lt;br /&gt;
&lt;br /&gt;
 zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $ head stdout.txt &lt;br /&gt;
 Starting matrix multiple example with 10 threads&lt;br /&gt;
 Initializing matrices...&lt;br /&gt;
 Thread 0 starting matrix multiply...&lt;br /&gt;
 Thread=0 did row=0&lt;br /&gt;
 Thread 9 starting matrix multiply...&lt;br /&gt;
 Thread 6 starting matrix multiply...&lt;br /&gt;
 Thread=0 did row=1&lt;br /&gt;
 Thread 5 starting matrix multiply...&lt;br /&gt;
 Thread=5 did row=50&lt;br /&gt;
 Thread=5 did row=51&lt;br /&gt;
 zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe$           &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MPI példa ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ cat job-mpi.xrsl &lt;br /&gt;
 &amp;amp;&lt;br /&gt;
 (executable=&amp;quot;mpi.sh&amp;quot;)&lt;br /&gt;
 (stdout=&amp;quot;stdout.txt&amp;quot;)&lt;br /&gt;
 (stderr=&amp;quot;stderr.txt&amp;quot;)&lt;br /&gt;
 (jobname=&amp;quot;MPI test&amp;quot;)&lt;br /&gt;
 (executables=&amp;quot;connectivity&amp;quot; &amp;quot;mpi.sh&amp;quot;)&lt;br /&gt;
 (count=&amp;quot;10&amp;quot;)&lt;br /&gt;
 (inputFiles=&lt;br /&gt;
     (&amp;quot;connectivity&amp;quot; &amp;quot;&amp;quot;)&lt;br /&gt;
     (&amp;quot;mpi.sh&amp;quot; &amp;quot;&amp;quot;)&lt;br /&gt;
 )&lt;br /&gt;
 (memory&amp;gt;=&amp;quot;2600&amp;quot;)&lt;br /&gt;
 (gmlog=&amp;quot;gm.log&amp;quot;)&lt;br /&gt;
 (wallTime=&amp;quot;20&amp;quot;)&lt;br /&gt;
 (runTimeEnvironment&amp;gt;=ENV/GCC/MPI/OPENMPI-1.4.3)  &lt;br /&gt;
&lt;br /&gt;
 $ cat mpi.sh &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 mpirun -np 10 ./connectivity -v   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Grafikus felületű ARC kliens ====&lt;br /&gt;
Parancssoros klienseken kívül használni lehet még grafikus klienseket is. [http://sourceforge.net/projects/arc-gui-clients/?source=directory Innen tudják] letölteni őket.&lt;br /&gt;
&lt;br /&gt;
[[Category: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=PRACE_User_Support&amp;diff=4499</id>
		<title>PRACE User Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=PRACE_User_Support&amp;diff=4499"/>
				<updated>2019-10-29T13:56:13Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Acknowledgement in publications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== User Guide to obtain a digital certificate ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This document gives a short overview about how to require a digital certificate from NIIF CA for users, if the pre-registration form has been filled.&lt;br /&gt;
&lt;br /&gt;
This guide is valid only for the Hungarian users.&lt;br /&gt;
&lt;br /&gt;
If you are from a foreign country, and would like to get a certificate, [http://www.eugridpma.org/members/worldmap/ here] you can found your country's certification authority.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing NIIF CA root certificate ===&lt;br /&gt;
&lt;br /&gt;
: The first step is to download the &amp;quot;[https://www.ca.niif.hu/en/node/4 root certificate]&amp;quot; (&amp;quot;NIIF CA Root Certificate&amp;quot; part), in the the format, which is known for the used browser or other SSL-using program. The browser asks wether to install/accept the certificate or not - accept or install the certificate in any cases. In addition, activate or allow the option which permits the browser to use the certificate to authenticate websites. Without that, it is not possible to reach the CA's web interface with secure protocol (https). The downloaded/installed certificate can be found in the certificate management modul of the browser. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Request a certificate ===&lt;br /&gt;
&lt;br /&gt;
==== Request a certificate with openssl ====&lt;br /&gt;
*: Sing in into the certification registration website of the NIIF CA with our email address and password stored in the directory.&lt;br /&gt;
&lt;br /&gt;
*: This site uses secure protocol (https),  which the browser often indicates with a warning window - they should be acknowledged implicitly. &lt;br /&gt;
&lt;br /&gt;
*: In the opening page - which is the public web surface of the CMS certificate management software - choose the &amp;quot;OpenSSL kliens kérelem benyújtása (PKCS#10)&amp;quot; (request an OpenSSL client) option. This leads to the datasheet, which must be filled in accordance with the printed datasheet. First, according to the purpose of the request, the corresponding field must be choosen (CSIRT, GRID, NIIF felhasználó, Független kutató, HBONE).&lt;br /&gt;
&lt;br /&gt;
*: Copy the public part of our certificate in the field &amp;quot;PKCS#10&amp;quot;. You can find a user guide about ''How to create a PKCS#10 certificate with openssl, which suitable for the NIIF CA requirements'' below.&lt;br /&gt;
&lt;br /&gt;
*: A Challenge and a Request passwords must be given - both of them must be at least 8 characters long. Note them, because they needed for cancellation the certificate, or for the personal authentication.&lt;br /&gt;
&lt;br /&gt;
*: Fill the other fields (name, email address, phone, organisation), and if there is anything, the CA operator should know, fill the last field with it. If everything is done, after a last check, click on the Elküld (&amp;quot;send&amp;quot;) button on the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
*: In case of a successful PKCS#10 key-uploading, a page is opening with the confirmation of the successful certification request.&lt;br /&gt;
&lt;br /&gt;
==== User Guide to create a PKCS#10 digital certification request with openssl ====&lt;br /&gt;
This paragraph gives a short overview about how to require a digital certificate from NIIF CA for users using openssl with the PKCS#10 format.The latest version of the openssl program can be downloaded from: [http://www.slproweb.com/products/Win32OpenSSL.html Windows], [http://www.openssl.org/source/ Linux].&lt;br /&gt;
:1. Download the openssl configuration file&lt;br /&gt;
&lt;br /&gt;
:   To generate the CSR, there is a prewritten [http://www.ca.niif.hu/sites/ca.niif.hu/files/niif_ca_user_openssl.cnf niif_ca_user_openssl.cnf] file on the NIIF CA website.&lt;br /&gt;
:   The following modifications must be done in the config:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;''purpose of the certificate''&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|1.organizationalUnitName             &lt;br /&gt;
|= Organizational Unit Name&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1.organizationalUnitName_default      &lt;br /&gt;
|= GRID # ''For example: GRID, HBONE, General Purpose''&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2.organizationalUnitName             &lt;br /&gt;
| = Second Organizational Unit Name&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2.organizationalUnitName_default      &lt;br /&gt;
|= NIIF # ''For example: BME, ELTE, SZFKI, SZTAKI, NIIF, ...''&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|commonName                            &lt;br /&gt;
|= Common Name (YOUR name) # ''User Name.''&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|commonName_max                        &lt;br /&gt;
|= 64A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Create PKCS#10 reqquest&lt;br /&gt;
&lt;br /&gt;
:* No existing secret key:&lt;br /&gt;
Run the&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
    openssl req -newkey rsa:1024 -config ./niif_ca_user_openssl.cnf -out new_csr.pem &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
command, and answer the appearing questions at the prompt. The Institute (NIIF CA) and country (HU) datas should not be changed, or the request is going to be invalid. The certification request and the corresponding private key will be saved in the new_csr.pem and privkey.pem files. To gain acces to the private key, during the generating given &amp;quot;pass phrase&amp;quot; password must be used. In case of a forgotten password, the certificate will be unusable. &lt;br /&gt;
&lt;br /&gt;
:* Existing private key (extend)&lt;br /&gt;
&lt;br /&gt;
If there is an existing, previously generated private key (it must be at least a 1024 bit RSA key), which can be found in the old_key.pem file, then the following command creates the CSR&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    openssl req -new -key ./old_key.pem -config ./niif_ca_user_openssl.cnf -out new_csr.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Personal Authentication ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After the successful registration on the website, please visit the NIIF CA Registration Office personally with the copy of the pre-registration datasheet, the Request password and an ID document (ID card, passport).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Address:&lt;br /&gt;
&lt;br /&gt;
: NIIF Iroda &lt;br /&gt;
: (RA Administrator)&lt;br /&gt;
: Victor Hugo Str. 18-22.&lt;br /&gt;
: H-1132 Budapest, HUNGARY&lt;br /&gt;
: email: ca (at) niif (dot) hu&lt;br /&gt;
&lt;br /&gt;
: RA opening hours: Monday, 14:00 - 16:30 (CET)&lt;br /&gt;
&lt;br /&gt;
During the authentication, the colleagues of the Registration Office verify the datas of the certificate and the user, and after the successful identification, they take the next steps in order to create the certification (it is not needed to wait for it).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Downloading the certificate ===&lt;br /&gt;
&lt;br /&gt;
An email is going to arrive after the valid certificate has been completed (to the given email address during the request), and clicking on the URL in the email, the certificate can be downloaded. The saved certificate does not contain the private key.&lt;br /&gt;
&lt;br /&gt;
If the certificate is installed into the browser, it is advised to export it with the private key in PKCS#12 format, so there will be a common backup with the private key and the certificate. Handle this backup carefully! If the private key lost, or gets into unauthorized hands, immediately request a certificate cancellation at the registration interface &amp;quot;Tanúsítvány visszavonása&amp;quot; (certificate cancellation) or at the Registration Office, and inform the concerned people!&lt;br /&gt;
&lt;br /&gt;
== Access with GSI-SSH ==&lt;br /&gt;
  &lt;br /&gt;
A user can access to the supercomputers by using the GSI-SSH protocol.&lt;br /&gt;
  &lt;br /&gt;
It requires a machine with a Globus installation that provides the gsissh client.&lt;br /&gt;
  &lt;br /&gt;
The needed credentials (these mean the private and public keys) must be created before entering the machine with the &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    grid-proxy-init&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    arcproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
commands.&lt;br /&gt;
&lt;br /&gt;
By default, the proxies are valid for 12 hours.&lt;br /&gt;
It is possible to modify this default value with the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    arcproxy -c validityPeriod=86400&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    grid-proxy-init -hours 24&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both of the previous commands  set the validation of the proxies to 24 hours.&lt;br /&gt;
Using the arcproxy, the validation time must be given in seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To enter the site, the &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    gsissh -p 2222 prace-login.sc.niif.hu&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
command has to be used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GridFTP file transfer ==&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
In order to use GridFTP for file transfer, one needs a GridFTP client program that provides the interface between the user and a remote GridFTP server. There are several clients available for GridFTP, one of which is globus-url-copy, a command line tool which can transfer files using the GridFTP protocol as well as other protocols such as http and ftp. globus-url-copy is distributed with the Globus Toolkit and usually available on machines that have the Globus Toolkit installed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Syntax'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    globus-url-copy [options] sourceURL destinationURL&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
* [options] The optional command line switches as described later.&lt;br /&gt;
  &lt;br /&gt;
* sourceURL The URL of the file(s) to be copied. If it is a directory, it must end with a slash (/), and all files within that directory will be copied.&lt;br /&gt;
  &lt;br /&gt;
* destURL The URL to which to copy the file(s). To copy several files to one destination URL, destURL must be a directory and be terminated with a slash (/).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Globus-url-copy supports multiple protocols, so the format of the source and destination URLs can be either&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    file://path &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
when you refer to a local file or directory or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    protocol://host[:port]/path&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
when you refer to a remote file or directory. &lt;br /&gt;
&lt;br /&gt;
globus-url-copy is supporting other protocols such as http, https, ftp and gsiftp as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    globus-url-copy file://task/myfile.c gsiftp://prace-login.sc.niif.hu/home/prace/pr1hrocz/myfile.c &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command uploads the myfile.c file from the locak task folder to the remote machine's home/task folder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Command line options for globus-url-copy [options]'''&lt;br /&gt;
  &lt;br /&gt;
* -help Prints usage information for the globus-url-copy program.&lt;br /&gt;
* -version Prints the version of the globus-url-copy program.&lt;br /&gt;
* -vb During the transfer, displays: (1) number of bytes transferred (2) performance since the last update (every 5 seconds) (3) average performance for the whole transfer&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''The following table lists parameters which you can set to optimize the performance of your data transfer:'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* -tcp-bs &amp;lt;size&amp;gt;Specifies the size (in bytes) of the TCP buffer to be used by the underlying GridFTP data channels.&lt;br /&gt;
* -p &amp;lt;number of parallel streams&amp;gt; Specifies the number of parallel streams to be used in the GridFTP transfer.&lt;br /&gt;
* -stripe Use this parameter to initiate a “striped” GridFTP transfer that uses more than one node at the source and destination. As multiple nodes contribute to the transfer, each using its own network interface, a larger amount of the network bandwidth can be consumed than with a single system. Thus, at least for “big” (&amp;gt; 100 MB) files, striping can considerably improve performance.&lt;br /&gt;
&lt;br /&gt;
==Usage of the SLURM scheduler ==&lt;br /&gt;
Website: http://slurm.schedmd.com&lt;br /&gt;
&lt;br /&gt;
The schedule of the HPCs are CPU hour based. This means that the available core hours are divided between users on a monthly basis. All UNIX users are connected to one or more account. This scheduler account is connected to an HPC project and a UNIX group. HPC jobs can only be sent by using one of the accounts. The core hours are calculated by the multiplication of wall time (time spent running the job) and the CPU cores requested.&lt;br /&gt;
For example reserving 2 nodes (48 cpu cores) at the NIIFI SC for 30 minutes gives 48 * 30 = 1440 core minutes = 24 core hours. Core hours are measured between the start and and the end of the jobs.&lt;br /&gt;
&lt;br /&gt;
'''It is very important to be sure the application maximally uses the allocated resources. An empty or non-optimal job will consume allocated core time very fast. If the account run out of the allocated time, no new jobs can be submitted until the beginning of the next accounting period. Account limits are regenerated the beginning of each month.'''&lt;br /&gt;
&lt;br /&gt;
Information about an account can be listed with the following command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sbalance&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
After executing the command, the following table shows up for Bob. The user can access, and run jobs by using two different accounts (foobar, barfoo). He can see his name marked with * in the table. He shares both accounts with alice (Account column). The consumed core hours for the users are displayed in the second row (Usage), and the consumption for the jobs ran as the account is displayed in the 4th row. The last two row defines the allocated maximum time (Account limit), and the time available for the machine (Available).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
alice                0 |           foobar           0 |             0           0&lt;br /&gt;
bob *                0 |           foobar           0 |             0           0&lt;br /&gt;
&lt;br /&gt;
bob *                7 |           barfoo           7 |         1,000         993&lt;br /&gt;
alice                0 |           barfoo           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Estimating core time ===&lt;br /&gt;
Before production runs, it is advised to have a core time estimate. The following command can be used for getting estimate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; are the number of nodes to be reserved, &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; is the maximal time spent running the job.&lt;br /&gt;
&lt;br /&gt;
'''It is important to provide the core time to be reserved most precisely, because the scheduler queue the jobs based on this value. Generally, a job with shorter core time will be run sooner. It is advised to check the time used to run the job after completion with &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; command.'''&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
Alice want to reserve 2 days 10 hours and 2 nodes, she checks, if she have enough time on her account.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N 2 -t 2-10:00:00&lt;br /&gt;
&lt;br /&gt;
Estimated CPU hours: 2784&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unfortunately, she couldn't afford to run this job.&lt;br /&gt;
&lt;br /&gt;
=== Status information ===&lt;br /&gt;
&lt;br /&gt;
Jobs in the queue can be listed with &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt; command, the status of the cluster can be retrieved with the &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; command. All jobs sent will get a JOBID. The properties of a job can be retrieved by using this id. Status of a running or waiting job:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    scontrol show job JOBID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All jobs will be inserted into an accounting database. The properties of the completed jobs can be retrieved from this database. Detailed statistics can be viewed by using this command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Memory used can be retrieved by using&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    smemory JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disk usage can be retrieved by this command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sdisk JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
There are 3 jobs in the queue. The first is an array job which is waiting for resources (PENDING). The second is an MPI job running on 4 nodes for 25 minutes now. The third is an OMP run running on one node, just started. The NAME of the jobs can be freely given, it is advised to use short, informative names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    squeue -l&lt;br /&gt;
&lt;br /&gt;
Wed Oct 16 08:30:07 2013              &lt;br /&gt;
     JOBID PARTITION     NAME     USER    STATE       TIME TIMELIMIT  NODES NODELIST(REASON)&lt;br /&gt;
591_[1-96]    normal    array    alice  PENDING       0:00     30:00      1 (None)&lt;br /&gt;
       589    normal      mpi      bob  RUNNING      25:55   2:00:00      4 cn[05-08]&lt;br /&gt;
       590    normal      omp    alice  RUNNING       0:25   1:00:00      1 cn09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This two-node batch job had a typical load of 10GB virtual, and 6.5GB RSS memory per node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    smemory 430&lt;br /&gt;
&lt;br /&gt;
 MaxVMSize  MaxVMSizeNode  AveVMSize     MaxRSS MaxRSSNode     AveRSS&lt;br /&gt;
---------- -------------- ---------- ---------- ---------- ----------&lt;br /&gt;
10271792K           cn06  10271792K   6544524K       cn06   6544524K   &lt;br /&gt;
10085152K           cn07  10085152K   6538492K       cn07   6534876K &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking jobs ====&lt;br /&gt;
&lt;br /&gt;
It is important to be sure the application fully uses the core time reserved. A running application can be monitored with the following command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sjobcheck JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
&lt;br /&gt;
This job runs on 4 nodes. The LOAD group provides information about the general load of the machine, this is more or less equal to the number of cores. The CPU group gives you information about the exact usage. Ideally, values of the &amp;lt;code&amp;gt;User&amp;lt;/code&amp;gt; column are over 90. If the value is below that, there is a problem with the application, or it is not optimal, and the run should be ended. This example job fully using (&amp;quot;maxing out&amp;quot;) the available resources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hostname                     LOAD                       CPU              Gexec  &lt;br /&gt;
 CPUs (Procs/Total) [     1,     5, 15min] [  User,  Nice, System, Idle, Wio]&lt;br /&gt;
cn08    24 (   25/  529) [ 24.83, 24.84, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn07    24 (   25/  529) [ 24.93, 24.88, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn06    24 (   25/  529) [ 25.00, 24.90, 20.97] [  99.9,   0.0,   0.1,   0.0,   0.0] OFF&lt;br /&gt;
cn05    24 (   25/  544) [ 25.11, 24.96, 20.97] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking licenses ====&lt;br /&gt;
&lt;br /&gt;
The used and available licenses can be retrieved with this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    slicenses&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking downtime ====&lt;br /&gt;
&lt;br /&gt;
In downtime periods, the scheduler doesn't start new jobs, but jobs can be sent. The periods can be retrieved by using the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sreservations&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Running jobs ===&lt;br /&gt;
&lt;br /&gt;
Running applications in the HPC can be done in batch mode. This means all runs must have a job script containing the resources and commands needed. The parameters of the scheduler (resource definitions) can be given with the &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; directive. Comparison of the schedulers, and the directives available at slurm are available at this [http://slurm.schedmd.com/rosetta.pdf table].&lt;br /&gt;
&lt;br /&gt;
==== Obligatory parameters ====&lt;br /&gt;
The following parameters are obligatory to provide:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; is the name of the account to use (available accounts can be retrieved with the &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; command), &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; is the short name of the job, &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; is the maximum walltime using &amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt; syntax. &lt;br /&gt;
Acceptable time formats include &amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; and &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The following command submit jobs:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sbatch jobscript.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the submission was successful, the following is outputted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; is the unique id of the job&lt;br /&gt;
&lt;br /&gt;
The following commmand cancels the job:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    scancel JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Job queues ====&lt;br /&gt;
&lt;br /&gt;
There are two separate queue (partition) available in the HPC, the &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; queue and the &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt; queue. Tha latter is for the production runs, the former is for testing purposes. In the test queue, 1 node can be allocated for the maximum of half hours, The default queue is &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt;. Test partition can be chosen with the following directive:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Quality of Service (QoS) ====&lt;br /&gt;
&lt;br /&gt;
There is an option for submitting low priority jobs. These jobs can be interrupted by any normal priority job at any time, but only the half of the time is billed to the account. Interrupted jobs will be automatically queued again. Therefore it is important to only run jobs that can be interrupted at any time, periodically saves their states (checkpoint) and can restart quickly.&lt;br /&gt;
The default QoS is &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, non-interruptable.&lt;br /&gt;
&lt;br /&gt;
The following directive choses low priority:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memory settings ====&lt;br /&gt;
&lt;br /&gt;
1000 MB memory is allocated for 1 CPU core by default, more can be allocated with the following directive:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; is given in MB. The maximum memory/core at NIIFI SC is 2600 MB.&lt;br /&gt;
&lt;br /&gt;
==== Email notification ====&lt;br /&gt;
Sending mail when the status of the job change (start, stop, error):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; is the e-mail to notify.&lt;br /&gt;
&lt;br /&gt;
==== Array jobs ====&lt;br /&gt;
Array jobs are needed, when multiple one threaded (serial) jobs are to be sent (with different data). Slurm stores unique id of the instances in the &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; enviromnemt variable. It is possible to seperate threads of the array job by retrieving these ids. Output of the threads are written into &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; files. The scheduler uploads outputs tightly. It is useful to use multiply threads for a CPU core. [http://slurm.schedmd.com/job_array.html More on this topic]&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user submits 96 serial job for a maximum of 24 hour run. &lt;br /&gt;
on the expenses of 'foobar' account. The &amp;lt;code&amp;gt;#SBATCH --array=1-96&amp;lt;/code&amp;gt; directive indicates, that it is an array job. The application &lt;br /&gt;
can be run with the &amp;lt;code&amp;gt;srun&amp;lt;/code&amp;gt; command. This is a shell script in this example.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MPI jobs ====&lt;br /&gt;
Using MPI jobs, the number of MPI processes running on a node is to be given (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). The most frequent case is to provide the number of CPU cores. Parallel programs should be started by using &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Bob user allocates 2 nodes, 12 hour for an MPI job, billing 'barfoo' account. 24 MPI thread will be started on each node. The stdout output is piped to &amp;lt;code&amp;gt;slurm.out&amp;lt;/code&amp;gt; file (&amp;lt;code&amp;gt;#SBATCH -o&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CPU binding ====&lt;br /&gt;
Generally, the performance of MPI application can be optimized with CPU core binding. In this case, the threads of the paralel program won't be scheduled by the OS between the CPU cores, and the memory localization can be made better (less cache miss). It is advised to use memory binding. Tests can be run to define, what binding strategy gives the best performance for our application. The following settings are valid for OpenMPI environment. Further information on binding can be retrieved with &amp;lt;code&amp;gt;--report-bindings&amp;lt;/code&amp;gt; MPI option. Along with the running commands, few lines of the detailed binding information are shown. It is important, that one should not use task_binding of the scheduler!&lt;br /&gt;
&lt;br /&gt;
===== Binding per CPU core =====&lt;br /&gt;
In this case, MPI fills CPU cores by the order of threads (rank).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bycore&lt;br /&gt;
&lt;br /&gt;
[cn05:05493] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 1 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 2 bound to socket 0[core 2]: [. . B . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 3 bound to socket 0[core 3]: [. . . B . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Binding based on CPU socket =====&lt;br /&gt;
In this case, MPI threads are filling CPUs alternately.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bysocket&lt;br /&gt;
&lt;br /&gt;
[cn05:05659] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 1 bound to socket 1[core 0]: [. . . . . . . . . . . .][B . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 3 bound to socket 1[core 1]: [. . . . . . . . . . . .][. B . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Binding by nodes =====&lt;br /&gt;
In this case, MPI threads are filling nodes alternately. At least 2 nodes needs to be allocated.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bynode&lt;br /&gt;
&lt;br /&gt;
[cn05:05904] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05904] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 1 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 3 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) jobs ====&lt;br /&gt;
For OpenMP paralell applications, 1 node needs to be allocated, and the number of OMP threads needs to be provided with the &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; environment variable. The variable needs to be written before the application (see example), or needs to be exported before executing the command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  export OMP_NUM_THREADS=24&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user starts a 24 threaded OMP application for maximum 6 hours on the expenses of foobar account.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
OMP_NUM_THREADS=24 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hybrid MPI-OMP jobs ====&lt;br /&gt;
&lt;br /&gt;
When an application uses MPI and OMP it is running in hybrid MPI-OMP mode. Good to know that Intel MKL linked applications MKL calls are OpenMP capable. Generally, the following distribution suggested: MPI process number is from 1 to the CPU socket number, OMP thread number is the number of CPU cores in a node, or the half or quarter of that (it depends on code). For the job script, the parameters of these two needs to be combined.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user sent a hybrid job on the expenses of the 'foobar' account for 8 hours, and 2 nodes. 1 MPI process is running on one node using 24 OMP thread per node. For the 2 nodes, 2 MPI process is running, with 2x24 OMP threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=24&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid jobs ====&lt;br /&gt;
Maple can be run - similarly to OMP jobs - on one node. Maple module need to be loaded for using it. A grid server needs to be started, because Maple is working in client-server mode (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). This application needs to use license, which have to be given in the jobscript (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). Starting of a Maple job is done by using &lt;br /&gt;
&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; code.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user is running a Maple Grid application for 6 hours on the expenses of 'foobar' account:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GPU compute nodes ====&lt;br /&gt;
The Szeged site accomodates 2 GPU enabled compute nodes. Each GPU node has 6 Nvidia Tesla M2070 cards. The GPU nodes reside in a separate job queue (&amp;lt;code&amp;gt;--partition gpu&amp;lt;/code&amp;gt;). To specify the number of GPUs set &amp;lt;code&amp;gt;--gres gpu:#&amp;lt;/code&amp;gt; directive.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user submits to the foobar account a 4 GPU, 6 hour job.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=GPU&lt;br /&gt;
#SBATCH --partition gpu&lt;br /&gt;
#SBATCH --gres gpu:4&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
&lt;br /&gt;
$PWD/gpu_burnout 3600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
Extensions should be asked for at the Execution site (NIIF) at prace-support@niif.hu. All requests will be carefully reviewed and decided if eligable.&lt;br /&gt;
&lt;br /&gt;
== Reporting after finishing project ==&lt;br /&gt;
A report must be created after using PRACE resources. Please contact prace-support@niif.hu for further details.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgement in publications ==&lt;br /&gt;
&lt;br /&gt;
PRACE&lt;br /&gt;
&lt;br /&gt;
'''We acknowledge [PRACE/KIFÜ] for awarding us access to resource based in Hungary at [Budapest/Debrecen/Pécs/Szeged].'''&lt;br /&gt;
&lt;br /&gt;
KIFÜ&lt;br /&gt;
&lt;br /&gt;
'''We acknowledge KIFÜ for awarding us access to resource based in Hungary at [Budapest/Debrecen/Pécs/Szeged].'''&lt;br /&gt;
&lt;br /&gt;
Where technical support has been received the following additional text should also be used:&lt;br /&gt;
'''The support of [name of person/people] from KIFÜ, Hungary to the technical work is gratefully acknowledged.'''&lt;br /&gt;
&lt;br /&gt;
[[Category: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=PRACE_User_Support&amp;diff=4498</id>
		<title>PRACE User Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=PRACE_User_Support&amp;diff=4498"/>
				<updated>2019-10-29T13:55:51Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Acknowledgement in publications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== User Guide to obtain a digital certificate ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This document gives a short overview about how to require a digital certificate from NIIF CA for users, if the pre-registration form has been filled.&lt;br /&gt;
&lt;br /&gt;
This guide is valid only for the Hungarian users.&lt;br /&gt;
&lt;br /&gt;
If you are from a foreign country, and would like to get a certificate, [http://www.eugridpma.org/members/worldmap/ here] you can found your country's certification authority.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing NIIF CA root certificate ===&lt;br /&gt;
&lt;br /&gt;
: The first step is to download the &amp;quot;[https://www.ca.niif.hu/en/node/4 root certificate]&amp;quot; (&amp;quot;NIIF CA Root Certificate&amp;quot; part), in the the format, which is known for the used browser or other SSL-using program. The browser asks wether to install/accept the certificate or not - accept or install the certificate in any cases. In addition, activate or allow the option which permits the browser to use the certificate to authenticate websites. Without that, it is not possible to reach the CA's web interface with secure protocol (https). The downloaded/installed certificate can be found in the certificate management modul of the browser. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Request a certificate ===&lt;br /&gt;
&lt;br /&gt;
==== Request a certificate with openssl ====&lt;br /&gt;
*: Sing in into the certification registration website of the NIIF CA with our email address and password stored in the directory.&lt;br /&gt;
&lt;br /&gt;
*: This site uses secure protocol (https),  which the browser often indicates with a warning window - they should be acknowledged implicitly. &lt;br /&gt;
&lt;br /&gt;
*: In the opening page - which is the public web surface of the CMS certificate management software - choose the &amp;quot;OpenSSL kliens kérelem benyújtása (PKCS#10)&amp;quot; (request an OpenSSL client) option. This leads to the datasheet, which must be filled in accordance with the printed datasheet. First, according to the purpose of the request, the corresponding field must be choosen (CSIRT, GRID, NIIF felhasználó, Független kutató, HBONE).&lt;br /&gt;
&lt;br /&gt;
*: Copy the public part of our certificate in the field &amp;quot;PKCS#10&amp;quot;. You can find a user guide about ''How to create a PKCS#10 certificate with openssl, which suitable for the NIIF CA requirements'' below.&lt;br /&gt;
&lt;br /&gt;
*: A Challenge and a Request passwords must be given - both of them must be at least 8 characters long. Note them, because they needed for cancellation the certificate, or for the personal authentication.&lt;br /&gt;
&lt;br /&gt;
*: Fill the other fields (name, email address, phone, organisation), and if there is anything, the CA operator should know, fill the last field with it. If everything is done, after a last check, click on the Elküld (&amp;quot;send&amp;quot;) button on the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
*: In case of a successful PKCS#10 key-uploading, a page is opening with the confirmation of the successful certification request.&lt;br /&gt;
&lt;br /&gt;
==== User Guide to create a PKCS#10 digital certification request with openssl ====&lt;br /&gt;
This paragraph gives a short overview about how to require a digital certificate from NIIF CA for users using openssl with the PKCS#10 format.The latest version of the openssl program can be downloaded from: [http://www.slproweb.com/products/Win32OpenSSL.html Windows], [http://www.openssl.org/source/ Linux].&lt;br /&gt;
:1. Download the openssl configuration file&lt;br /&gt;
&lt;br /&gt;
:   To generate the CSR, there is a prewritten [http://www.ca.niif.hu/sites/ca.niif.hu/files/niif_ca_user_openssl.cnf niif_ca_user_openssl.cnf] file on the NIIF CA website.&lt;br /&gt;
:   The following modifications must be done in the config:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;''purpose of the certificate''&amp;lt;br/&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|1.organizationalUnitName             &lt;br /&gt;
|= Organizational Unit Name&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1.organizationalUnitName_default      &lt;br /&gt;
|= GRID # ''For example: GRID, HBONE, General Purpose''&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2.organizationalUnitName             &lt;br /&gt;
| = Second Organizational Unit Name&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2.organizationalUnitName_default      &lt;br /&gt;
|= NIIF # ''For example: BME, ELTE, SZFKI, SZTAKI, NIIF, ...''&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|commonName                            &lt;br /&gt;
|= Common Name (YOUR name) # ''User Name.''&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|commonName_max                        &lt;br /&gt;
|= 64A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Create PKCS#10 reqquest&lt;br /&gt;
&lt;br /&gt;
:* No existing secret key:&lt;br /&gt;
Run the&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
    openssl req -newkey rsa:1024 -config ./niif_ca_user_openssl.cnf -out new_csr.pem &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
command, and answer the appearing questions at the prompt. The Institute (NIIF CA) and country (HU) datas should not be changed, or the request is going to be invalid. The certification request and the corresponding private key will be saved in the new_csr.pem and privkey.pem files. To gain acces to the private key, during the generating given &amp;quot;pass phrase&amp;quot; password must be used. In case of a forgotten password, the certificate will be unusable. &lt;br /&gt;
&lt;br /&gt;
:* Existing private key (extend)&lt;br /&gt;
&lt;br /&gt;
If there is an existing, previously generated private key (it must be at least a 1024 bit RSA key), which can be found in the old_key.pem file, then the following command creates the CSR&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    openssl req -new -key ./old_key.pem -config ./niif_ca_user_openssl.cnf -out new_csr.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Personal Authentication ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After the successful registration on the website, please visit the NIIF CA Registration Office personally with the copy of the pre-registration datasheet, the Request password and an ID document (ID card, passport).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Address:&lt;br /&gt;
&lt;br /&gt;
: NIIF Iroda &lt;br /&gt;
: (RA Administrator)&lt;br /&gt;
: Victor Hugo Str. 18-22.&lt;br /&gt;
: H-1132 Budapest, HUNGARY&lt;br /&gt;
: email: ca (at) niif (dot) hu&lt;br /&gt;
&lt;br /&gt;
: RA opening hours: Monday, 14:00 - 16:30 (CET)&lt;br /&gt;
&lt;br /&gt;
During the authentication, the colleagues of the Registration Office verify the datas of the certificate and the user, and after the successful identification, they take the next steps in order to create the certification (it is not needed to wait for it).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Downloading the certificate ===&lt;br /&gt;
&lt;br /&gt;
An email is going to arrive after the valid certificate has been completed (to the given email address during the request), and clicking on the URL in the email, the certificate can be downloaded. The saved certificate does not contain the private key.&lt;br /&gt;
&lt;br /&gt;
If the certificate is installed into the browser, it is advised to export it with the private key in PKCS#12 format, so there will be a common backup with the private key and the certificate. Handle this backup carefully! If the private key lost, or gets into unauthorized hands, immediately request a certificate cancellation at the registration interface &amp;quot;Tanúsítvány visszavonása&amp;quot; (certificate cancellation) or at the Registration Office, and inform the concerned people!&lt;br /&gt;
&lt;br /&gt;
== Access with GSI-SSH ==&lt;br /&gt;
  &lt;br /&gt;
A user can access to the supercomputers by using the GSI-SSH protocol.&lt;br /&gt;
  &lt;br /&gt;
It requires a machine with a Globus installation that provides the gsissh client.&lt;br /&gt;
  &lt;br /&gt;
The needed credentials (these mean the private and public keys) must be created before entering the machine with the &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    grid-proxy-init&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    arcproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
commands.&lt;br /&gt;
&lt;br /&gt;
By default, the proxies are valid for 12 hours.&lt;br /&gt;
It is possible to modify this default value with the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    arcproxy -c validityPeriod=86400&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    grid-proxy-init -hours 24&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both of the previous commands  set the validation of the proxies to 24 hours.&lt;br /&gt;
Using the arcproxy, the validation time must be given in seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To enter the site, the &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    gsissh -p 2222 prace-login.sc.niif.hu&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
command has to be used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GridFTP file transfer ==&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
In order to use GridFTP for file transfer, one needs a GridFTP client program that provides the interface between the user and a remote GridFTP server. There are several clients available for GridFTP, one of which is globus-url-copy, a command line tool which can transfer files using the GridFTP protocol as well as other protocols such as http and ftp. globus-url-copy is distributed with the Globus Toolkit and usually available on machines that have the Globus Toolkit installed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Syntax'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    globus-url-copy [options] sourceURL destinationURL&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
* [options] The optional command line switches as described later.&lt;br /&gt;
  &lt;br /&gt;
* sourceURL The URL of the file(s) to be copied. If it is a directory, it must end with a slash (/), and all files within that directory will be copied.&lt;br /&gt;
  &lt;br /&gt;
* destURL The URL to which to copy the file(s). To copy several files to one destination URL, destURL must be a directory and be terminated with a slash (/).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Globus-url-copy supports multiple protocols, so the format of the source and destination URLs can be either&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    file://path &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
when you refer to a local file or directory or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    protocol://host[:port]/path&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
when you refer to a remote file or directory. &lt;br /&gt;
&lt;br /&gt;
globus-url-copy is supporting other protocols such as http, https, ftp and gsiftp as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    globus-url-copy file://task/myfile.c gsiftp://prace-login.sc.niif.hu/home/prace/pr1hrocz/myfile.c &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command uploads the myfile.c file from the locak task folder to the remote machine's home/task folder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Command line options for globus-url-copy [options]'''&lt;br /&gt;
  &lt;br /&gt;
* -help Prints usage information for the globus-url-copy program.&lt;br /&gt;
* -version Prints the version of the globus-url-copy program.&lt;br /&gt;
* -vb During the transfer, displays: (1) number of bytes transferred (2) performance since the last update (every 5 seconds) (3) average performance for the whole transfer&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''The following table lists parameters which you can set to optimize the performance of your data transfer:'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* -tcp-bs &amp;lt;size&amp;gt;Specifies the size (in bytes) of the TCP buffer to be used by the underlying GridFTP data channels.&lt;br /&gt;
* -p &amp;lt;number of parallel streams&amp;gt; Specifies the number of parallel streams to be used in the GridFTP transfer.&lt;br /&gt;
* -stripe Use this parameter to initiate a “striped” GridFTP transfer that uses more than one node at the source and destination. As multiple nodes contribute to the transfer, each using its own network interface, a larger amount of the network bandwidth can be consumed than with a single system. Thus, at least for “big” (&amp;gt; 100 MB) files, striping can considerably improve performance.&lt;br /&gt;
&lt;br /&gt;
==Usage of the SLURM scheduler ==&lt;br /&gt;
Website: http://slurm.schedmd.com&lt;br /&gt;
&lt;br /&gt;
The schedule of the HPCs are CPU hour based. This means that the available core hours are divided between users on a monthly basis. All UNIX users are connected to one or more account. This scheduler account is connected to an HPC project and a UNIX group. HPC jobs can only be sent by using one of the accounts. The core hours are calculated by the multiplication of wall time (time spent running the job) and the CPU cores requested.&lt;br /&gt;
For example reserving 2 nodes (48 cpu cores) at the NIIFI SC for 30 minutes gives 48 * 30 = 1440 core minutes = 24 core hours. Core hours are measured between the start and and the end of the jobs.&lt;br /&gt;
&lt;br /&gt;
'''It is very important to be sure the application maximally uses the allocated resources. An empty or non-optimal job will consume allocated core time very fast. If the account run out of the allocated time, no new jobs can be submitted until the beginning of the next accounting period. Account limits are regenerated the beginning of each month.'''&lt;br /&gt;
&lt;br /&gt;
Information about an account can be listed with the following command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sbalance&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
After executing the command, the following table shows up for Bob. The user can access, and run jobs by using two different accounts (foobar, barfoo). He can see his name marked with * in the table. He shares both accounts with alice (Account column). The consumed core hours for the users are displayed in the second row (Usage), and the consumption for the jobs ran as the account is displayed in the 4th row. The last two row defines the allocated maximum time (Account limit), and the time available for the machine (Available).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
alice                0 |           foobar           0 |             0           0&lt;br /&gt;
bob *                0 |           foobar           0 |             0           0&lt;br /&gt;
&lt;br /&gt;
bob *                7 |           barfoo           7 |         1,000         993&lt;br /&gt;
alice                0 |           barfoo           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Estimating core time ===&lt;br /&gt;
Before production runs, it is advised to have a core time estimate. The following command can be used for getting estimate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; are the number of nodes to be reserved, &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; is the maximal time spent running the job.&lt;br /&gt;
&lt;br /&gt;
'''It is important to provide the core time to be reserved most precisely, because the scheduler queue the jobs based on this value. Generally, a job with shorter core time will be run sooner. It is advised to check the time used to run the job after completion with &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; command.'''&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
Alice want to reserve 2 days 10 hours and 2 nodes, she checks, if she have enough time on her account.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N 2 -t 2-10:00:00&lt;br /&gt;
&lt;br /&gt;
Estimated CPU hours: 2784&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unfortunately, she couldn't afford to run this job.&lt;br /&gt;
&lt;br /&gt;
=== Status information ===&lt;br /&gt;
&lt;br /&gt;
Jobs in the queue can be listed with &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt; command, the status of the cluster can be retrieved with the &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; command. All jobs sent will get a JOBID. The properties of a job can be retrieved by using this id. Status of a running or waiting job:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    scontrol show job JOBID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All jobs will be inserted into an accounting database. The properties of the completed jobs can be retrieved from this database. Detailed statistics can be viewed by using this command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Memory used can be retrieved by using&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    smemory JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disk usage can be retrieved by this command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sdisk JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
There are 3 jobs in the queue. The first is an array job which is waiting for resources (PENDING). The second is an MPI job running on 4 nodes for 25 minutes now. The third is an OMP run running on one node, just started. The NAME of the jobs can be freely given, it is advised to use short, informative names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    squeue -l&lt;br /&gt;
&lt;br /&gt;
Wed Oct 16 08:30:07 2013              &lt;br /&gt;
     JOBID PARTITION     NAME     USER    STATE       TIME TIMELIMIT  NODES NODELIST(REASON)&lt;br /&gt;
591_[1-96]    normal    array    alice  PENDING       0:00     30:00      1 (None)&lt;br /&gt;
       589    normal      mpi      bob  RUNNING      25:55   2:00:00      4 cn[05-08]&lt;br /&gt;
       590    normal      omp    alice  RUNNING       0:25   1:00:00      1 cn09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This two-node batch job had a typical load of 10GB virtual, and 6.5GB RSS memory per node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    smemory 430&lt;br /&gt;
&lt;br /&gt;
 MaxVMSize  MaxVMSizeNode  AveVMSize     MaxRSS MaxRSSNode     AveRSS&lt;br /&gt;
---------- -------------- ---------- ---------- ---------- ----------&lt;br /&gt;
10271792K           cn06  10271792K   6544524K       cn06   6544524K   &lt;br /&gt;
10085152K           cn07  10085152K   6538492K       cn07   6534876K &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking jobs ====&lt;br /&gt;
&lt;br /&gt;
It is important to be sure the application fully uses the core time reserved. A running application can be monitored with the following command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sjobcheck JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
&lt;br /&gt;
This job runs on 4 nodes. The LOAD group provides information about the general load of the machine, this is more or less equal to the number of cores. The CPU group gives you information about the exact usage. Ideally, values of the &amp;lt;code&amp;gt;User&amp;lt;/code&amp;gt; column are over 90. If the value is below that, there is a problem with the application, or it is not optimal, and the run should be ended. This example job fully using (&amp;quot;maxing out&amp;quot;) the available resources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hostname                     LOAD                       CPU              Gexec  &lt;br /&gt;
 CPUs (Procs/Total) [     1,     5, 15min] [  User,  Nice, System, Idle, Wio]&lt;br /&gt;
cn08    24 (   25/  529) [ 24.83, 24.84, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn07    24 (   25/  529) [ 24.93, 24.88, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn06    24 (   25/  529) [ 25.00, 24.90, 20.97] [  99.9,   0.0,   0.1,   0.0,   0.0] OFF&lt;br /&gt;
cn05    24 (   25/  544) [ 25.11, 24.96, 20.97] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking licenses ====&lt;br /&gt;
&lt;br /&gt;
The used and available licenses can be retrieved with this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    slicenses&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking downtime ====&lt;br /&gt;
&lt;br /&gt;
In downtime periods, the scheduler doesn't start new jobs, but jobs can be sent. The periods can be retrieved by using the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sreservations&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Running jobs ===&lt;br /&gt;
&lt;br /&gt;
Running applications in the HPC can be done in batch mode. This means all runs must have a job script containing the resources and commands needed. The parameters of the scheduler (resource definitions) can be given with the &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; directive. Comparison of the schedulers, and the directives available at slurm are available at this [http://slurm.schedmd.com/rosetta.pdf table].&lt;br /&gt;
&lt;br /&gt;
==== Obligatory parameters ====&lt;br /&gt;
The following parameters are obligatory to provide:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; is the name of the account to use (available accounts can be retrieved with the &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; command), &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; is the short name of the job, &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; is the maximum walltime using &amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt; syntax. &lt;br /&gt;
Acceptable time formats include &amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; and &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The following command submit jobs:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sbatch jobscript.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the submission was successful, the following is outputted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; is the unique id of the job&lt;br /&gt;
&lt;br /&gt;
The following commmand cancels the job:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    scancel JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Job queues ====&lt;br /&gt;
&lt;br /&gt;
There are two separate queue (partition) available in the HPC, the &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; queue and the &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt; queue. Tha latter is for the production runs, the former is for testing purposes. In the test queue, 1 node can be allocated for the maximum of half hours, The default queue is &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt;. Test partition can be chosen with the following directive:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Quality of Service (QoS) ====&lt;br /&gt;
&lt;br /&gt;
There is an option for submitting low priority jobs. These jobs can be interrupted by any normal priority job at any time, but only the half of the time is billed to the account. Interrupted jobs will be automatically queued again. Therefore it is important to only run jobs that can be interrupted at any time, periodically saves their states (checkpoint) and can restart quickly.&lt;br /&gt;
The default QoS is &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, non-interruptable.&lt;br /&gt;
&lt;br /&gt;
The following directive choses low priority:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memory settings ====&lt;br /&gt;
&lt;br /&gt;
1000 MB memory is allocated for 1 CPU core by default, more can be allocated with the following directive:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; is given in MB. The maximum memory/core at NIIFI SC is 2600 MB.&lt;br /&gt;
&lt;br /&gt;
==== Email notification ====&lt;br /&gt;
Sending mail when the status of the job change (start, stop, error):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; is the e-mail to notify.&lt;br /&gt;
&lt;br /&gt;
==== Array jobs ====&lt;br /&gt;
Array jobs are needed, when multiple one threaded (serial) jobs are to be sent (with different data). Slurm stores unique id of the instances in the &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; enviromnemt variable. It is possible to seperate threads of the array job by retrieving these ids. Output of the threads are written into &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; files. The scheduler uploads outputs tightly. It is useful to use multiply threads for a CPU core. [http://slurm.schedmd.com/job_array.html More on this topic]&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user submits 96 serial job for a maximum of 24 hour run. &lt;br /&gt;
on the expenses of 'foobar' account. The &amp;lt;code&amp;gt;#SBATCH --array=1-96&amp;lt;/code&amp;gt; directive indicates, that it is an array job. The application &lt;br /&gt;
can be run with the &amp;lt;code&amp;gt;srun&amp;lt;/code&amp;gt; command. This is a shell script in this example.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MPI jobs ====&lt;br /&gt;
Using MPI jobs, the number of MPI processes running on a node is to be given (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). The most frequent case is to provide the number of CPU cores. Parallel programs should be started by using &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Bob user allocates 2 nodes, 12 hour for an MPI job, billing 'barfoo' account. 24 MPI thread will be started on each node. The stdout output is piped to &amp;lt;code&amp;gt;slurm.out&amp;lt;/code&amp;gt; file (&amp;lt;code&amp;gt;#SBATCH -o&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CPU binding ====&lt;br /&gt;
Generally, the performance of MPI application can be optimized with CPU core binding. In this case, the threads of the paralel program won't be scheduled by the OS between the CPU cores, and the memory localization can be made better (less cache miss). It is advised to use memory binding. Tests can be run to define, what binding strategy gives the best performance for our application. The following settings are valid for OpenMPI environment. Further information on binding can be retrieved with &amp;lt;code&amp;gt;--report-bindings&amp;lt;/code&amp;gt; MPI option. Along with the running commands, few lines of the detailed binding information are shown. It is important, that one should not use task_binding of the scheduler!&lt;br /&gt;
&lt;br /&gt;
===== Binding per CPU core =====&lt;br /&gt;
In this case, MPI fills CPU cores by the order of threads (rank).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bycore&lt;br /&gt;
&lt;br /&gt;
[cn05:05493] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 1 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 2 bound to socket 0[core 2]: [. . B . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 3 bound to socket 0[core 3]: [. . . B . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Binding based on CPU socket =====&lt;br /&gt;
In this case, MPI threads are filling CPUs alternately.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bysocket&lt;br /&gt;
&lt;br /&gt;
[cn05:05659] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 1 bound to socket 1[core 0]: [. . . . . . . . . . . .][B . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 3 bound to socket 1[core 1]: [. . . . . . . . . . . .][. B . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Binding by nodes =====&lt;br /&gt;
In this case, MPI threads are filling nodes alternately. At least 2 nodes needs to be allocated.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bynode&lt;br /&gt;
&lt;br /&gt;
[cn05:05904] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05904] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 1 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 3 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) jobs ====&lt;br /&gt;
For OpenMP paralell applications, 1 node needs to be allocated, and the number of OMP threads needs to be provided with the &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; environment variable. The variable needs to be written before the application (see example), or needs to be exported before executing the command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  export OMP_NUM_THREADS=24&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user starts a 24 threaded OMP application for maximum 6 hours on the expenses of foobar account.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
OMP_NUM_THREADS=24 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hybrid MPI-OMP jobs ====&lt;br /&gt;
&lt;br /&gt;
When an application uses MPI and OMP it is running in hybrid MPI-OMP mode. Good to know that Intel MKL linked applications MKL calls are OpenMP capable. Generally, the following distribution suggested: MPI process number is from 1 to the CPU socket number, OMP thread number is the number of CPU cores in a node, or the half or quarter of that (it depends on code). For the job script, the parameters of these two needs to be combined.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user sent a hybrid job on the expenses of the 'foobar' account for 8 hours, and 2 nodes. 1 MPI process is running on one node using 24 OMP thread per node. For the 2 nodes, 2 MPI process is running, with 2x24 OMP threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=24&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid jobs ====&lt;br /&gt;
Maple can be run - similarly to OMP jobs - on one node. Maple module need to be loaded for using it. A grid server needs to be started, because Maple is working in client-server mode (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). This application needs to use license, which have to be given in the jobscript (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). Starting of a Maple job is done by using &lt;br /&gt;
&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; code.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user is running a Maple Grid application for 6 hours on the expenses of 'foobar' account:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GPU compute nodes ====&lt;br /&gt;
The Szeged site accomodates 2 GPU enabled compute nodes. Each GPU node has 6 Nvidia Tesla M2070 cards. The GPU nodes reside in a separate job queue (&amp;lt;code&amp;gt;--partition gpu&amp;lt;/code&amp;gt;). To specify the number of GPUs set &amp;lt;code&amp;gt;--gres gpu:#&amp;lt;/code&amp;gt; directive.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user submits to the foobar account a 4 GPU, 6 hour job.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=GPU&lt;br /&gt;
#SBATCH --partition gpu&lt;br /&gt;
#SBATCH --gres gpu:4&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
&lt;br /&gt;
$PWD/gpu_burnout 3600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
Extensions should be asked for at the Execution site (NIIF) at prace-support@niif.hu. All requests will be carefully reviewed and decided if eligable.&lt;br /&gt;
&lt;br /&gt;
== Reporting after finishing project ==&lt;br /&gt;
A report must be created after using PRACE resources. Please contact prace-support@niif.hu for further details.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgement in publications ==&lt;br /&gt;
PRACE&lt;br /&gt;
'''We acknowledge [PRACE/KIFÜ] for awarding us access to resource based in Hungary at [Budapest/Debrecen/Pécs/Szeged].'''&lt;br /&gt;
KIFÜ&lt;br /&gt;
'''We acknowledge KIFÜ for awarding us access to resource based in Hungary at [Budapest/Debrecen/Pécs/Szeged].'''&lt;br /&gt;
&lt;br /&gt;
Where technical support has been received the following additional text should also be used:&lt;br /&gt;
'''The support of [name of person/people] from KIFÜ, Hungary to the technical work is gratefully acknowledged.'''&lt;br /&gt;
&lt;br /&gt;
[[Category: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=PWS_upgrade&amp;diff=4420</id>
		<title>PWS upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=PWS_upgrade&amp;diff=4420"/>
				<updated>2019-07-12T06:54:16Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tisztelt Partnerünk!&lt;br /&gt;
&lt;br /&gt;
Webhosting szolgáltatásunk frissítésének befejező lépéseként 2019. augusztus 5-én 18 és 19 óra között átállítjuk kiszolgálóinkat a PHP 7.0 verzióját használó környezetre.&lt;br /&gt;
Az átállással kapcsolatban korábban küldött tájékoztató leveleinket az alábbiakban olvashatják.&lt;br /&gt;
&lt;br /&gt;
Üdvözlettel:&lt;br /&gt;
KIFÜ&lt;br /&gt;
Webhosting&lt;br /&gt;
&lt;br /&gt;
# [[level0509|A 2019. május 9-én kiküldött tájékoztató levél]]&lt;br /&gt;
# [[level0612|A 2019. június 12-én kiküldött tájékoztató levél]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=4388</id>
		<title>NIIF HPC (English)</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=4388"/>
				<updated>2018-10-25T13:26:08Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HPC|Magyar változat]]&lt;br /&gt;
== Supercomputing ==&lt;br /&gt;
NIIF Institute has been operating supercomputer since 2001. The service provides scientific computation and data storage facilities. The components of the supercomputing infrastructure found in five locations:&lt;br /&gt;
 &lt;br /&gt;
* NIIF centre Budapest&lt;br /&gt;
* University of Debrecen&lt;br /&gt;
* University of Pécs&lt;br /&gt;
* University of Szeged&lt;br /&gt;
* University of Miskolc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Various supercomputer architectures are available in different locations, because we need to support different types of scientific computing tasks. In order to support all kinds of scientific computational needs different computer architectures are available. We have cluster based supercomputers in three locations and two ccNUMA machine. The supercomputers are operated by NIIF Institute staff. The latest development tools and scientific applications are available for the users. The documentation of the supercomputers can be found here.&lt;br /&gt;
 &lt;br /&gt;
Any person or research group who has a contractual relationship with the NIIF Institute can use the service. Usage of the supercomputers is free for authorised users. New users should request a HPC project here. After the project is accepted invitations can be sent out for group members by the principal investigator. Invitations for the HPC portal can be managed [https://portal.hpc.niif.hu/ here].&lt;br /&gt;
&lt;br /&gt;
[http://hpc.niif.hu/index_en.php NIIF HPC website]&lt;br /&gt;
&lt;br /&gt;
==== NIIF HPC resources ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Location&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (LEO)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) ]]&lt;br /&gt;
| Pécs&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
|- &lt;br /&gt;
| Type&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memory / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memory / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
&lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi (KNC)&lt;br /&gt;
| -&lt;br /&gt;
| 14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
| 45 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack Performance (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute nodes&lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 45&lt;br /&gt;
| 1&lt;br /&gt;
&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedicated storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (combined with Phi)&lt;br /&gt;
| 585 TB (combined with GPU)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 6&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Contact ====&lt;br /&gt;
 &lt;br /&gt;
If you have any questions send email to the following address: hpc-support@niif.hu&lt;br /&gt;
 &lt;br /&gt;
Or contact the HPC users in Hungary on the following mailing list: hpc-forum@listserv.niif.hu, you can subscribe [https://listserv.niif.hu/mailman/listinfo/hpc-forum here].&lt;br /&gt;
&lt;br /&gt;
== More information ==&lt;br /&gt;
* [http://www.niif.hu/node/679 HPC information at NIIF.HU]&lt;br /&gt;
* [[HPC_software|List of Software installed on HPCs]]&lt;br /&gt;
&lt;br /&gt;
* [[PRACE_User_Support|User Support (PRACE, and general)]]&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Workshop / Tutorial]&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=4387</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=4387"/>
				<updated>2018-10-25T13:25:33Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|KIFÜ HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
A Kormányzati Informatikai Fejlesztési Ügynökség (KIFÜ) szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* KIFÜ központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket a KIFÜ nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert a KIFÜ üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll a KIFÜ-vel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF Program adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (Leo)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) ]] &lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 3.75 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi (KNC)&lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |45 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 45&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 5&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen3 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
* [https://wiki.niif.hu/index.php?title=HPC_felhasznaloi_alapelvek#Az_NIIF_Szupersz.C3.A1m.C3.ADt.C3.B3g.C3.A9p_Felhaszn.C3.A1l.C3.B3i_Szab.C3.A1lyzata Az NIIF Szuperszámítógép Felhasználói Szabályzata]&lt;br /&gt;
* [https://wiki.niif.hu/index.php?title=HPC_konyvtarak#El.C3.A9rhet.C5.91_f.C3.A1jlrendszerek_a_HPC_k.C3.B6zpontokban Elérhető fájlrendszerek a HPC központokban]&lt;br /&gt;
* [https://wiki.niif.hu/index.php?title=HPC_vizualizacio HPC vizualizációs infrastruktúra elérése]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Budapest2_klaszter&amp;diff=4058</id>
		<title>Budapest2 klaszter</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Budapest2_klaszter&amp;diff=4058"/>
				<updated>2017-03-15T10:33:26Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Klaszter&lt;br /&gt;
| Budapest2&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP SL250s&lt;br /&gt;
|- &lt;br /&gt;
| core / node&lt;br /&gt;
| 10 × 2 Xeon E5-2680v2 2.80GHz  &lt;br /&gt;
|- &lt;br /&gt;
| Intel Xeon Phi / node&lt;br /&gt;
| 2 × Intel(R) Xeon Phi(TM) MIC SE10/7120P&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok&lt;br /&gt;
| 14 db&lt;br /&gt;
|-&lt;br /&gt;
| Max Walltime&lt;br /&gt;
| 7-00:00:00&lt;br /&gt;
|-&lt;br /&gt;
| Max core-ok / projekt&lt;br /&gt;
| 140 (7db node)&lt;br /&gt;
|-&lt;br /&gt;
| Max mem / core&lt;br /&gt;
| 3000 MB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Belépés ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh USER@login.budapest2.hpc.niif.hu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nem alapértelmezett kulcs használata esetén a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval megadása szükséges (SSH és SCP parancsok).&lt;br /&gt;
&lt;br /&gt;
=== Fájlok másolása SCP-vel ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  scp FILE USER@login.budapest2.hpc.niif.hu:FILE&lt;br /&gt;
Le :  scp USER@login.budapest2.hpc.niif.hu:FILE FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatszinkronizáció ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  rsync -a -e ssh DIRECTORY USER@login.budapest2.hpc.niif.hu:/home/USER&lt;br /&gt;
Le :  rsync -a -e ssh USER@login.budapest2.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A törölt fájlok szinkronizálásához a &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt; opciót kell megadni.&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                     |&lt;br /&gt;
    BUDAPEST2[login] ~ (0)$&lt;br /&gt;
        |       |       |&lt;br /&gt;
   HPC állomás  |       |&lt;br /&gt;
         rövid gép név  |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rx $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Addott könyvtárat (DIRECTORY) írahtóvá:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rxw $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A kiterjesztett jogokat a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getfacl $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== Intel Xeon Phi használata ==&lt;br /&gt;
&lt;br /&gt;
* [[Intel_Xeon_Phi |Részletes]] használati és alkalmazás optimalizációs leírás&lt;br /&gt;
* [http://software.intel.com/en-us/mic-developer Itt] található az Intel hivatalos dokumentációja ezzel kapcsolatban&lt;br /&gt;
* [https://software.intel.com/en-us/xeonphionlinecatalog Itt] található az Intel által hivatalosan támogatott alkalmazások listája&lt;br /&gt;
* [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Itt] tájékozódhatnak az Intel matematikai könyvtárainak a linkeléséről&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még elérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
bob *                7 |           foobar           7 |         1,000         993&lt;br /&gt;
alice                0 |           foobar           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csökkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Intel Xeon Phi-k lefoglalása ====&lt;br /&gt;
A Intel Xeon Phi-k lefoglalása a következő direktívával történik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=mic:N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; az Intel Xeon Phi-k/node számát adja meg, ami 1 és 2 lehet maximum.&lt;br /&gt;
&lt;br /&gt;
==== Job-ok indítása ====&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch slurm.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; sor és a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt; sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt;. A teszt partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. A maximális memória/core 3000 MB lehet.&lt;br /&gt;
&lt;br /&gt;
Amennyiben a szálaknak 4GB-nál több virtuális memóriára van szükségük, akkor az indítandó program elé a következő parancsot is el kell helyezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ulimit -v unlimited&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Soros (serial) jobok ====&lt;br /&gt;
Több soros job futtatását a tömbfeladatokhoz hasonlóan kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=serial&lt;br /&gt;
#SBATCH --time=24:30:00&lt;br /&gt;
#SBATCH -n 3&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
srun -n 1 program input1 &amp;amp;&lt;br /&gt;
srun -n 1 program input2 &amp;amp;&lt;br /&gt;
srun -n 1 program input3&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IntelMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=20&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
&lt;br /&gt;
mpirun PROGRAM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenMPI FAQ: http://www.open-mpi.org/faq&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=10&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 10 CPU core-t rendeltunk, a 10 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 10 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=10&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 10 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 10 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=10&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=3965</id>
		<title>NIIF HPC (English)</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=3965"/>
				<updated>2016-10-11T13:28:17Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HPC|Magyar változat]]&lt;br /&gt;
== Supercomputing ==&lt;br /&gt;
NIIF Institute has been operating supercomputer since 2001. The service provides scientific computation and data storage facilities. The components of the supercomputing infrastructure found in five locations:&lt;br /&gt;
 &lt;br /&gt;
* NIIF centre Budapest&lt;br /&gt;
* University of Debrecen&lt;br /&gt;
* University of Pécs&lt;br /&gt;
* University of Szeged&lt;br /&gt;
* University of Miskolc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Various supercomputer architectures are available in different locations, because we need to support different types of scientific computing tasks. In order to support all kinds of scientific computational needs different computer architectures are available. We have cluster based supercomputers in three locations and two ccNUMA machine. The supercomputers are operated by NIIF Institute staff. The latest development tools and scientific applications are available for the users. The documentation of the supercomputers can be found here.&lt;br /&gt;
 &lt;br /&gt;
Any person or research group who has a contractual relationship with the NIIF Institute can use the service. Usage of the supercomputers is free for authorised users. New users should request a HPC project here. After the project is accepted invitations can be sent out for group members by the principal investigator. Invitations for the HPC portal can be managed [https://portal.hpc.niif.hu/ here].&lt;br /&gt;
&lt;br /&gt;
[http://hpc.niif.hu/index_en.php NIIF HPC website]&lt;br /&gt;
&lt;br /&gt;
==== NIIF HPC resources ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Location&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (LEO)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) (test phase)]]&lt;br /&gt;
| Pécs&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (test phase)&lt;br /&gt;
|- &lt;br /&gt;
| Type&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memory / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memory / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
&lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| 14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
| 45 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack Performance (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute nodes&lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 45&lt;br /&gt;
| 1&lt;br /&gt;
&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedicated storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (combined with Phi)&lt;br /&gt;
| 585 TB (combined with GPU)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 6&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Contact ====&lt;br /&gt;
 &lt;br /&gt;
If you have any questions send email to the following address: hpc-support@niif.hu&lt;br /&gt;
 &lt;br /&gt;
Or contact the HPC users in Hungary on the following mailing list: hpc-forum@listserv.niif.hu, you can subscribe [https://listserv.niif.hu/mailman/listinfo/hpc-forum here].&lt;br /&gt;
&lt;br /&gt;
== More information ==&lt;br /&gt;
* [http://www.niif.hu/node/679 HPC information at NIIF.HU]&lt;br /&gt;
* [[HPC_software|List of Software installed on HPCs]]&lt;br /&gt;
&lt;br /&gt;
* [[PRACE_User_Support|User Support (PRACE, and general)]]&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Workshop / Tutorial]&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=3964</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=3964"/>
				<updated>2016-10-11T13:27:54Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|NIIF HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* NIIFI központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (Leo)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) (tesztüzem)]] &lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (tesztüzem)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5,2 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |45 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 45&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 5&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen3 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Using_SLURM_scheduler&amp;diff=3958</id>
		<title>Using SLURM scheduler</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Using_SLURM_scheduler&amp;diff=3958"/>
				<updated>2016-09-15T13:41:04Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Acknowledgement in publications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Usage of the SLURM scheduler ==&lt;br /&gt;
Website: http://slurm.schedmd.com&lt;br /&gt;
&lt;br /&gt;
The schedule of the HPCs are CPU hour based. This means that the available core hours are divided between users on a monthly basis. All UNIX users are connected to one or more account. This scheduler account is connected to an HPC project and a UNIX group. HPC jobs can only be sent by using one of the accounts. The core hours are calculated by the multiplication of wall time (time spent running the job) and the CPU cores requested.&lt;br /&gt;
For example reserving 2 nodes (48 cpu cores) at the NIIFI SC for 30 minutes gives 48 * 30 = 1440 core minutes = 24 core hours. Core hours are measured between the start and and the end of the jobs.&lt;br /&gt;
&lt;br /&gt;
'''It is very important to be sure the application maximally uses the allocated resources. An empty or non-optimal job will consume allocated core time very fast. If the account run out of the allocated time, no new jobs can be submitted until the beginning of the next accounting period. Account limits are regenerated the beginning of each month.'''&lt;br /&gt;
&lt;br /&gt;
Information about an account can be listed with the following command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sbalance&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
After executing the command, the following table shows up for Bob. The user can access, and run jobs by using two different accounts (foobar, barfoo). He can see his name marked with * in the table. He shares both accounts with alice (Account column). The consumed core hours for the users are displayed in the second row (Usage), and the consumption for the jobs ran as the account is displayed in the 4th row. The last two row defines the allocated maximum time (Account limit), and the time available for the machine (Available).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
alice                0 |           foobar           0 |             0           0&lt;br /&gt;
bob *                0 |           foobar           0 |             0           0&lt;br /&gt;
&lt;br /&gt;
bob *                7 |           barfoo           7 |         1,000         993&lt;br /&gt;
alice                0 |           barfoo           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Estimating core time ===&lt;br /&gt;
Before production runs, it is advised to have a core time estimate. The following command can be used for getting estimate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; are the number of nodes to be reserved, &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; is the maximal time spent running the job.&lt;br /&gt;
&lt;br /&gt;
'''It is important to provide the core time to be reserved most precisely, because the scheduler queue the jobs based on this value. Generally, a job with shorter core time will be run sooner. It is advised to check the time used to run the job after completion with &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; command.'''&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
Alice want to reserve 2 days 10 hours and 2 nodes, she checks, if she have enough time on her account.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N 2 -t 2-10:00:00&lt;br /&gt;
&lt;br /&gt;
Estimated CPU hours: 2784&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unfortunately, she couldn't afford to run this job.&lt;br /&gt;
&lt;br /&gt;
=== Status information ===&lt;br /&gt;
&lt;br /&gt;
Jobs in the queue can be listed with &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt; command, the status of the cluster can be retrieved with the &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; command. All jobs sent will get a JOBID. The properties of a job can be retrieved by using this id. Status of a running or waiting job:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    scontrol show job JOBID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All jobs will be inserted into an accounting database. The properties of the completed jobs can be retrieved from this database. Detailed statistics can be viewed by using this command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Memory used can be retrieved by using&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    smemory JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disk usage can be retrieved by this command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sdisk JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
There are 3 jobs in the queue. The first is an array job which is waiting for resources (PENDING). The second is an MPI job running on 4 nodes for 25 minutes now. The third is an OMP run running on one node, just started. The NAME of the jobs can be freely given, it is advised to use short, informative names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    squeue -l&lt;br /&gt;
&lt;br /&gt;
Wed Oct 16 08:30:07 2013              &lt;br /&gt;
     JOBID PARTITION     NAME     USER    STATE       TIME TIMELIMIT  NODES NODELIST(REASON)&lt;br /&gt;
591_[1-96]    normal    array    alice  PENDING       0:00     30:00      1 (None)&lt;br /&gt;
       589    normal      mpi      bob  RUNNING      25:55   2:00:00      4 cn[05-08]&lt;br /&gt;
       590    normal      omp    alice  RUNNING       0:25   1:00:00      1 cn09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This two-node batch job had a typical load of 10GB virtual, and 6.5GB RSS memory per node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    smemory 430&lt;br /&gt;
&lt;br /&gt;
 MaxVMSize  MaxVMSizeNode  AveVMSize     MaxRSS MaxRSSNode     AveRSS&lt;br /&gt;
---------- -------------- ---------- ---------- ---------- ----------&lt;br /&gt;
10271792K           cn06  10271792K   6544524K       cn06   6544524K   &lt;br /&gt;
10085152K           cn07  10085152K   6538492K       cn07   6534876K &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking jobs ====&lt;br /&gt;
&lt;br /&gt;
It is important to be sure the application fully uses the core time reserved. A running application can be monitored with the following command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sjobcheck JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
&lt;br /&gt;
This job runs on 4 nodes. The LOAD group provides information about the general load of the machine, this is more or less equal to the number of cores. The CPU group gives you information about the exact usage. Ideally, values of the &amp;lt;code&amp;gt;User&amp;lt;/code&amp;gt; column are over 90. If the value is below that, there is a problem with the application, or it is not optimal, and the run should be ended. This example job fully using (&amp;quot;maxing out&amp;quot;) the available resources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hostname                     LOAD                       CPU              Gexec  &lt;br /&gt;
 CPUs (Procs/Total) [     1,     5, 15min] [  User,  Nice, System, Idle, Wio]&lt;br /&gt;
cn08    24 (   25/  529) [ 24.83, 24.84, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn07    24 (   25/  529) [ 24.93, 24.88, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn06    24 (   25/  529) [ 25.00, 24.90, 20.97] [  99.9,   0.0,   0.1,   0.0,   0.0] OFF&lt;br /&gt;
cn05    24 (   25/  544) [ 25.11, 24.96, 20.97] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking licenses ====&lt;br /&gt;
&lt;br /&gt;
The used and available licenses can be retrieved with this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    slicenses&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking downtime ====&lt;br /&gt;
&lt;br /&gt;
In downtime periods, the scheduler doesn't start new jobs, but jobs can be sent. The periods can be retrieved by using the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sreservations&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Running jobs ===&lt;br /&gt;
&lt;br /&gt;
Running applications in the HPC can be done in batch mode. This means all runs must have a job script containing the resources and commands needed. The parameters of the scheduler (resource definitions) can be given with the &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; directive. Comparison of the schedulers, and the directives available at slurm are available at this [http://slurm.schedmd.com/rosetta.pdf table].&lt;br /&gt;
&lt;br /&gt;
==== Obligatory parameters ====&lt;br /&gt;
The following parameters are obligatory to provide:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; is the name of the account to use (available accounts can be retrieved with the &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; command), &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; is the short name of the job, &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; is the maximum walltime using &amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt; syntax. &lt;br /&gt;
Acceptable time formats include &amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; and &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The following command submit jobs:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sbatch jobscript.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the submission was successful, the following is outputted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; is the unique id of the job&lt;br /&gt;
&lt;br /&gt;
The following commmand cancels the job:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    scancel JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Job queues ====&lt;br /&gt;
&lt;br /&gt;
There are two separate queue (partition) available in the HPC, the &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; queue and the &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt; queue. Tha latter is for the production runs, the former is for testing purposes. In the test queue, 1 node can be allocated for the maximum of half hours, The default queue is &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt;. Test partition can be chosen with the following directive:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Quality of Service (QoS) ====&lt;br /&gt;
&lt;br /&gt;
There is an option for submitting low priority jobs. These jobs can be interrupted by any normal priority job at any time, but only the half of the time is billed to the account. Interrupted jobs will be automatically queued again. Therefore it is important to only run jobs that can be interrupted at any time, periodically saves their states (checkpoint) and can restart quickly.&lt;br /&gt;
The default QoS is &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, non-interruptable.&lt;br /&gt;
&lt;br /&gt;
The following directive choses low priority:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memory settings ====&lt;br /&gt;
&lt;br /&gt;
1000 MB memory is allocated for 1 CPU core by default, more can be allocated with the following directive:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; is given in MB. The maximum memory/core at NIIFI SC is 2600 MB.&lt;br /&gt;
&lt;br /&gt;
==== Email notification ====&lt;br /&gt;
Sending mail when the status of the job change (start, stop, error):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; is the e-mail to notify.&lt;br /&gt;
&lt;br /&gt;
==== Array jobs ====&lt;br /&gt;
Array jobs are needed, when multiple one threaded (serial) jobs are to be sent (with different data). Slurm stores unique id of the instances in the &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; enviromnemt variable. It is possible to seperate threads of the array job by retrieving these ids. Output of the threads are written into &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; files. The scheduler uploads outputs tightly. It is useful to use multiply threads for a CPU core. [http://slurm.schedmd.com/job_array.html More on this topic]&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user submits 96 serial job for a maximum of 24 hour run. &lt;br /&gt;
on the expenses of 'foobar' account. The &amp;lt;code&amp;gt;#SBATCH --array=1-96&amp;lt;/code&amp;gt; directive indicates, that it is an array job. The application &lt;br /&gt;
can be run with the &amp;lt;code&amp;gt;srun&amp;lt;/code&amp;gt; command. This is a shell script in this example.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MPI jobs ====&lt;br /&gt;
Using MPI jobs, the number of MPI processes running on a node is to be given (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). The most frequent case is to provide the number of CPU cores. Parallel programs should be started by using &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Bob user allocates 2 nodes, 12 hour for an MPI job, billing 'barfoo' account. 24 MPI thread will be started on each node. The stdout output is piped to &amp;lt;code&amp;gt;slurm.out&amp;lt;/code&amp;gt; file (&amp;lt;code&amp;gt;#SBATCH -o&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CPU binding ====&lt;br /&gt;
Generally, the performance of MPI application can be optimized with CPU core binding. In this case, the threads of the paralel program won't be scheduled by the OS between the CPU cores, and the memory localization can be made better (less cache miss). It is advised to use memory binding. Tests can be run to define, what binding strategy gives the best performance for our application. The following settings are valid for OpenMPI environment. Further information on binding can be retrieved with &amp;lt;code&amp;gt;--report-bindings&amp;lt;/code&amp;gt; MPI option. Along with the running commands, few lines of the detailed binding information are shown. It is important, that one should not use task_binding of the scheduler!&lt;br /&gt;
&lt;br /&gt;
===== Binding per CPU core =====&lt;br /&gt;
In this case, MPI fills CPU cores by the order of threads (rank).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bycore&lt;br /&gt;
&lt;br /&gt;
[cn05:05493] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 1 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 2 bound to socket 0[core 2]: [. . B . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 3 bound to socket 0[core 3]: [. . . B . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Binding based on CPU socket =====&lt;br /&gt;
In this case, MPI threads are filling CPUs alternately.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bysocket&lt;br /&gt;
&lt;br /&gt;
[cn05:05659] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 1 bound to socket 1[core 0]: [. . . . . . . . . . . .][B . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 3 bound to socket 1[core 1]: [. . . . . . . . . . . .][. B . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Binding by nodes =====&lt;br /&gt;
In this case, MPI threads are filling nodes alternately. At least 2 nodes needs to be allocated.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bynode&lt;br /&gt;
&lt;br /&gt;
[cn05:05904] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05904] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 1 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 3 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) jobs ====&lt;br /&gt;
For OpenMP paralell applications, 1 node needs to be allocated, and the number of OMP threads needs to be provided with the &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; environment variable. The variable needs to be written before the application (see example), or needs to be exported before executing the command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  export OMP_NUM_THREADS=24&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user starts a 24 threaded OMP application for maximum 6 hours on the expenses of foobar account.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
OMP_NUM_THREADS=24 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hybrid MPI-OMP jobs ====&lt;br /&gt;
&lt;br /&gt;
When an application uses MPI and OMP it is running in hybrid MPI-OMP mode. Good to know that Intel MKL linked applications MKL calls are OpenMP capable. Generally, the following distribution suggested: MPI process number is from 1 to the CPU socket number, OMP thread number is the number of CPU cores in a node, or the half or quarter of that (it depends on code). For the job script, the parameters of these two needs to be combined.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user sent a hybrid job on the expenses of the 'foobar' account for 8 hours, and 2 nodes. 1 MPI process is running on one node using 24 OMP thread per node. For the 2 nodes, 2 MPI process is running, with 2x24 OMP threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=24&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid jobs ====&lt;br /&gt;
Maple can be run - similarly to OMP jobs - on one node. Maple module need to be loaded for using it. A grid server needs to be started, because Maple is working in client-server mode (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). This application needs to use license, which have to be given in the jobscript (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). Starting of a Maple job is done by using &lt;br /&gt;
&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; code.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user is running a Maple Grid application for 6 hours on the expenses of 'foobar' account:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GPU compute nodes ====&lt;br /&gt;
The Szeged site accomodates 2 GPU enabled compute nodes. Each GPU node has 6 Nvidia Tesla M2070 cards. The GPU nodes reside in a separate job queue (&amp;lt;code&amp;gt;--partition gpu&amp;lt;/code&amp;gt;). To specify the number of GPUs set &amp;lt;code&amp;gt;--gres gpu:#&amp;lt;/code&amp;gt; directive.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user submits to the foobar account a 4 GPU, 6 hour job.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=GPU&lt;br /&gt;
#SBATCH --partition gpu&lt;br /&gt;
#SBATCH --gres gpu:4&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
&lt;br /&gt;
$PWD/gpu_burnout 3600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
Extensions should be asked for at the Execution site (NIIF) at prace-support@niif.hu. All requests will be carefully reviewed and decided if eligable.&lt;br /&gt;
&lt;br /&gt;
== Reporting after finishing project ==&lt;br /&gt;
A report must be created after using PRACE resources. Please contact prace-support@niif.hu for further details.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgement in publications ==&lt;br /&gt;
&lt;br /&gt;
'''We acknowledge [NIIF] for awarding us access to resource based in Hungary at [Budapest/Debrecen/Pécs/Szeged].'''&lt;br /&gt;
Where technical support has been received the following additional text should also be used:&lt;br /&gt;
'''The support of [name of person/people] from NIIF Institute, Hungary to the technical work is gratefully acknowledged.'''&lt;br /&gt;
&lt;br /&gt;
[[Category: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Using_SLURM_scheduler&amp;diff=3957</id>
		<title>Using SLURM scheduler</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Using_SLURM_scheduler&amp;diff=3957"/>
				<updated>2016-09-15T13:40:08Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: Új oldal, tartalma: „==Usage of the SLURM scheduler == Website: http://slurm.schedmd.com  The schedule of the HPCs are CPU hour based. This means that the available core hours are divided b…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Usage of the SLURM scheduler ==&lt;br /&gt;
Website: http://slurm.schedmd.com&lt;br /&gt;
&lt;br /&gt;
The schedule of the HPCs are CPU hour based. This means that the available core hours are divided between users on a monthly basis. All UNIX users are connected to one or more account. This scheduler account is connected to an HPC project and a UNIX group. HPC jobs can only be sent by using one of the accounts. The core hours are calculated by the multiplication of wall time (time spent running the job) and the CPU cores requested.&lt;br /&gt;
For example reserving 2 nodes (48 cpu cores) at the NIIFI SC for 30 minutes gives 48 * 30 = 1440 core minutes = 24 core hours. Core hours are measured between the start and and the end of the jobs.&lt;br /&gt;
&lt;br /&gt;
'''It is very important to be sure the application maximally uses the allocated resources. An empty or non-optimal job will consume allocated core time very fast. If the account run out of the allocated time, no new jobs can be submitted until the beginning of the next accounting period. Account limits are regenerated the beginning of each month.'''&lt;br /&gt;
&lt;br /&gt;
Information about an account can be listed with the following command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sbalance&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
After executing the command, the following table shows up for Bob. The user can access, and run jobs by using two different accounts (foobar, barfoo). He can see his name marked with * in the table. He shares both accounts with alice (Account column). The consumed core hours for the users are displayed in the second row (Usage), and the consumption for the jobs ran as the account is displayed in the 4th row. The last two row defines the allocated maximum time (Account limit), and the time available for the machine (Available).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
alice                0 |           foobar           0 |             0           0&lt;br /&gt;
bob *                0 |           foobar           0 |             0           0&lt;br /&gt;
&lt;br /&gt;
bob *                7 |           barfoo           7 |         1,000         993&lt;br /&gt;
alice                0 |           barfoo           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Estimating core time ===&lt;br /&gt;
Before production runs, it is advised to have a core time estimate. The following command can be used for getting estimate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; are the number of nodes to be reserved, &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; is the maximal time spent running the job.&lt;br /&gt;
&lt;br /&gt;
'''It is important to provide the core time to be reserved most precisely, because the scheduler queue the jobs based on this value. Generally, a job with shorter core time will be run sooner. It is advised to check the time used to run the job after completion with &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; command.'''&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
Alice want to reserve 2 days 10 hours and 2 nodes, she checks, if she have enough time on her account.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N 2 -t 2-10:00:00&lt;br /&gt;
&lt;br /&gt;
Estimated CPU hours: 2784&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unfortunately, she couldn't afford to run this job.&lt;br /&gt;
&lt;br /&gt;
=== Status information ===&lt;br /&gt;
&lt;br /&gt;
Jobs in the queue can be listed with &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt; command, the status of the cluster can be retrieved with the &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; command. All jobs sent will get a JOBID. The properties of a job can be retrieved by using this id. Status of a running or waiting job:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    scontrol show job JOBID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All jobs will be inserted into an accounting database. The properties of the completed jobs can be retrieved from this database. Detailed statistics can be viewed by using this command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Memory used can be retrieved by using&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    smemory JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disk usage can be retrieved by this command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sdisk JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
There are 3 jobs in the queue. The first is an array job which is waiting for resources (PENDING). The second is an MPI job running on 4 nodes for 25 minutes now. The third is an OMP run running on one node, just started. The NAME of the jobs can be freely given, it is advised to use short, informative names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    squeue -l&lt;br /&gt;
&lt;br /&gt;
Wed Oct 16 08:30:07 2013              &lt;br /&gt;
     JOBID PARTITION     NAME     USER    STATE       TIME TIMELIMIT  NODES NODELIST(REASON)&lt;br /&gt;
591_[1-96]    normal    array    alice  PENDING       0:00     30:00      1 (None)&lt;br /&gt;
       589    normal      mpi      bob  RUNNING      25:55   2:00:00      4 cn[05-08]&lt;br /&gt;
       590    normal      omp    alice  RUNNING       0:25   1:00:00      1 cn09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This two-node batch job had a typical load of 10GB virtual, and 6.5GB RSS memory per node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    smemory 430&lt;br /&gt;
&lt;br /&gt;
 MaxVMSize  MaxVMSizeNode  AveVMSize     MaxRSS MaxRSSNode     AveRSS&lt;br /&gt;
---------- -------------- ---------- ---------- ---------- ----------&lt;br /&gt;
10271792K           cn06  10271792K   6544524K       cn06   6544524K   &lt;br /&gt;
10085152K           cn07  10085152K   6538492K       cn07   6534876K &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking jobs ====&lt;br /&gt;
&lt;br /&gt;
It is important to be sure the application fully uses the core time reserved. A running application can be monitored with the following command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sjobcheck JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
&lt;br /&gt;
This job runs on 4 nodes. The LOAD group provides information about the general load of the machine, this is more or less equal to the number of cores. The CPU group gives you information about the exact usage. Ideally, values of the &amp;lt;code&amp;gt;User&amp;lt;/code&amp;gt; column are over 90. If the value is below that, there is a problem with the application, or it is not optimal, and the run should be ended. This example job fully using (&amp;quot;maxing out&amp;quot;) the available resources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hostname                     LOAD                       CPU              Gexec  &lt;br /&gt;
 CPUs (Procs/Total) [     1,     5, 15min] [  User,  Nice, System, Idle, Wio]&lt;br /&gt;
cn08    24 (   25/  529) [ 24.83, 24.84, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn07    24 (   25/  529) [ 24.93, 24.88, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
cn06    24 (   25/  529) [ 25.00, 24.90, 20.97] [  99.9,   0.0,   0.1,   0.0,   0.0] OFF&lt;br /&gt;
cn05    24 (   25/  544) [ 25.11, 24.96, 20.97] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking licenses ====&lt;br /&gt;
&lt;br /&gt;
The used and available licenses can be retrieved with this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    slicenses&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checking downtime ====&lt;br /&gt;
&lt;br /&gt;
In downtime periods, the scheduler doesn't start new jobs, but jobs can be sent. The periods can be retrieved by using the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sreservations&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Running jobs ===&lt;br /&gt;
&lt;br /&gt;
Running applications in the HPC can be done in batch mode. This means all runs must have a job script containing the resources and commands needed. The parameters of the scheduler (resource definitions) can be given with the &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; directive. Comparison of the schedulers, and the directives available at slurm are available at this [http://slurm.schedmd.com/rosetta.pdf table].&lt;br /&gt;
&lt;br /&gt;
==== Obligatory parameters ====&lt;br /&gt;
The following parameters are obligatory to provide:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; is the name of the account to use (available accounts can be retrieved with the &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; command), &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; is the short name of the job, &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; is the maximum walltime using &amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt; syntax. &lt;br /&gt;
Acceptable time formats include &amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; and &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The following command submit jobs:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    sbatch jobscript.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the submission was successful, the following is outputted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; is the unique id of the job&lt;br /&gt;
&lt;br /&gt;
The following commmand cancels the job:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    scancel JOBID&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Job queues ====&lt;br /&gt;
&lt;br /&gt;
There are two separate queue (partition) available in the HPC, the &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; queue and the &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt; queue. Tha latter is for the production runs, the former is for testing purposes. In the test queue, 1 node can be allocated for the maximum of half hours, The default queue is &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt;. Test partition can be chosen with the following directive:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Quality of Service (QoS) ====&lt;br /&gt;
&lt;br /&gt;
There is an option for submitting low priority jobs. These jobs can be interrupted by any normal priority job at any time, but only the half of the time is billed to the account. Interrupted jobs will be automatically queued again. Therefore it is important to only run jobs that can be interrupted at any time, periodically saves their states (checkpoint) and can restart quickly.&lt;br /&gt;
The default QoS is &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, non-interruptable.&lt;br /&gt;
&lt;br /&gt;
The following directive choses low priority:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memory settings ====&lt;br /&gt;
&lt;br /&gt;
1000 MB memory is allocated for 1 CPU core by default, more can be allocated with the following directive:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; is given in MB. The maximum memory/core at NIIFI SC is 2600 MB.&lt;br /&gt;
&lt;br /&gt;
==== Email notification ====&lt;br /&gt;
Sending mail when the status of the job change (start, stop, error):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; is the e-mail to notify.&lt;br /&gt;
&lt;br /&gt;
==== Array jobs ====&lt;br /&gt;
Array jobs are needed, when multiple one threaded (serial) jobs are to be sent (with different data). Slurm stores unique id of the instances in the &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; enviromnemt variable. It is possible to seperate threads of the array job by retrieving these ids. Output of the threads are written into &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; files. The scheduler uploads outputs tightly. It is useful to use multiply threads for a CPU core. [http://slurm.schedmd.com/job_array.html More on this topic]&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user submits 96 serial job for a maximum of 24 hour run. &lt;br /&gt;
on the expenses of 'foobar' account. The &amp;lt;code&amp;gt;#SBATCH --array=1-96&amp;lt;/code&amp;gt; directive indicates, that it is an array job. The application &lt;br /&gt;
can be run with the &amp;lt;code&amp;gt;srun&amp;lt;/code&amp;gt; command. This is a shell script in this example.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MPI jobs ====&lt;br /&gt;
Using MPI jobs, the number of MPI processes running on a node is to be given (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). The most frequent case is to provide the number of CPU cores. Parallel programs should be started by using &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Bob user allocates 2 nodes, 12 hour for an MPI job, billing 'barfoo' account. 24 MPI thread will be started on each node. The stdout output is piped to &amp;lt;code&amp;gt;slurm.out&amp;lt;/code&amp;gt; file (&amp;lt;code&amp;gt;#SBATCH -o&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A barfoo&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CPU binding ====&lt;br /&gt;
Generally, the performance of MPI application can be optimized with CPU core binding. In this case, the threads of the paralel program won't be scheduled by the OS between the CPU cores, and the memory localization can be made better (less cache miss). It is advised to use memory binding. Tests can be run to define, what binding strategy gives the best performance for our application. The following settings are valid for OpenMPI environment. Further information on binding can be retrieved with &amp;lt;code&amp;gt;--report-bindings&amp;lt;/code&amp;gt; MPI option. Along with the running commands, few lines of the detailed binding information are shown. It is important, that one should not use task_binding of the scheduler!&lt;br /&gt;
&lt;br /&gt;
===== Binding per CPU core =====&lt;br /&gt;
In this case, MPI fills CPU cores by the order of threads (rank).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bycore&lt;br /&gt;
&lt;br /&gt;
[cn05:05493] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 1 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 2 bound to socket 0[core 2]: [. . B . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05493] MCW rank 3 bound to socket 0[core 3]: [. . . B . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Binding based on CPU socket =====&lt;br /&gt;
In this case, MPI threads are filling CPUs alternately.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bysocket&lt;br /&gt;
&lt;br /&gt;
[cn05:05659] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 1 bound to socket 1[core 0]: [. . . . . . . . . . . .][B . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05659] MCW rank 3 bound to socket 1[core 1]: [. . . . . . . . . . . .][. B . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Binding by nodes =====&lt;br /&gt;
In this case, MPI threads are filling nodes alternately. At least 2 nodes needs to be allocated.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Command to run: mpirun --bind-to-core --bynode&lt;br /&gt;
&lt;br /&gt;
[cn05:05904] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn05:05904] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 1 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
[cn06:05969] MCW rank 3 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) jobs ====&lt;br /&gt;
For OpenMP paralell applications, 1 node needs to be allocated, and the number of OMP threads needs to be provided with the &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; environment variable. The variable needs to be written before the application (see example), or needs to be exported before executing the command:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  export OMP_NUM_THREADS=24&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user starts a 24 threaded OMP application for maximum 6 hours on the expenses of foobar account.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
OMP_NUM_THREADS=24 ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hybrid MPI-OMP jobs ====&lt;br /&gt;
&lt;br /&gt;
When an application uses MPI and OMP it is running in hybrid MPI-OMP mode. Good to know that Intel MKL linked applications MKL calls are OpenMP capable. Generally, the following distribution suggested: MPI process number is from 1 to the CPU socket number, OMP thread number is the number of CPU cores in a node, or the half or quarter of that (it depends on code). For the job script, the parameters of these two needs to be combined.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user sent a hybrid job on the expenses of the 'foobar' account for 8 hours, and 2 nodes. 1 MPI process is running on one node using 24 OMP thread per node. For the 2 nodes, 2 MPI process is running, with 2x24 OMP threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=24&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid jobs ====&lt;br /&gt;
Maple can be run - similarly to OMP jobs - on one node. Maple module need to be loaded for using it. A grid server needs to be started, because Maple is working in client-server mode (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). This application needs to use license, which have to be given in the jobscript (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). Starting of a Maple job is done by using &lt;br /&gt;
&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; code.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user is running a Maple Grid application for 6 hours on the expenses of 'foobar' account:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=24&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GPU compute nodes ====&lt;br /&gt;
The Szeged site accomodates 2 GPU enabled compute nodes. Each GPU node has 6 Nvidia Tesla M2070 cards. The GPU nodes reside in a separate job queue (&amp;lt;code&amp;gt;--partition gpu&amp;lt;/code&amp;gt;). To specify the number of GPUs set &amp;lt;code&amp;gt;--gres gpu:#&amp;lt;/code&amp;gt; directive.&lt;br /&gt;
&lt;br /&gt;
===== Example =====&lt;br /&gt;
Alice user submits to the foobar account a 4 GPU, 6 hour job.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=GPU&lt;br /&gt;
#SBATCH --partition gpu&lt;br /&gt;
#SBATCH --gres gpu:4&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
&lt;br /&gt;
$PWD/gpu_burnout 3600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
Extensions should be asked for at the Execution site (NIIF) at prace-support@niif.hu. All requests will be carefully reviewed and decided if eligable.&lt;br /&gt;
&lt;br /&gt;
== Reporting after finishing project ==&lt;br /&gt;
A report must be created after using PRACE resources. Please contact prace-support@niif.hu for further details.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgement in publications ==&lt;br /&gt;
&lt;br /&gt;
'''We acknowledge [PRACE/NIIF] for awarding us access to resource based in Hungary at [Budapest/Debrecen/Pécs/Szeged].'''&lt;br /&gt;
Where technical support has been received the following additional text should also be used:&lt;br /&gt;
'''The support of [name of person/people] from NIIF Institute, Hungary to the technical work is gratefully acknowledged.'''&lt;br /&gt;
&lt;br /&gt;
[[Category: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=SSH_kulcs_gener%C3%A1l%C3%A1s&amp;diff=3956</id>
		<title>SSH kulcs generálás</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=SSH_kulcs_gener%C3%A1l%C3%A1s&amp;diff=3956"/>
				<updated>2016-09-15T12:09:26Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
A  szuperszámítógépekre történő [https://niif.hu/archive/node/315 belépés] kizárólag az SSH nyilvános kulcsú titkosításon alapuló kulcsos [https://en.wikipedia.org/wiki/Secure_Shell authentikáció] segítségével  lehetséges. Az azonosítás eszköze egy kulcs pár, amely titkos fele  kizárólag a felhasználó birtokában lehet, ezzel zárva ki egy esetleges  rossz indulatú megszemélyesítésen alapuló támadást. A kulcs nyilvános  fele szabadon terjeszthető, továbbá a témaszám regisztráció során is  kötelezően elküldésre kerül. &lt;br /&gt;
&lt;br /&gt;
Mivel  a kulcs titkos felének biztonsága kritikus szempont, annak generálása  kizárólag a felhasználó számítógépén mehet végbe. A következő  leírásunkkal ehhez szeretnénk segítséget nyújtani.  Mivel  a generáláshoz szükséges lépesek operációs rendszerenként eltérőek  lehetnek, külön fejezet foglalkozik a Unix-szerű és a Windows operációs  rendszerekkel.  A  leírásokban említett alkalmazások számos esetben sokkal több  kapcsolóval és beállítási lehetőséggel rendelkeznek, mint amelyek itt  bemutatásra kerülnek, mi csak a legszükségesebbek bemutatására  szorítkozunk. További lehetőségek megismerhetők az egyes alkalmazások  hivatalos dokumentációinak segítségével.&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unix-szerű operációs rendszerek (Linux/OS X/stb.)''' &lt;br /&gt;
&lt;br /&gt;
A  generáláshoz az [http://www.openssh.com/ OpenSSH] programcsomaghoz tartozó [https://en.wikipedia.org/wiki/Ssh-keygen ssh-keygen]  alkalmazást tudja használni. A saját számítógépén futtassa le a  következő parancsot: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;% ssh-keygen -t rsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
A  parancs futása során megadható a titkos kulcs helye, amely megadása  nélkül a fájlok az alapértelmezett helyükre kerülnek. (Ennek használata,  ha nem áll fenn kizáró tényező, erősen ajánlott.) A következő lépésben  jelszó/jelmondat is megadható biztosítandó a titkos kulcs biztonsága.  (Amennyiben ezt a sort üresen hagyja, úgy nem kerül ilyen védelem a  titkos kulcsára.) Végül a program futtatásának hatására elkészül mind az  Ön nyilvános, mind a titkos kulcsa. Ezeket, amennyiben a generálás  során az alapértelmezett értékeket nem változtatta meg, megtalálja sorra  az alábbi helyeken (ahol az útvonalakban szereplő $HOME változó az Ön home directory-jére hivatkozik):&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;$HOME/.ssh/id_rsa.pub&lt;br /&gt;
$HOME/.ssh/id_rsa&amp;lt;/pre&amp;gt; &lt;br /&gt;
A regisztráció során a $HOME/.ssh/id_rsa.pub fájl tartalmára lesz szükség. &lt;br /&gt;
A publikus kulcs a következőhöz hasonló formátumú: &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAqNpbus3AGB4YU5bnC&lt;br /&gt;
kSxNdz B92KHXOKdsE1//sz86cTkRlpjCBdfE5JlO4jsTOsNU7efqjU4k+&lt;br /&gt;
gm3LrdY4EgeH9HB+XpIqHcmSRWrKBNuE3ZvxeyhDKm68j0V31Id7QANpI9&lt;br /&gt;
gIsRoRygC y0itionqb6/k4JrBb41FNCwzoSGits= user@host&amp;lt;/pre&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Windows operációs rendszer''' &lt;br /&gt;
&lt;br /&gt;
Windows  operációs rendszeren a [http://www.chiark.greenend.org.uk/~sgtatham/putty/ PuTTY] programcsomagban található [http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe PuTTYgen]  alkalmazás segítségével készíthetők el a szükséges kulcsok. A  kulcsgenerálással a szoftver kézikönyvének [http://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter8.html#pubkey 8. fejezete], a nyilvános  kulcs kiolvasásával pedig ezen belül a [http://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter8.html#puttygen-pastekey 8.2.10-es fejezete]  foglalkozik. &lt;br /&gt;
A generáláshoz szükséges lépesek a következők:&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
* Töltse le és indítsa el a [http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe PuTTYgen] alkalmazást!&lt;br /&gt;
* A “Paraméterek” mezőben válassza ki a “SSH-2 RSA” pontot a kulcs típusánál, valamint állítsa át 2048 bit-re a generálandó kulcs bitjeinek a számát, majd kattintson a ”Generate” gombra!&lt;br /&gt;
* Mozgassa az egerét a kis mezőben a szükséges kulcs párok elkészítéséhez!&lt;br /&gt;
* Itt adhat meg továbbá megjegyzést és jelszót/jelmondatot a készülő kulcshoz.&lt;br /&gt;
* Kattintson a “Save private key” majd a “Save public key” gombokra rendre a titkos, illetve a nyilvános kulcs lementéséhez!&lt;br /&gt;
 &lt;br /&gt;
A regisztráció során Önnek a publikus kulcsát kell megadni az űrlapon. &lt;br /&gt;
A publikus kulcs a következőhöz hasonló formátumú:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAqNpbus3AGB4YU5bn&lt;br /&gt;
CkSxNdz B92KHXOKdsE1//sz86cTkRlpjCBdfE5JlO4jsTOsNU7efqjU4&lt;br /&gt;
k+gm3LrdY4 EgeH9HB+XpIqHcmSRWrKBNuE3ZvxeyhDKm68j0V31Id7QA&lt;br /&gt;
NpI9gIsRoRygC y0itionqb6/k4JrBb41FNCwzoSGits= user@host&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
További hivatkozások:&amp;lt;br /&amp;gt;&lt;br /&gt;
https://help.ubuntu.com/community/SSH/OpenSSH/Keys&amp;lt;br /&amp;gt;&lt;br /&gt;
http://kb.siteground.com/article/How_to_generate_an_SSH_key_on_Windows_using_PuTTY.html&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=3816</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=3816"/>
				<updated>2016-07-21T08:35:58Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Szuperszámítógépeink összehasonlítása */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|NIIF HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* NIIFI központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (Leo)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) (tesztüzem)]] &lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (tesztüzem)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5,2 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 45&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 5&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen3 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Debrecen2_Phi_klaszter&amp;diff=3792</id>
		<title>Debrecen2 Phi klaszter</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Debrecen2_Phi_klaszter&amp;diff=3792"/>
				<updated>2016-05-19T08:59:02Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Klaszter&lt;br /&gt;
| Debrecen3 Phi (Apollo)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
|- &lt;br /&gt;
| core / node&lt;br /&gt;
| 12 × 2 Intel Xeon E5-2670 v3 @ 2.30GHz  &lt;br /&gt;
|- &lt;br /&gt;
| MIC / node&lt;br /&gt;
| 44 x 2 Intel(R) Xeon Phi(TM) MIC SE10/7120D&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok&lt;br /&gt;
| 44 db&lt;br /&gt;
|-&lt;br /&gt;
| Max Walltime&lt;br /&gt;
| 7-00:00:00&lt;br /&gt;
|-&lt;br /&gt;
| Max core-ok / projekt&lt;br /&gt;
| 336 (14db node)&lt;br /&gt;
|-&lt;br /&gt;
| Max mem / core&lt;br /&gt;
| 5000 MB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CPU idő kérés ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ATTENTION|A CPU idő igénylésekor egy olyan rövid indoklást várunk a HPC projekt vezetőktől, amiből kiderül, hogy a futtatandó alkalmazás képes MIC-et használni (ez alól kivétel, ha a felhasználás célja a gépen elérhető licenszelt szoftver használata, amennyiben az nem képes Phi-t használni (pl. Gaussian, Maple)). Erre azért van szükség, mert az erőforrás teljesítményének nagyobbik része Phi gyorsításból származik, egy gyorsítás nélküli program a CPU-kat lefoglalja, korlátozva ezzel a Phi-k használatát, ami kihasználatlansághoz vezet. Az Intel  [https://software.intel.com/en-us/xeonphionlinecatalog közzétett egy listát] arról, hogy melyik alkalmazás rendelkezik jelenleg hivatalosan Intel Xeon Phi támogatással, de természetesen egyéb, Phi-t használó program is nagy valószínűséggel jól fut a gépen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Belépés ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh USER@login.debrecen2.hpc.niif.hu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nem alapértelmezett kulcs használata esetén a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval megadása szükséges (SSH és SCP parancsok).&lt;br /&gt;
&lt;br /&gt;
=== Fájlok másolása SCP-vel ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  scp FILE USER@login.debrecen2.hpc.niif.hu:FILE&lt;br /&gt;
Le :  scp USER@login.debrecen2.hpc.niif.hu:FILE FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatszinkronizáció ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  rsync -a -e ssh DIRECTORY USER@login.debrecen2.hpc.niif.hu:/home/USER&lt;br /&gt;
Le :  rsync -a -e ssh USER@login.debrecen2.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A törölt fájlok szinkronizálásához a &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt; opciót kell megadni.&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                     |&lt;br /&gt;
    DEBRECEN2[login] ~ (0)$&lt;br /&gt;
        |       |       |&lt;br /&gt;
   HPC állomás  |       |&lt;br /&gt;
         rövid gép név  |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rx $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Addott könyvtárat (DIRECTORY) írahtóvá:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rxw $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A kiterjesztett jogokat a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getfacl $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még elérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
bob *                7 |           foobar           7 |         1,000         993&lt;br /&gt;
alice                0 |           foobar           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csökkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Phi-k lefoglalása ====&lt;br /&gt;
A Phi-k lefoglalása a következő direktívával törénik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=mic:N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; a Phi-k/node számát adja meg, ami 1 vagy 2 lehet.&lt;br /&gt;
&lt;br /&gt;
==== Interaktív használat ====&lt;br /&gt;
Rövid interaktív feladatokat az 'srun' paranccsal tudunk beküldeni, pl.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun -l -n 1 -t TIME --gres=mic:1 -A ACCOUNT APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{INFO|A Xeon Phi gyorsítók használatról, programozásáról és optimalizálásról [[Intel_Xeon_Phi|készítettünk egy wiki oldalt]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Batch job-ok indítása ====&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch slurm.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépen login node-ja megegyezik a Debrecen2 GPU login node-jával, a Debrecen2 Phi gép használata a megfelelő várakozási sor megadásával lehetséges. A várakozási sor neve:&lt;br /&gt;
&amp;lt;code&amp;gt;prod-phi&amp;lt;/code&amp;gt;&lt;br /&gt;
A  partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=prod-phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. A maximális memória/core 5000 MB lehet.&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=8&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
mpirun --report-pid ${TMPDIR}/mpirun.pid PROGRAM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenMPI FAQ: http://www.open-mpi.org/faq&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=8&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 8 CPU core-t rendeltunk, a 8 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 8 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 8 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 8 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid feladatok ====&lt;br /&gt;
Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). A Maple feladat indátását a &amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; paranccsal kell elvégezni.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=16&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=3791</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=3791"/>
				<updated>2016-05-19T08:56:36Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Szuperszámítógépeink összehasonlítása */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|NIIF HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* NIIFI központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (Leo)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) (tesztüzem)]] &lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (tesztüzem)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5,2 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 5&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen3 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Debrecen2_Phi_klaszter&amp;diff=3790</id>
		<title>Debrecen2 Phi klaszter</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Debrecen2_Phi_klaszter&amp;diff=3790"/>
				<updated>2016-05-19T07:55:39Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Klaszter&lt;br /&gt;
| Debrecen3 Phi (Apollo)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
|- &lt;br /&gt;
| core / node&lt;br /&gt;
| 12 × 2 Intel Xeon E5-2670 v3 @ 2.30GHz  &lt;br /&gt;
|- &lt;br /&gt;
| MIC / node&lt;br /&gt;
| 44 x 2 Intel(R) Xeon Phi(TM) MIC SE10/7120D&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok&lt;br /&gt;
| 44 db&lt;br /&gt;
|-&lt;br /&gt;
| Max Walltime&lt;br /&gt;
| 7-00:00:00&lt;br /&gt;
|-&lt;br /&gt;
| Max core-ok / projekt&lt;br /&gt;
| 504 (21db node)&lt;br /&gt;
|-&lt;br /&gt;
| Max mem / core&lt;br /&gt;
| 5000 MB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CPU idő kérés ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ATTENTION|A CPU idő igénylésekor egy olyan rövid indoklást várunk a HPC projekt vezetőktől, amiből kiderül, hogy a futtatandó alkalmazás képes MIC-et használni (ez alól kivétel, ha a felhasználás célja a gépen elérhető licenszelt szoftver használata, amennyiben az nem képes Phi-t használni (pl. Gaussian, Maple)). Erre azért van szükség, mert az erőforrás teljesítményének nagyobbik része Phi gyorsításból származik, egy gyorsítás nélküli program a CPU-kat lefoglalja, korlátozva ezzel a Phi-k használatát, ami kihasználatlansághoz vezet. Az Intel  [https://software.intel.com/en-us/xeonphionlinecatalog közzétett egy listát] arról, hogy melyik alkalmazás rendelkezik jelenleg hivatalosan Intel Xeon Phi támogatással, de természetesen egyéb, Phi-t használó program is nagy valószínűséggel jól fut a gépen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Belépés ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh USER@login.debrecen2.hpc.niif.hu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nem alapértelmezett kulcs használata esetén a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval megadása szükséges (SSH és SCP parancsok).&lt;br /&gt;
&lt;br /&gt;
=== Fájlok másolása SCP-vel ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  scp FILE USER@login.debrecen2.hpc.niif.hu:FILE&lt;br /&gt;
Le :  scp USER@login.debrecen2.hpc.niif.hu:FILE FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatszinkronizáció ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  rsync -a -e ssh DIRECTORY USER@login.debrecen2.hpc.niif.hu:/home/USER&lt;br /&gt;
Le :  rsync -a -e ssh USER@login.debrecen2.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A törölt fájlok szinkronizálásához a &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt; opciót kell megadni.&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                     |&lt;br /&gt;
    DEBRECEN2[login] ~ (0)$&lt;br /&gt;
        |       |       |&lt;br /&gt;
   HPC állomás  |       |&lt;br /&gt;
         rövid gép név  |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rx $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Addott könyvtárat (DIRECTORY) írahtóvá:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rxw $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A kiterjesztett jogokat a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getfacl $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még elérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
bob *                7 |           foobar           7 |         1,000         993&lt;br /&gt;
alice                0 |           foobar           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csökkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Phi-k lefoglalása ====&lt;br /&gt;
A Phi-k lefoglalása a következő direktívával törénik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=mic:N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; a Phi-k/node számát adja meg, ami 1 vagy 2 lehet.&lt;br /&gt;
&lt;br /&gt;
==== Interaktív használat ====&lt;br /&gt;
Rövid interaktív feladatokat az 'srun' paranccsal tudunk beküldeni, pl.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun -l -n 1 -t TIME --gres=mic:1 -A ACCOUNT APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{INFO|A Xeon Phi gyorsítók használatról, programozásáról és optimalizálásról [[Intel_Xeon_Phi|készítettünk egy wiki oldalt]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Batch job-ok indítása ====&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch slurm.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépen login node-ja megegyezik a Debrecen2 GPU login node-jával, a Debrecen2 Phi gép használata a megfelelő várakozási sor megadásával lehetséges. A várakozási sor neve:&lt;br /&gt;
&amp;lt;code&amp;gt;prod-phi&amp;lt;/code&amp;gt;&lt;br /&gt;
A  partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=prod-phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. A maximális memória/core 5000 MB lehet.&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=8&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
mpirun --report-pid ${TMPDIR}/mpirun.pid PROGRAM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenMPI FAQ: http://www.open-mpi.org/faq&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=8&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 8 CPU core-t rendeltunk, a 8 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 8 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 8 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 8 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid feladatok ====&lt;br /&gt;
Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). A Maple feladat indátását a &amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; paranccsal kell elvégezni.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=16&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=F%C3%A1jl:Apps_Supporting_Xeon_Phi_160519.docx&amp;diff=3789</id>
		<title>Fájl:Apps Supporting Xeon Phi 160519.docx</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=F%C3%A1jl:Apps_Supporting_Xeon_Phi_160519.docx&amp;diff=3789"/>
				<updated>2016-05-19T07:11:35Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: Apps Supporting Xeon Phi, all rights reserved to Intel(R), this is a snapshot of https://software.intel.com/en-us/xeonphionlinecatalog .&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Apps Supporting Xeon Phi, all rights reserved to Intel(R), this is a snapshot of https://software.intel.com/en-us/xeonphionlinecatalog .&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=3788</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=3788"/>
				<updated>2016-05-19T06:58:31Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Az új HPC-k dokumentációja */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|NIIF HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* NIIFI központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (Leo)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) (tesztüzem)]] &lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (tesztüzem)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 5&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen3 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=3787</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=3787"/>
				<updated>2016-05-19T06:58:21Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Szuperszámítógépeink összehasonlítása */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|NIIF HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* NIIFI központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (Leo)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) (tesztüzem)]] &lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (tesztüzem)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 5&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen2 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Debrecen2_Phi_klaszter&amp;diff=3786</id>
		<title>Debrecen2 Phi klaszter</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Debrecen2_Phi_klaszter&amp;diff=3786"/>
				<updated>2016-05-19T06:57:39Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Klaszter&lt;br /&gt;
| Debrecen3 Phi (Apollo)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
|- &lt;br /&gt;
| core / node&lt;br /&gt;
| 12 × 2 Intel Xeon E5-2670 v3 @ 2.30GHz  &lt;br /&gt;
|- &lt;br /&gt;
| MIC / node&lt;br /&gt;
| 44 x 2 Intel(R) Xeon Phi(TM) MIC SE10/7120D&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok&lt;br /&gt;
| 44 db&lt;br /&gt;
|-&lt;br /&gt;
| Max Walltime&lt;br /&gt;
| 7-00:00:00&lt;br /&gt;
|-&lt;br /&gt;
| Max core-ok / projekt&lt;br /&gt;
| 336 (21db node)&lt;br /&gt;
|-&lt;br /&gt;
| Max mem / core&lt;br /&gt;
| 5000 MB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CPU idő kérés ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ATTENTION|A CPU idő igénylésekor egy olyan rövid indoklást várunk a HPC projekt vezetőktől, amiből kiderül, hogy a futtatandó alkalmazás képes MIC-et használni (ez alól kivétel, ha a felhasználás célja a gépen elérhető licenszelt szoftver használata, amennyiben az nem képes Phi-t használni (pl. Gaussian, Maple)). Erre azért van szükség, mert az erőforrás teljesítményének nagyobbik része Phi gyorsításból származik, egy gyorsítás nélküli program a CPU-kat lefoglalja, korlátozva ezzel a Phi-k használatát, ami kihasználatlansághoz vezet. Az Intel  [https://software.intel.com/en-us/xeonphionlinecatalog közzétett egy listát] arról, hogy melyik alkalmazás rendelkezik jelenleg hivatalosan Intel Xeon Phi támogatással, de természetesen egyéb, Phi-t használó program is nagy valószínűséggel jól fut a gépen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Belépés ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh USER@login.debrecen2.hpc.niif.hu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nem alapértelmezett kulcs használata esetén a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval megadása szükséges (SSH és SCP parancsok).&lt;br /&gt;
&lt;br /&gt;
=== Fájlok másolása SCP-vel ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  scp FILE USER@login.debrecen2.hpc.niif.hu:FILE&lt;br /&gt;
Le :  scp USER@login.debrecen2.hpc.niif.hu:FILE FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatszinkronizáció ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  rsync -a -e ssh DIRECTORY USER@login.debrecen2.hpc.niif.hu:/home/USER&lt;br /&gt;
Le :  rsync -a -e ssh USER@login.debrecen2.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A törölt fájlok szinkronizálásához a &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt; opciót kell megadni.&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                     |&lt;br /&gt;
    DEBRECEN2[login] ~ (0)$&lt;br /&gt;
        |       |       |&lt;br /&gt;
   HPC állomás  |       |&lt;br /&gt;
         rövid gép név  |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rx $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Addott könyvtárat (DIRECTORY) írahtóvá:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rxw $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A kiterjesztett jogokat a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getfacl $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még elérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
bob *                7 |           foobar           7 |         1,000         993&lt;br /&gt;
alice                0 |           foobar           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csökkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Phi-k lefoglalása ====&lt;br /&gt;
A Phi-k lefoglalása a következő direktívával törénik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=mic:N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; a Phi-k/node számát adja meg, ami 1 vagy 2 lehet.&lt;br /&gt;
&lt;br /&gt;
==== Interaktív használat ====&lt;br /&gt;
Rövid interaktív feladatokat az 'srun' paranccsal tudunk beküldeni, pl.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun -l -n 1 -t TIME --gres=mic:1 -A ACCOUNT APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{INFO|A Xeon Phi gyorsítók használatról, programozásáról és optimalizálásról [[Intel_Xeon_Phi|készítettünk egy wiki oldalt]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Batch job-ok indítása ====&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch slurm.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépen login node-ja megegyezik a Debrecen2 GPU login node-jával, a Debrecen2 Phi gép használata a megfelelő várakozási sor megadásával lehetséges. A várakozási sor neve:&lt;br /&gt;
&amp;lt;code&amp;gt;prod-phi&amp;lt;/code&amp;gt;&lt;br /&gt;
A  partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=prod-phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. A maximális memória/core 7000 MB lehet.&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=8&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
mpirun --report-pid ${TMPDIR}/mpirun.pid PROGRAM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenMPI FAQ: http://www.open-mpi.org/faq&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=8&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 8 CPU core-t rendeltunk, a 8 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 8 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 8 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 8 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid feladatok ====&lt;br /&gt;
Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). A Maple feladat indátását a &amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; paranccsal kell elvégezni.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=16&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Budapest2_klaszter&amp;diff=3785</id>
		<title>Budapest2 klaszter</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Budapest2_klaszter&amp;diff=3785"/>
				<updated>2016-05-19T06:55:52Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Intel Xeon Phi használata */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Klaszter&lt;br /&gt;
| Budapest2&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP SL205s&lt;br /&gt;
|- &lt;br /&gt;
| core / node&lt;br /&gt;
| 10 × 2 Xeon E5-2680v2 2.80GHz  &lt;br /&gt;
|- &lt;br /&gt;
| Intel Xeon Phi / node&lt;br /&gt;
| 2 × Intel(R) Xeon Phi(TM) MIC SE10/7120P&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok&lt;br /&gt;
| 14 db&lt;br /&gt;
|-&lt;br /&gt;
| Max Walltime&lt;br /&gt;
| 7-00:00:00&lt;br /&gt;
|-&lt;br /&gt;
| Max core-ok / projekt&lt;br /&gt;
| 140 (7db node)&lt;br /&gt;
|-&lt;br /&gt;
| Max mem / core&lt;br /&gt;
| 3000 MB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Belépés ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh USER@login.budapest2.hpc.niif.hu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nem alapértelmezett kulcs használata esetén a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval megadása szükséges (SSH és SCP parancsok).&lt;br /&gt;
&lt;br /&gt;
=== Fájlok másolása SCP-vel ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  scp FILE USER@login.budapest2.hpc.niif.hu:FILE&lt;br /&gt;
Le :  scp USER@login.budapest2.hpc.niif.hu:FILE FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatszinkronizáció ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  rsync -a -e ssh DIRECTORY USER@login.budapest2.hpc.niif.hu:/home/USER&lt;br /&gt;
Le :  rsync -a -e ssh USER@login.budapest2.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A törölt fájlok szinkronizálásához a &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt; opciót kell megadni.&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                     |&lt;br /&gt;
    BUDAPEST2[login] ~ (0)$&lt;br /&gt;
        |       |       |&lt;br /&gt;
   HPC állomás  |       |&lt;br /&gt;
         rövid gép név  |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rx $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Addott könyvtárat (DIRECTORY) írahtóvá:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rxw $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A kiterjesztett jogokat a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getfacl $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== Intel Xeon Phi használata ==&lt;br /&gt;
&lt;br /&gt;
* [[Intel_Xeon_Phi |Részletes]] használati és alkalmazás optimalizációs leírás&lt;br /&gt;
* [http://software.intel.com/en-us/mic-developer Itt] található az Intel hivatalos dokumentációja ezzel kapcsolatban&lt;br /&gt;
* [https://software.intel.com/en-us/xeonphionlinecatalog Itt] található az Intel által hivatalosan támogatott alkalmazások listája&lt;br /&gt;
* [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Itt] tájékozódhatnak az Intel matematikai könyvtárainak a linkeléséről&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még elérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
bob *                7 |           foobar           7 |         1,000         993&lt;br /&gt;
alice                0 |           foobar           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csökkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Intel Xeon Phi-k lefoglalása ====&lt;br /&gt;
A Intel Xeon Phi-k lefoglalása a következő direktívával történik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=mic:N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; az Intel Xeon Phi-k/node számát adja meg, ami 1 és 2 lehet maximum.&lt;br /&gt;
&lt;br /&gt;
==== Job-ok indítása ====&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch slurm.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; sor és a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt; sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt;. A teszt partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. A maximális memória/core 3000 MB lehet.&lt;br /&gt;
&lt;br /&gt;
Amennyiben a szálaknak 4GB-nál több virtuális memóriára van szükségük, akkor az indítandó program elé a következő parancsot is el kell helyezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ulimit -v unlimited&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Soros (serial) jobok ====&lt;br /&gt;
Több soros job futtatását a tömbfeladatokhoz hasonlóan kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=serial&lt;br /&gt;
#SBATCH --time=24:30:00&lt;br /&gt;
#SBATCH -n 3&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
srun -n 1 program input1 &amp;amp;&lt;br /&gt;
srun -n 1 program input2 &amp;amp;&lt;br /&gt;
srun -n 1 program input3&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IntelMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=20&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
&lt;br /&gt;
mpirun PROGRAM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenMPI FAQ: http://www.open-mpi.org/faq&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=10&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 10 CPU core-t rendeltunk, a 10 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 10 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=10&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 10 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 10 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=10&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Debrecen2_Phi_klaszter&amp;diff=3784</id>
		<title>Debrecen2 Phi klaszter</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Debrecen2_Phi_klaszter&amp;diff=3784"/>
				<updated>2016-05-19T06:44:30Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Klaszter&lt;br /&gt;
| Debrecen2 Phi (Apollo)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
|- &lt;br /&gt;
| core / node&lt;br /&gt;
| 12 × 2 Intel Xeon E5-2670 v3 @ 2.30GHz  &lt;br /&gt;
|- &lt;br /&gt;
| MIC / node&lt;br /&gt;
| 44 x 2 Intel(R) Xeon Phi(TM) MIC SE10/7120D&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok&lt;br /&gt;
| 44 db&lt;br /&gt;
|-&lt;br /&gt;
| Max Walltime&lt;br /&gt;
| 7-00:00:00&lt;br /&gt;
|-&lt;br /&gt;
| Max core-ok / projekt&lt;br /&gt;
| 336 (21db node)&lt;br /&gt;
|-&lt;br /&gt;
| Max mem / core&lt;br /&gt;
| 5000 MB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CPU idő kérés ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ATTENTION|A CPU idő igénylésekor egy olyan rövid indoklást várunk a HPC projekt vezetőktől, amiből kiderül, hogy a futtatandó alkalmazás képes MIC-et használni (ez alól kivétel, ha a felhasználás célja a gépen elérhető licenszelt szoftver használata, amennyiben az nem képes Phi-t használni (pl. Gaussian, Maple)). Erre azért van szükség, mert az erőforrás teljesítményének nagyobbik része Phi gyorsításból származik, egy gyorsítás nélküli program a CPU-kat lefoglalja, korlátozva ezzel a Phi-k használatát, ami kihasználatlansághoz vezet. Az Intel  [https://software.intel.com/en-us/xeonphionlinecatalog közzétett egy listát] arról, hogy melyik alkalmazás rendelkezik jelenleg hivatalosan Intel Xeon Phi támogatással, de természetesen egyéb, Phi-t használó program is nagy valószínűséggel jól fut a gépen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Belépés ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh USER@login.debrecen2.hpc.niif.hu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nem alapértelmezett kulcs használata esetén a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval megadása szükséges (SSH és SCP parancsok).&lt;br /&gt;
&lt;br /&gt;
=== Fájlok másolása SCP-vel ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  scp FILE USER@login.debrecen2.hpc.niif.hu:FILE&lt;br /&gt;
Le :  scp USER@login.debrecen2.hpc.niif.hu:FILE FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatszinkronizáció ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  rsync -a -e ssh DIRECTORY USER@login.debrecen2.hpc.niif.hu:/home/USER&lt;br /&gt;
Le :  rsync -a -e ssh USER@login.debrecen2.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A törölt fájlok szinkronizálásához a &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt; opciót kell megadni.&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                     |&lt;br /&gt;
    DEBRECEN2[login] ~ (0)$&lt;br /&gt;
        |       |       |&lt;br /&gt;
   HPC állomás  |       |&lt;br /&gt;
         rövid gép név  |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rx $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Addott könyvtárat (DIRECTORY) írahtóvá:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rxw $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A kiterjesztett jogokat a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getfacl $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még elérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
bob *                7 |           foobar           7 |         1,000         993&lt;br /&gt;
alice                0 |           foobar           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csökkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Phi-k lefoglalása ====&lt;br /&gt;
A Phi-k lefoglalása a következő direktívával törénik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=mic:N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; a Phi-k/node számát adja meg, ami 1 vagy 2 lehet.&lt;br /&gt;
&lt;br /&gt;
==== Interaktív használat ====&lt;br /&gt;
Rövid interaktív feladatokat az 'srun' paranccsal tudunk beküldeni, pl.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun -l -n 1 -t TIME --gres=mic:1 -A ACCOUNT APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{INFO|A Xeon Phi gyorsítók használatról, programozásáról és optimalizálásról [[Intel_Xeon_Phi|készítettünk egy wiki oldalt]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Batch job-ok indítása ====&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch slurm.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépen login node-ja megegyezik a Debrecen2 GPU login node-jával, a Debrecen2 Phi gép használata a megfelelő várakozási sor megadásával lehetséges. A várakozási sor neve:&lt;br /&gt;
&amp;lt;code&amp;gt;prod-phi&amp;lt;/code&amp;gt;&lt;br /&gt;
A  partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=prod-phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. A maximális memória/core 7000 MB lehet.&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=8&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
mpirun --report-pid ${TMPDIR}/mpirun.pid PROGRAM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenMPI FAQ: http://www.open-mpi.org/faq&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=8&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 8 CPU core-t rendeltunk, a 8 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 8 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 8 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 8 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid feladatok ====&lt;br /&gt;
Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). A Maple feladat indátását a &amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; paranccsal kell elvégezni.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=16&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=3783</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=3783"/>
				<updated>2016-05-12T07:42:30Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Szuperszámítógépeink összehasonlítása */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|NIIF HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* NIIFI központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen2-Phi (tesztüzem)]] &lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (tesztüzem)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 5&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen2 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=3782</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=3782"/>
				<updated>2016-05-12T07:38:37Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Szuperszámítógépeink összehasonlítása */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|NIIF HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* NIIFI központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen2-Phi (tesztüzem)]] &lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (tesztüzem)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 6&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen2 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=3781</id>
		<title>NIIF HPC (English)</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=3781"/>
				<updated>2016-05-11T20:46:54Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* NIIF HPC resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HPC|Magyar változat]]&lt;br /&gt;
== Supercomputing ==&lt;br /&gt;
NIIF Institute has been operating supercomputer since 2001. The service provides scientific computation and data storage facilities. The components of the supercomputing infrastructure found in five locations:&lt;br /&gt;
 &lt;br /&gt;
* NIIF centre Budapest&lt;br /&gt;
* University of Debrecen&lt;br /&gt;
* University of Pécs&lt;br /&gt;
* University of Szeged&lt;br /&gt;
* University of Miskolc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Various supercomputer architectures are available in different locations, because we need to support different types of scientific computing tasks. In order to support all kinds of scientific computational needs different computer architectures are available. We have cluster based supercomputers in three locations and two ccNUMA machine. The supercomputers are operated by NIIF Institute staff. The latest development tools and scientific applications are available for the users. The documentation of the supercomputers can be found here.&lt;br /&gt;
 &lt;br /&gt;
Any person or research group who has a contractual relationship with the NIIF Institute can use the service. Usage of the supercomputers is free for authorised users. New users should request a HPC project here. After the project is accepted invitations can be sent out for group members by the principal investigator. Invitations for the HPC portal can be managed [https://portal.hpc.niif.hu/ here].&lt;br /&gt;
&lt;br /&gt;
[http://hpc.niif.hu/index_en.php NIIF HPC website]&lt;br /&gt;
&lt;br /&gt;
==== NIIF HPC resources ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Location&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (LEO)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) (test phase)]]&lt;br /&gt;
| Pécs&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (test phase)&lt;br /&gt;
|- &lt;br /&gt;
| Type&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memory / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memory / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
&lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| 14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
| 44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack Performance (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute nodes&lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedicated storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (combined with Phi)&lt;br /&gt;
| 585 TB (combined with GPU)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Interconnect &lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB QDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| IB NB FDR&lt;br /&gt;
| Numalink 6&lt;br /&gt;
| Numalink 6&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Contact ====&lt;br /&gt;
 &lt;br /&gt;
If you have any questions send email to the following address: hpc-support@niif.hu&lt;br /&gt;
 &lt;br /&gt;
Or contact the HPC users in Hungary on the following mailing list: hpc-forum@listserv.niif.hu, you can subscribe [https://listserv.niif.hu/mailman/listinfo/hpc-forum here].&lt;br /&gt;
&lt;br /&gt;
== More information ==&lt;br /&gt;
* [http://www.niif.hu/node/679 HPC information at NIIF.HU]&lt;br /&gt;
* [[HPC_software|List of Software installed on HPCs]]&lt;br /&gt;
&lt;br /&gt;
* [[PRACE_User_Support|User Support (PRACE, and general)]]&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Workshop / Tutorial]&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=3780</id>
		<title>NIIF HPC (English)</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=3780"/>
				<updated>2016-05-11T17:12:08Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* NIIF HPC resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HPC|Magyar változat]]&lt;br /&gt;
== Supercomputing ==&lt;br /&gt;
NIIF Institute has been operating supercomputer since 2001. The service provides scientific computation and data storage facilities. The components of the supercomputing infrastructure found in five locations:&lt;br /&gt;
 &lt;br /&gt;
* NIIF centre Budapest&lt;br /&gt;
* University of Debrecen&lt;br /&gt;
* University of Pécs&lt;br /&gt;
* University of Szeged&lt;br /&gt;
* University of Miskolc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Various supercomputer architectures are available in different locations, because we need to support different types of scientific computing tasks. In order to support all kinds of scientific computational needs different computer architectures are available. We have cluster based supercomputers in three locations and two ccNUMA machine. The supercomputers are operated by NIIF Institute staff. The latest development tools and scientific applications are available for the users. The documentation of the supercomputers can be found here.&lt;br /&gt;
 &lt;br /&gt;
Any person or research group who has a contractual relationship with the NIIF Institute can use the service. Usage of the supercomputers is free for authorised users. New users should request a HPC project here. After the project is accepted invitations can be sent out for group members by the principal investigator. Invitations for the HPC portal can be managed [https://portal.hpc.niif.hu/ here].&lt;br /&gt;
&lt;br /&gt;
[http://hpc.niif.hu/index_en.php NIIF HPC website]&lt;br /&gt;
&lt;br /&gt;
==== NIIF HPC resources ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Location&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (LEO)]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen3-Phi (Apollo) (test phase)]]&lt;br /&gt;
| Pécs&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (test phase)&lt;br /&gt;
|- &lt;br /&gt;
| Type&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memory / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memory / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
&lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| 14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
| 44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack Performance (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute nodes&lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedicated storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (combined with Phi)&lt;br /&gt;
| 585 TB (combined with GPU)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Contact ====&lt;br /&gt;
 &lt;br /&gt;
If you have any questions send email to the following address: hpc-support@niif.hu&lt;br /&gt;
 &lt;br /&gt;
Or contact the HPC users in Hungary on the following mailing list: hpc-forum@listserv.niif.hu, you can subscribe [https://listserv.niif.hu/mailman/listinfo/hpc-forum here].&lt;br /&gt;
&lt;br /&gt;
== More information ==&lt;br /&gt;
* [http://www.niif.hu/node/679 HPC information at NIIF.HU]&lt;br /&gt;
* [[HPC_software|List of Software installed on HPCs]]&lt;br /&gt;
&lt;br /&gt;
* [[PRACE_User_Support|User Support (PRACE, and general)]]&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Workshop / Tutorial]&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Budapest2_klaszter&amp;diff=3779</id>
		<title>Budapest2 klaszter</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Budapest2_klaszter&amp;diff=3779"/>
				<updated>2016-05-11T17:12:00Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Klaszter&lt;br /&gt;
| Budapest2&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP SL205s&lt;br /&gt;
|- &lt;br /&gt;
| core / node&lt;br /&gt;
| 10 × 2 Xeon E5-2680v2 2.80GHz  &lt;br /&gt;
|- &lt;br /&gt;
| Intel Xeon Phi / node&lt;br /&gt;
| 2 × Intel(R) Xeon Phi(TM) MIC SE10/7120P&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok&lt;br /&gt;
| 14 db&lt;br /&gt;
|-&lt;br /&gt;
| Max Walltime&lt;br /&gt;
| 7-00:00:00&lt;br /&gt;
|-&lt;br /&gt;
| Max core-ok / projekt&lt;br /&gt;
| 140 (7db node)&lt;br /&gt;
|-&lt;br /&gt;
| Max mem / core&lt;br /&gt;
| 3000 MB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Belépés ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh USER@login.budapest2.hpc.niif.hu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nem alapértelmezett kulcs használata esetén a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval megadása szükséges (SSH és SCP parancsok).&lt;br /&gt;
&lt;br /&gt;
=== Fájlok másolása SCP-vel ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  scp FILE USER@login.budapest2.hpc.niif.hu:FILE&lt;br /&gt;
Le :  scp USER@login.budapest2.hpc.niif.hu:FILE FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatszinkronizáció ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  rsync -a -e ssh DIRECTORY USER@login.budapest2.hpc.niif.hu:/home/USER&lt;br /&gt;
Le :  rsync -a -e ssh USER@login.budapest2.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A törölt fájlok szinkronizálásához a &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt; opciót kell megadni.&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                     |&lt;br /&gt;
    BUDAPEST2[login] ~ (0)$&lt;br /&gt;
        |       |       |&lt;br /&gt;
   HPC állomás  |       |&lt;br /&gt;
         rövid gép név  |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rx $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Addott könyvtárat (DIRECTORY) írahtóvá:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rxw $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A kiterjesztett jogokat a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getfacl $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== Intel Xeon Phi használata ==&lt;br /&gt;
&lt;br /&gt;
* [[Intel_Xeon_Phi |Részletes]] használati és alkalmazás optimalizációs leírás&lt;br /&gt;
* [http://software.intel.com/en-us/mic-developer Itt] található az Intel hivatalos dokumentációja ezzel kapcsolatban&lt;br /&gt;
* [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Itt] tájékozódhatnak az Intel matematikai könyvtárainak a linkeléséről&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még elérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
bob *                7 |           foobar           7 |         1,000         993&lt;br /&gt;
alice                0 |           foobar           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csökkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Intel Xeon Phi-k lefoglalása ====&lt;br /&gt;
A Intel Xeon Phi-k lefoglalása a következő direktívával történik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=mic:N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; az Intel Xeon Phi-k/node számát adja meg, ami 1 és 2 lehet maximum.&lt;br /&gt;
&lt;br /&gt;
==== Job-ok indítása ====&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch slurm.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; sor és a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt; sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt;. A teszt partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. A maximális memória/core 3000 MB lehet.&lt;br /&gt;
&lt;br /&gt;
Amennyiben a szálaknak 4GB-nál több virtuális memóriára van szükségük, akkor az indítandó program elé a következő parancsot is el kell helyezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ulimit -v unlimited&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Soros (serial) jobok ====&lt;br /&gt;
Több soros job futtatását a tömbfeladatokhoz hasonlóan kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=serial&lt;br /&gt;
#SBATCH --time=24:30:00&lt;br /&gt;
#SBATCH -n 3&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
srun -n 1 program input1 &amp;amp;&lt;br /&gt;
srun -n 1 program input2 &amp;amp;&lt;br /&gt;
srun -n 1 program input3&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IntelMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=20&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
&lt;br /&gt;
mpirun PROGRAM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenMPI FAQ: http://www.open-mpi.org/faq&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=10&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 10 CPU core-t rendeltunk, a 10 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 10 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=10&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 10 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 10 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=10&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=3778</id>
		<title>NIIF HPC (English)</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=3778"/>
				<updated>2016-05-11T17:10:13Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* NIIF HPC resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HPC|Magyar változat]]&lt;br /&gt;
== Supercomputing ==&lt;br /&gt;
NIIF Institute has been operating supercomputer since 2001. The service provides scientific computation and data storage facilities. The components of the supercomputing infrastructure found in five locations:&lt;br /&gt;
 &lt;br /&gt;
* NIIF centre Budapest&lt;br /&gt;
* University of Debrecen&lt;br /&gt;
* University of Pécs&lt;br /&gt;
* University of Szeged&lt;br /&gt;
* University of Miskolc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Various supercomputer architectures are available in different locations, because we need to support different types of scientific computing tasks. In order to support all kinds of scientific computational needs different computer architectures are available. We have cluster based supercomputers in three locations and two ccNUMA machine. The supercomputers are operated by NIIF Institute staff. The latest development tools and scientific applications are available for the users. The documentation of the supercomputers can be found here.&lt;br /&gt;
 &lt;br /&gt;
Any person or research group who has a contractual relationship with the NIIF Institute can use the service. Usage of the supercomputers is free for authorised users. New users should request a HPC project here. After the project is accepted invitations can be sent out for group members by the principal investigator. Invitations for the HPC portal can be managed [https://portal.hpc.niif.hu/ here].&lt;br /&gt;
&lt;br /&gt;
[http://hpc.niif.hu/index_en.php NIIF HPC website]&lt;br /&gt;
&lt;br /&gt;
==== NIIF HPC resources ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Location&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (LEO)]] &lt;br /&gt;
| Debrecen3-Phi (Apollo) (test phase)&lt;br /&gt;
| Pécs&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (test phase)&lt;br /&gt;
|- &lt;br /&gt;
| Type&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memory / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memory / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
&lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| 14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
| 44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack Performance (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute nodes&lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedicated storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (combined with Phi)&lt;br /&gt;
| 585 TB (combined with GPU)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Contact ====&lt;br /&gt;
 &lt;br /&gt;
If you have any questions send email to the following address: hpc-support@niif.hu&lt;br /&gt;
 &lt;br /&gt;
Or contact the HPC users in Hungary on the following mailing list: hpc-forum@listserv.niif.hu, you can subscribe [https://listserv.niif.hu/mailman/listinfo/hpc-forum here].&lt;br /&gt;
&lt;br /&gt;
== More information ==&lt;br /&gt;
* [http://www.niif.hu/node/679 HPC information at NIIF.HU]&lt;br /&gt;
* [[HPC_software|List of Software installed on HPCs]]&lt;br /&gt;
&lt;br /&gt;
* [[PRACE_User_Support|User Support (PRACE, and general)]]&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Workshop / Tutorial]&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=3777</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=3777"/>
				<updated>2016-05-11T16:59:01Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Szuperszámítógépeink összehasonlítása */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|NIIF HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* NIIFI központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU]] &lt;br /&gt;
| [[Debrecen2_Phi_klaszter|Debrecen2-Phi (tesztüzem)]] &lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (tesztüzem)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen2 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=3776</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=3776"/>
				<updated>2016-05-11T16:57:02Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Az új HPC-k dokumentációja */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|NIIF HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* NIIFI központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU]] (tesztüzem)&lt;br /&gt;
| Debrecen3-Phi (beüzemelése folyamatban van)&lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (tesztüzem)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
* [[Debrecen2_Phi_klaszter|Debrecen2 Phi klaszter (Apollo)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Debrecen2_Phi_klaszter&amp;diff=3775</id>
		<title>Debrecen2 Phi klaszter</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Debrecen2_Phi_klaszter&amp;diff=3775"/>
				<updated>2016-05-11T16:55:21Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: Új oldal, tartalma: „{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;  |-  | Klaszter | Debrecen2 Phi (Apollo) |-  | Típus | HP Apollo 8000 |-  | core / node | 12 × 2 Intel Xeon E5-2670 v3 @ 2.30GHz   |- …”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Klaszter&lt;br /&gt;
| Debrecen2 Phi (Apollo)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
|- &lt;br /&gt;
| core / node&lt;br /&gt;
| 12 × 2 Intel Xeon E5-2670 v3 @ 2.30GHz  &lt;br /&gt;
|- &lt;br /&gt;
| MIC / node&lt;br /&gt;
| 44 x 2 Intel(R) Xeon Phi(TM) MIC SE10/7120D&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok&lt;br /&gt;
| 44 db&lt;br /&gt;
|-&lt;br /&gt;
| Max Walltime&lt;br /&gt;
| 7-00:00:00&lt;br /&gt;
|-&lt;br /&gt;
| Max core-ok / projekt&lt;br /&gt;
| 336 (21db node)&lt;br /&gt;
|-&lt;br /&gt;
| Max mem / core&lt;br /&gt;
| 7000 MB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CPU idő kérés ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ATTENTION|A CPU idő igénylésekor egy olyan rövid indoklást várunk a HPC projekt vezetőktől, amiből kiderül, hogy a futtatandó alkalmazás képes MIC-et használni (ez alól kivétel, ha a felhasználás célja a gépen elérhető licenszelt szoftver használata, amennyiben az nem képes Phi-t használni (pl. Gaussian, Maple)). Erre azért van szükség, mert az erőforrás teljesítményének nagyobbik része Phi gyorsításból származik, egy gyorsítás nélküli program a CPU-kat lefoglalja, korlátozva ezzel a Phi-k használatát, ami kihasználatlansághoz vezet. Az Intel  [https://software.intel.com/en-us/xeonphionlinecatalog közzétett egy listát] arról, hogy melyik alkalmazás rendelkezik jelenleg hivatalosan Intel Xeon Phi támogatással, de természetesen egyéb, Phi-t használó program is nagy valószínűséggel jól fut a gépen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Belépés ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh USER@login.debrecen2.hpc.niif.hu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nem alapértelmezett kulcs használata esetén a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval megadása szükséges (SSH és SCP parancsok).&lt;br /&gt;
&lt;br /&gt;
=== Fájlok másolása SCP-vel ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  scp FILE USER@login.debrecen2.hpc.niif.hu:FILE&lt;br /&gt;
Le :  scp USER@login.debrecen2.hpc.niif.hu:FILE FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatszinkronizáció ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  rsync -a -e ssh DIRECTORY USER@login.debrecen2.hpc.niif.hu:/home/USER&lt;br /&gt;
Le :  rsync -a -e ssh USER@login.debrecen2.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A törölt fájlok szinkronizálásához a &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt; opciót kell megadni.&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                     |&lt;br /&gt;
    DEBRECEN2[login] ~ (0)$&lt;br /&gt;
        |       |       |&lt;br /&gt;
   HPC állomás  |       |&lt;br /&gt;
         rövid gép név  |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rx $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Addott könyvtárat (DIRECTORY) írahtóvá:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rxw $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A kiterjesztett jogokat a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getfacl $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még elérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
bob *                7 |           foobar           7 |         1,000         993&lt;br /&gt;
alice                0 |           foobar           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csökkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Phi-k lefoglalása ====&lt;br /&gt;
A Phi-k lefoglalása a következő direktívával törénik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=mic:N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; a Phi-k/node számát adja meg, ami 1, 2 és 3 lehet maximum.&lt;br /&gt;
&lt;br /&gt;
==== Interaktív használat ====&lt;br /&gt;
Rövid interaktív feladatokat az 'srun' paranccsal tudunk beküldeni, pl.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun -l -n 1 -t TIME --gres=mic:1 -A ACCOUNT APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{INFO|A Xeon Phi gyorsítók használatról, programozásáról és optimalizálásról [[ Intel_Xeon_Phi készítettünk egy wiki oldalt]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Batch job-ok indítása ====&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch slurm.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépen login node-ja megegyezik a Debrecen2 GPU login node-jával, a Debrecen2 Phi gép használata a megfelelő várakozási sor megadásával lehetséges. A várakozási sor neve:&lt;br /&gt;
&amp;lt;code&amp;gt;prod-phi&amp;lt;/code&amp;gt;&lt;br /&gt;
A  partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=prod-phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. A maximális memória/core 7000 MB lehet.&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=8&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
mpirun --report-pid ${TMPDIR}/mpirun.pid PROGRAM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenMPI FAQ: http://www.open-mpi.org/faq&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=8&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 8 CPU core-t rendeltunk, a 8 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 8 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 8 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 8 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid feladatok ====&lt;br /&gt;
Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). A Maple feladat indátását a &amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; paranccsal kell elvégezni.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=16&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=3774</id>
		<title>NIIF HPC (English)</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=NIIF_HPC_(English)&amp;diff=3774"/>
				<updated>2016-05-11T10:25:02Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* More information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[HPC|Magyar változat]]&lt;br /&gt;
== Supercomputing ==&lt;br /&gt;
NIIF Institute has been operating supercomputer since 2001. The service provides scientific computation and data storage facilities. The components of the supercomputing infrastructure found in five locations:&lt;br /&gt;
 &lt;br /&gt;
* NIIF centre Budapest&lt;br /&gt;
* University of Debrecen&lt;br /&gt;
* University of Pécs&lt;br /&gt;
* University of Szeged&lt;br /&gt;
* University of Miskolc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Various supercomputer architectures are available in different locations, because we need to support different types of scientific computing tasks. In order to support all kinds of scientific computational needs different computer architectures are available. We have cluster based supercomputers in three locations and two ccNUMA machine. The supercomputers are operated by NIIF Institute staff. The latest development tools and scientific applications are available for the users. The documentation of the supercomputers can be found here.&lt;br /&gt;
 &lt;br /&gt;
Any person or research group who has a contractual relationship with the NIIF Institute can use the service. Usage of the supercomputers is free for authorised users. New users should request a HPC project here. After the project is accepted invitations can be sent out for group members by the principal investigator. Invitations for the HPC portal can be managed [https://portal.hpc.niif.hu/ here].&lt;br /&gt;
&lt;br /&gt;
[http://hpc.niif.hu/index_en.php NIIF HPC website]&lt;br /&gt;
&lt;br /&gt;
==== NIIF HPC resources ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Location&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU (LEO)]] (test phase)&lt;br /&gt;
| Debrecen3-Phi (Apollo) (setup in progress)&lt;br /&gt;
| Pécs&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (test phase)&lt;br /&gt;
|- &lt;br /&gt;
| Type&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memory / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memory / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
&lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| 14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
| 44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack Performance (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute nodes&lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedicated storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (combined with Phi)&lt;br /&gt;
| 585 TB (combined with GPU)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Contact ====&lt;br /&gt;
 &lt;br /&gt;
If you have any questions send email to the following address: hpc-support@niif.hu&lt;br /&gt;
 &lt;br /&gt;
Or contact the HPC users in Hungary on the following mailing list: hpc-forum@listserv.niif.hu, you can subscribe [https://listserv.niif.hu/mailman/listinfo/hpc-forum here].&lt;br /&gt;
&lt;br /&gt;
== More information ==&lt;br /&gt;
* [http://www.niif.hu/node/679 HPC information at NIIF.HU]&lt;br /&gt;
* [[HPC_software|List of Software installed on HPCs]]&lt;br /&gt;
&lt;br /&gt;
* [[PRACE_User_Support|User Support (PRACE, and general)]]&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Workshop / Tutorial]&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=3773</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=3773"/>
				<updated>2016-05-11T10:24:05Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Angol nyelvű tréningek, videók, anyagok */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|NIIF HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* NIIFI központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU]] (tesztüzem)&lt;br /&gt;
| Debrecen3-Phi (beüzemelése folyamatban van)&lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (tesztüzem)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
* [http://colfaxresearch.com/how-16-04/ Xeon Phi Training]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Intel_Xeon_Phi&amp;diff=3772</id>
		<title>Intel Xeon Phi</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Intel_Xeon_Phi&amp;diff=3772"/>
				<updated>2016-05-11T10:22:57Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az oldalon található információk segítséget nyújtanak a HPC felhasználóinknak, hogy alkalmazásaikat miként portolhatják valamint optimalizálhatják a hatékonyabb futást szem előtt tartva Intel Xeon Phi koprocesszor kártyákon.&lt;br /&gt;
&lt;br /&gt;
{{INFO|Egy 10 alkalmas, angol nyelvű Xeon Phi programozás tutoriál videóanyaggal és példaprogrammal elérhető a [[http://colfaxresearch.com/how-16-04/ Colfax oldalán]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardver bemutatása==&lt;br /&gt;
Intel® Xeon Phi™ Coprocessor 7120P&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fájl:Xeon-phi-family-rwd.png.rendition.intel.web.720.405.png|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
! CPU&lt;br /&gt;
! threads/Core&lt;br /&gt;
!max threads&lt;br /&gt;
! CPU Freq&lt;br /&gt;
! Memória&lt;br /&gt;
! L1 cache&lt;br /&gt;
! L2 cache&lt;br /&gt;
! Interfész&lt;br /&gt;
! Ptot&lt;br /&gt;
! Számítási kapacitás&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 61&lt;br /&gt;
| 4 Hardver&lt;br /&gt;
| 244&lt;br /&gt;
| 1238 GHz&lt;br /&gt;
| 16GB GDDR5&lt;br /&gt;
| 32KB/core&lt;br /&gt;
| 512KB/core&lt;br /&gt;
| PCIe&lt;br /&gt;
| 300W&lt;br /&gt;
| 1,2 TFlop/s dupla pontosság&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| OpenMP-nél csak '''240'''&lt;br /&gt;
|&lt;br /&gt;
| ~100 cycles&lt;br /&gt;
~174 GB/s&lt;br /&gt;
| ~3 cycles&lt;br /&gt;
| ~10 cycles&lt;br /&gt;
| ~7 GB/s&lt;br /&gt;
~1 microsecond&lt;br /&gt;
|&lt;br /&gt;
| 2,4 TFlop/s egyszeres pontosság&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Az Intel® 1. generációs Xeon Phi™ koprocesszorában található 61 processzor ugyanazt a 16GB memóriát éri el, de semmilyen módon se fér hozzá közvetlenül a hoszt gép fizikai memóriájához.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Budapest2_klaszter|Budapest2]] és [[HPC#Szupersz.C3.A1m.C3.ADt.C3.B3g.C3.A9peink_.C3.B6sszehasonl.C3.ADt.C3.A1sa|Debrecen3-Phi]] gépeinkben számítási nodonként 2-2 Phi™ koprocesszor található. &amp;lt;br/&amp;gt;&lt;br /&gt;
A kártyákon speciális célú Linux kernel fut melyre a belépés limitáltan csak a rendszergazdák számára lehetséges SSH-n keresztül a hoszt gépről. Természetesen a kártyára belépve olyan érzésünk lehet, mintha egy sok processzoros gépen dolgoznánk, ami rendelkezik rengeteg memóriával. Ez így is van, de a hatékonyabb kihasználás érdekében az SSH-n keresztüli elérés nem lehetséges, csak a Slurm segítségével valamint a programozási nyelvek által támogatott csatornákon keresztül. Ennek részletezése lentebb megtalálható.&lt;br /&gt;
&lt;br /&gt;
==Használati módok==&lt;br /&gt;
A koprocesszor használatai módjait két csoportba lehet sorolni. A '''natív''' és az '''offload''' használatot.  &amp;lt;br/&amp;gt;&lt;br /&gt;
Ezen használati módokról a lenti fejezetekben több részletet is megtudhat. Az itt megfogalmazott &amp;quot;támogatás&amp;quot; csak a mi infrastruktúránkra érvényes! &amp;lt;br /&amp;gt;&lt;br /&gt;
A bemutatott példák ''c++'' nyelven vannak, de természetesen ''c'' és ''fortran'' esetén is megtalálható az ekvivalens módszer.&lt;br /&gt;
&lt;br /&gt;
===a) nem támogatott mód===&lt;br /&gt;
====közvetlen natív használat====&lt;br /&gt;
A natív mód arra szolgál, hogy a MIC kártyára  lefordított alkalmazásunkat felmásoljuk a kártyára, majd belépünk SSH-n a kártyára és azon futtatjuk a bináris kódunkat. &amp;lt;br /&amp;gt;&lt;br /&gt;
Biztonsági okokból a közvetlen natív használat az NIIF HPC infrastruktúrán nem elérhető. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===b) támogatott, de nem preferált használat===&lt;br /&gt;
====automatikus kódátvitel====&lt;br /&gt;
Ebben az esetben nem kell átmásolnunk a bináris alkalmazásunkat a kártyára sőt még csak be se kell lépnünk, mert ezt a két lépést egy beépített tool végzi el. &amp;lt;br/&amp;gt;&lt;br /&gt;
A tool eléréséhez szükséges parancs neve: '''micnativeloadex'''&lt;br /&gt;
&lt;br /&gt;
Ebben az esetben a workflow a következőképpen módosul:&lt;br /&gt;
# Alkalmazás megírása. például [[Média:hello.cc|''hello.cc'']]&lt;br /&gt;
# Alkalmazás fordítása &amp;lt;br/&amp;gt; &amp;lt;pre&amp;gt;icpc -o hello-MIC -mmic hello.cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
# A tool futásához szükséges library-k megadása &amp;lt;br&amp;gt; &amp;lt;pre&amp;gt;export SINK_LD_LIBRARY_PATH=/opt/intel/composerxe/compiler/lib/mic&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Alkalmazás futtatása &amp;lt;br/&amp;gt; &amp;lt;pre&amp;gt;micnativeloadex hello-MIC&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| BUDAPEST2[cn10] phi (0)$ export SINK_LD_LIBRARY_PATH=/opt/intel/composerxe/compiler/lib/mic &amp;lt;br/&amp;gt;BUDAPEST2[cn10] phi (0)$ micnativeloadex hello-MIC &amp;lt;br/&amp;gt;Hello world! I have 244 logical cores.&amp;lt;br/&amp;gt;BUDAPEST2[cn10] phi (0)$&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===c) támogatott módok===&lt;br /&gt;
====Offload====&lt;br /&gt;
Az Offload modell esetén szükséges a forráskód módosítása, mégpedig úgy, hogy azon kódrészletet, amit a koprocesszoron szeretnénk futtatni, ki kell egészíteni egy fordítási direktívával. Az alkalmazás fordításakor elegendő csak a CPU-ra való binárist készíteni mivel a modell végzi a megfelelő forrás részlet mozgatását és futtatását.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:offload.png|Offload modell]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánkban jól látható, hogy a második kiíratás már a koprocesszoron fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main(int argc, char * argv[]) {&lt;br /&gt;
  printf(&amp;quot;Hello world from host!\n&amp;quot;);&lt;br /&gt;
#pragma offload target(mic)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;Hello world from coprocessor!\n&amp;quot;); fflush(stdout);&lt;br /&gt;
  }&lt;br /&gt;
  printf(&amp;quot;Bye\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebben a példában az operációs rendszer választja ki, hogy melyik Phi kártyán fusson le a kódrészlet. Amennyiben mi szeretnénk explicite megmondani, hogy melyik kártyán fusson, akkor a fordítási direktívában a mic kulcsszó után kell tenni egy &amp;quot;:&amp;quot;-t és a kártya sorszámát [mi esetünkben 0 vagy 1]. Ekkor így nézne ki a direktíva: ''#pragma offload target(mic:1)''&lt;br /&gt;
&lt;br /&gt;
Amennyiben az offload szekcióban függvény hívás is szerepel, akkor szükségeltetik az függvény futásához szükséges változók adatterületének átmásolása a Phi kártyára, majd a lefutás után visszamásolni a hoszt gépre. Ezen másolást az ''offload_attribute'' ''push'' és ''pop'' paraméterei segítségével határozhatjuk meg. &amp;lt;br /&amp;gt;&lt;br /&gt;
A következő mátrix-vektor szorzás példánál az A mátrix globális változó, míg a b és c vektorok a függvény paraméterei.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//A változók felmásolásra kerülnek a Xeon Phi-re&lt;br /&gt;
#pragma offload_attribute(push, target(mic))&lt;br /&gt;
  double* A;&lt;br /&gt;
  void MatrixVector(double *b, double *c, double m, double n) {&lt;br /&gt;
    ...&lt;br /&gt;
    c[] = A[..]*b[]&lt;br /&gt;
  }&lt;br /&gt;
// felmásolt objektumok visszamásolása&lt;br /&gt;
#pragma offload_attribute(pop)&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  ...&lt;br /&gt;
#pragma offload target(mic) in(A[0:n*m])&lt;br /&gt;
// így is meg lehetne adni: #pragma offload target(mic:0) in(A : length(n*m))	        &lt;br /&gt;
  {&lt;br /&gt;
    MatrixVector(b, c, m, n);&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ekkor minden memória területet 2x kell másolni, egyszer fel a kártyára, majd másodszor vissza a hoszt gépre, pedig elegendő lenne csak az eredmény vektort visszamásolni. Ezen optimalizálással egy későbbi fejezetben foglalkozunk. &amp;lt;p /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Futás során kaphatunk részletes riportot is, hogy pontosan milyen adatmozgatások történnek az alkalmazás futása során. Ehhez nincs szükség másra csak az '''OFFLOAD_REPORT''' környezeti változó megfelelő beállítása. A beállított értékek 1, 2 vagy 3 lehetnek, attól függően mennyire részletes riportot szeretnénk kapni. &amp;lt;br /&amp;gt;&lt;br /&gt;
beállítás:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OFFLOAD_REPORT=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
példa kimenet a hello alkalmazásra:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hello world from host!&lt;br /&gt;
[Offload] [MIC 0] [File]                    hello_offload.cc&lt;br /&gt;
[Offload] [MIC 0] [Line]                    5&lt;br /&gt;
[Offload] [MIC 0] [Tag]                     Tag 0&lt;br /&gt;
Hello world from coprocessor!&lt;br /&gt;
[Offload] [HOST]  [Tag 0] [CPU Time]        0.554653(seconds)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [CPU-&amp;gt;MIC Data]   0 (bytes)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [MIC Time]        0.000140(seconds)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [MIC-&amp;gt;CPU Data]   0 (bytes)&lt;br /&gt;
Bye&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Offload + OpenMP====&lt;br /&gt;
Amennyiben nem csak 1 processzort szeretnénk használni a Phi kártyánkon és az alkalmazásunkban használt számítás megengedi a párhuzamosítást, akkor az OpenMP segítségével párhuzamosíthatjuk a megfelelő számítást. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:Offload+openmp.png|Offload modell és OpenMP]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánk maradjon ugyanúgy a mátrix-vektor szorzás. Amennyiben a teljes kártya adta kapacitást ki szeretnénk használni, akkor az OMP threadek számát 240-re kell beállítani. Azért nem 244-re, mivel 1 CPU-t dedikáltan csak a kommunikációra használ a rendszer és 1 CPU 4 hardver threaddel rendelkezik.&lt;br /&gt;
Ekkor a példánk így változik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;omp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#pragma offload_attribute(push, target(mic))&lt;br /&gt;
void multiply(int n, int m, double* A, double* b, double* c){&lt;br /&gt;
  const int nCPUs = omp_get_max_threads();   //240&lt;br /&gt;
  omp_set_num_threads(nCPUs);&lt;br /&gt;
#pragma omp parallel for schedule(dynamic, 1)&lt;br /&gt;
  for ( int i = 0 ; i &amp;lt; m ; i++)&lt;br /&gt;
     for ( int j = 0 ; j &amp;lt; n ; j++)&lt;br /&gt;
       c[i] += A[i*n+j] * b[j];&lt;br /&gt;
}&lt;br /&gt;
#pragma offload_attribute(pop)&lt;br /&gt;
&lt;br /&gt;
int main(){&lt;br /&gt;
  double * A = (double*) malloc(sizeof(double)*n*m);&lt;br /&gt;
  ...&lt;br /&gt;
#pragma offload target(mic) in(A:length(n*m))&lt;br /&gt;
     multiply(n, m, A, b, c);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alkalmazás fordításánál a fordítónak meg kell adni, hogy használhja az openmp library-ket is. Ezt a '''-qopenmp''' kapcsolóval tudjuk elérni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
icpc -o matrix-CPU -qopenmp matrix.cc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MPI + Offload + OpenMP====&lt;br /&gt;
Abban az esetben, ha 1 számítási node nem elég, MPI segítségével össze tudunk kötni több nodet, heterogén rendszert alkotva, és azokon alkalmazható a fenti Offload + OpenMP modell. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:Mpi+offload+openmp.png|MPI elosztás valamint Offload modell és OpenMP]] &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Phi használat slurm-mel==&lt;br /&gt;
Slurm esetén a mic opciót kell megadni a gres-knél. Amennyiben egynél több kártyára van szükség, akkor azt a ''mic:2''-vel lehetséges megadni. Ekkor két kártyát foglal le az ütemező a futtatandó feladatnak. &amp;lt;br /&amp;gt;&lt;br /&gt;
Egy lehetséges feladat, amit srun-nal lehet a slurmben beküldeni. debrecen3 esetén a ''prod-phi'' particiót kell használni&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat slurm_job_openmp_phi&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A &amp;lt;PROJECT NEVE&amp;gt;&lt;br /&gt;
#SBATCH --job-name=&amp;lt;JOB NEVE&amp;gt;&lt;br /&gt;
#SBATCH --gres mic:2&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
#SBATCH --partition=prod&lt;br /&gt;
#SBATCH -o slurm-%A.out&lt;br /&gt;
export OMP_NUM_THREADS=2&lt;br /&gt;
./runme_openmp_2phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ekkor a feladat beküldése a következő paranccsal lehetséges.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun ./slurm_job_openmp_phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Alkalmazások optimalizálása a kártyára==&lt;br /&gt;
Ebben a fejezetben optimalizálási lehetőségeket mutatunk be, melyek segítségül szolgálhatnak az egyes alkalmazások hatékonyabb futása érdekében ezzel jobban kihasználni a rendelkezésre álló erőforrások adta számítási kapacitás.&lt;br /&gt;
&lt;br /&gt;
===Környezeti változók===&lt;br /&gt;
Lehetséges csak a Phi kártyákon használt környezeti változók beállítása, amit az alkalmazásunk használni is tud. &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánkban az OpenMP esetén használható szálak számát állíthatjuk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIC_ENV_PREFIX=XEONPHI&lt;br /&gt;
export OMP_NUM_THREADS=12&lt;br /&gt;
export XEONPHI_OMP_NUM_THREADS=240&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A beállított prefix tetszőleges karaktersorozat lehet, a lényeg, hogy ezt a beállított prefixet használjuk a környezeti változók esetén is!&lt;br /&gt;
 &lt;br /&gt;
===Hosszredukció===&lt;br /&gt;
Többnyire a fordítók, ha nem mondjuk meg explicite, a dupla pontosságú változatot választják a lehetséges változó- és függvény típusok közül. Amennyiben a számításunk nem igényli a dupla pontosságot, akkor használjuk a forrásban mindenhol az adott típus vagy függvény egyszeres pontosságú változatát, mellyel jelentős teljesítmény növekedést tudunk elérni. Továbbá az egyes műveletek futási ideje nem egyforma, így a műveletet helyettesíthetjük más művelettel, ami gyorsabb, akkor ismét javíthatunk a hatékonyságon. &amp;lt;br /&amp;gt;&lt;br /&gt;
Íme pár példa, amit alkalmazni lehet:&lt;br /&gt;
* &amp;quot;''/''&amp;quot; művelet helyett &amp;quot;''*''&amp;quot; -t használjunk, mert azt gyorsabban végre tudja hajtani a processzor&lt;br /&gt;
* ''pow'' =&amp;gt; ''1.0 / sqrt()''    , tetszőleges hatványozás, pl.: 3/2-ik hatvány&lt;br /&gt;
* hardver áltatl támogatott műveletek:&lt;br /&gt;
** ''exp'' =&amp;gt; ''exp2''&lt;br /&gt;
** ''log'' =&amp;gt; ''log2''&lt;br /&gt;
* dupla pontosság -&amp;gt; egyszeres pontosság lebegőpontos számok és műveletek esetén &lt;br /&gt;
** ''1.0'' =&amp;gt; ''1.0f''&lt;br /&gt;
** ''pow'' =&amp;gt; ''powf''&lt;br /&gt;
&lt;br /&gt;
===Vektorizáció===&lt;br /&gt;
A vektorizáció azon fordítási időben eldönthető optimalizációs faktor, amely nagy mértékben függ attól a hardver felépítésétől, amire éppen a fordítás történni fog. Legfontosabb befolyásoló tényezők a processzor cache méretei illetve a vektor műveletekért felelős aritmetikai egységének jellemzői mivel ezeket használja fel a fordító az optimalizálási folyamata során. &amp;lt;br /&amp;gt;&lt;br /&gt;
Az automatikus vektorizáció minimum -O2 szinttől érvényes, de mivel általában ez a szint az alapértelmezett, ezért minden fordításnál alkalmazásra kerül. &amp;lt;br /&amp;gt;&lt;br /&gt;
A fordító programnak a következő kapcsolókat lehet megadni, melyek segítenek a minél jobb vektorizációban:&lt;br /&gt;
* ''-qopt-report=&amp;lt;szám&amp;gt;'' ; az optimalizációs jelentés részletességét lehet megadni 0-tól 5-ig, ahol az 5-s szint a legrészletesebbet jelenti&lt;br /&gt;
* ''-qopt-report-phase:vec'' ; a vektorizációról szeretnék jelentést kapni&lt;br /&gt;
* ''-opt-report-file=&amp;lt;fájlnév&amp;gt;'' ; megadható a riportfájl neve&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
icpc autovec.cc -mmic -qopt-report=5 -opt-report-file=vectorization.oMIC.optrpt -qopt-report-phase:vec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SIMD====&lt;br /&gt;
Az adatok hatékonyabb feldolgozására az egyik megvalósítás a SIMD (Single Instruction Multiple Data), amikor is a különálló adatokat úgy kezeli, mintha az vektorok volnának és azon végzi el a vektor-műveletet. Ezzel egy a hardver által támogatott műveletet végzünk egy lépésben egy nagyobb adatmennyiségen, ezzel párhuzamosítva a feldolgozási folyamatot. Ezzel a módszerrel nagyon jó adat szintű párhuzamosítást lehet elérni.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Simd.png|SIMD]]&lt;br /&gt;
&lt;br /&gt;
Főbb támogatott műveletek:&lt;br /&gt;
* aritmetikai műveletek, bináris operátorok&lt;br /&gt;
* összehasonlítások&lt;br /&gt;
* konverziók és típus kasztolások&lt;br /&gt;
* bit-műveletek: NOT, AND, OR, XOR, XAND&lt;br /&gt;
&lt;br /&gt;
Használata: '''simd''' fordítási direktívával lehetséges &amp;lt;br /&amp;gt;&lt;br /&gt;
Például:&lt;br /&gt;
* egyszerű vektorizáció&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  A[i] += B[i];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* adat párhuzamosítás OpenMP segítségével&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  DoSomeWork(A[i]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AoS -&amp;gt; SoA====&lt;br /&gt;
A kiindulás probléma az, hogy a struktúrákat tartalmazó vektort nem lehet jól vektorizálni, mivel a cache-ben tárolt adatok nagy többsége feleslegesen van bent, mivel azon adatokat csak egy későbbi ciklus futás során fogja az alkalmazás feldolgozni. Tehát ezen adatok jelenleg feleslegesen foglalják a cache területet, ahelyett, hogy hasznos adatot tárolnánk ott.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct MyStructure {&lt;br /&gt;
  float x, y, z;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void My_Function(cons int nItem, MyStructure* const Items, const float delta) {&lt;br /&gt;
  for (int i = 0; i &amp;lt; nItem; i++) {&lt;br /&gt;
    ...&lt;br /&gt;
    for (int j = 0; j &amp;lt; nItem; j++) {&lt;br /&gt;
      const float dx = Items[j].x - Items[i].x;&lt;br /&gt;
      const float dy = Items[j].y - Items[i].y;&lt;br /&gt;
      const float dz = Items[j].z - Items[i].z;&lt;br /&gt;
      ...  &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  ... &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A vektorban a struktúrák tárolása helyett minden elemnek egy dedikált vektort allokálunk és így könnyen tudja a fordító vektorizálni azt. Természetesen segítségként a vektor feldolgozását &amp;quot;tömbösítettük&amp;quot; a tileSize méret megadásával illetve a ''unroll'' fordítási direktíva segítségével.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct MyStructureSet {&lt;br /&gt;
  float *x, *y, *z;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void My_Function(cons int nItem, MyStructure* const Items, const float delta) {&lt;br /&gt;
  const int tileSize = 16;&lt;br /&gt;
#pragma omp parallel for schedule(guided)&lt;br /&gt;
  for (int ii = 0; ii &amp;lt; nItem; ii+= tileSize) {&lt;br /&gt;
    ...&lt;br /&gt;
#pragma unroll(tileSize)&lt;br /&gt;
    for (int j = 0; j &amp;lt; nItem; j++) {&lt;br /&gt;
#pragma unroll(tileSize)&lt;br /&gt;
      for (int i = ii; i &amp;lt; ii + tileSize; i++) {&lt;br /&gt;
        const float dx = Items.x[j] - Items.x[i];&lt;br /&gt;
        const float dy = Items.y[j] - Items.y[i];&lt;br /&gt;
        const float dz = Items.z[j] - Items.z[i];&lt;br /&gt;
        ...&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  ... &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Hatékony hossz választás====&lt;br /&gt;
Olyan esetben jelent előnyt, ha például az n*n-es mátrix esetén n nem osztható 16-val, mert akkor a vektorizáció nem teljesen hajtható végre. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// n%16 != 0&lt;br /&gt;
float* A = _mm_malloc(sizeof(float)*n*n, 64);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ilyen esetben mindig marad egy kis vektor részlet, amire elemenként kell elvégezni a műveletet.&amp;lt;br /&amp;gt;&lt;br /&gt;
A megoldást az jelenti, hogy a memória allokálást kiterjesztjük és nagyobb memória területet foglalunk a változónak, így már alkalmazható lesz a vektorizáció, mivel a maradvány területen is el tudjuk végezni a műveletet egy lépésben.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int lda=n;&lt;br /&gt;
if (n % 16 != 0) lda += (16 - n%16); // most lda%16==0&lt;br /&gt;
float* A = _mm_malloc(sizeof(float)*n*lda, 64);&lt;br /&gt;
&lt;br /&gt;
// használat&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  for (int j = 0; j &amp;lt; n; j++)&lt;br /&gt;
    A[i*lda + j] = ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Héj ciklusok&amp;quot; kiküszöbölése====&lt;br /&gt;
Ciklusok esetén lehetséges, hogy a vektorizációt nem teljes mértékben ismeri fel a fordító program. &lt;br /&gt;
Ekkor segíthetünk a fordítónak egy fordítási direktívával ('''#pragma vector aligned'''), ha teljes mértékben biztosak vagyunk, hogy a ciklusunk vektorizálható!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma vector aligned&lt;br /&gt;
  for (int j = 0; j &amp;lt; n; j++)&lt;br /&gt;
    A[i*lda + j] -= ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ettől jelentős futás idejű javulást érhetünk el, mivel ezzel a #pragma-val kikapcsoltuk a futás idejű ellenőrzést, de előfordulhatnak olyan esetek, főleg amikor nem jól mértük fel a ciklusunkat és nem sikerült a vektorizálás, hogy ''Segmentation fault'' hibára fogunk futni.&lt;br /&gt;
&lt;br /&gt;
====Regularizáció====&lt;br /&gt;
Van egy ciklusunk, ami egy vektor elemeit módosítja. A processzor az adatokat &amp;quot;csokorba szedve&amp;quot; emeli be a belső kis méretű cache-be. Egyszerre természetesen több vektor elem is bekerül a a cache-be ezzel gyorsítva a feldolgozást. Ezen vektor iterációk valahogyan ráilleszkedik a vektorra.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:regularization.png|Vektor regularizáció]]&lt;br /&gt;
&lt;br /&gt;
Abban az esetben, amikor ez az illesztés nem teljesen tökéletes (lsd. piros elemek), keletkeznem héj ciklusok, melyeket a regularizációval is eliminálni lehet. &amp;lt;br /&amp;gt;&lt;br /&gt;
A feladat eredetileg valahogyan így nézhet ki:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int i = 0; i&amp;lt;n; i++)&lt;br /&gt;
  A[i]=...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ez a következő átalakítással már alkalmas vektorizációra és nem lesz &amp;quot;peel loop&amp;quot; probléma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int b=0; b&amp;lt;n; b++) {&lt;br /&gt;
  const int jStart = b- b%16; // mindig osztható 16-val&lt;br /&gt;
  ...&lt;br /&gt;
#pragma simd&lt;br /&gt;
  for (int j = jStart; j&amp;lt;n; j++)&lt;br /&gt;
    A[j]=...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Párhuzamosítás===&lt;br /&gt;
Több féle mód létezik a párhuzamosításra. Korábban említettük a SIMD technikát, ami adatpárhuzamosításra való 1 processzoron belül, de létezik még processzorok közti párhuzamosítás, amit az OpenMP segítségével tudunk hatékonyan megvalósítani. Amennyiben gépek közti párhuzamosításra, üzenek küldésre van szükség, akkor az MPI-t kell segítségül hívni. Általános megoldás nem létezik minden feladatra, mert MPI is alkalmas lehet gépen belüli párhuzamosításra, nem csak az OpenMP. Amit mérlegelni kell, hogy mi az amire az alkalmazásnak szükséges van illetve mekkora kommunikációs overhead keletkezik, ha lecseréljük az OpenMP-t MPI-ra. Általában az egymástól független számításokat OpenMP-vel, míg a kommunikációt igénylő feladatokra MPI-t szoktak használni.&lt;br /&gt;
&lt;br /&gt;
====Szálak párhuzamosítása====&lt;br /&gt;
Az OpenMP-nek környezeti változók segítségével megadható a párhuzamosan futtatható szálak száma. Ezt a következő paranccsal tudjuk megtenni, ahol 5-re állítjuk.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Forrásban a párhuzamos szálakat a ''#pragma omp parallel'' segítségével adhatjuk meg.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for              	//külső for szálak párhuzamosítása&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
#pragma simd				// vektorizáció a belső cikluson&lt;br /&gt;
  for (int j = 0; j &amp;lt; m; j++)&lt;br /&gt;
    My_Function(A[i][j]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fordítási direktívák össze is vonhatóak, ilyenkor 1 ciklus is elég.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
    My_Function(A[i]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Változók láthatósága, megosztása=====&lt;br /&gt;
Változók hatókörét a programozási nyelven kívül pragma-k segítségével is beállíthatjuk, hogy megosztott legyen a változó vagy a szálra nézve saját példány. Amennyiben nem definiáljuk felül, akkor minden változó megosztott. A felül definiálást a private és a shared paraméterekkel lehet megadni az OpenMP-nek.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int A, B, C;&lt;br /&gt;
&lt;br /&gt;
#pragma omp parallel private(A) shared(B)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az itteni példában az B és C megosztott változó a szálak között, míg A-t minden szálnak lemásolja a futás kezdetén.&lt;br /&gt;
&lt;br /&gt;
====Párhuzamos szálak ütemezése====&lt;br /&gt;
OpenMp a szálak ütemezésére három féle módod kínál fel.&lt;br /&gt;
Módok:&lt;br /&gt;
* '''static''' (alapértelmezett): egyenletesen arányban egymás után elosztja a processzeket az indított szálakon, ezért a futási idő tetszőlegesen elhúzódhat, ha egyes processzek lassabban futnak le.&lt;br /&gt;
* '''dynamic''': minden esetben az első szabad szálra kerül a következő processz ütemezése, folyamatos kihasználtságot elérve, de &amp;quot;költséges&amp;quot; a sok-sok ütemezés&lt;br /&gt;
* '''guided''': Az előző két mód ötvözése. Nagyobb procesz számot ütemez az éppen szabad szálakra, melyek számát folyamatosan csökkenti a futás előre haladtával, hogy körülbelül egyszerre fejeződjön be minden szál futása, ezzel csökkentve a dynamic esetén magad ütemezési időráfordítást.&lt;br /&gt;
&lt;br /&gt;
Mindhárom esetben megadható az egyszerre ütemezett processzek száma, amit a ''chunk'' értéke határoz meg. Ha megvan adva a chunk értéke, akkor az minden esetben annak megfelelő processzámot ütemez a szálakra.&lt;br /&gt;
Használata:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel [schedule (&amp;lt;mode&amp;gt;,&amp;lt;chunk&amp;gt;) {...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Szálak szinkronizációja====&lt;br /&gt;
Szála szinkronizálását többféle módon lehet megvalósítani, de ezen megoldások sajno jelentősen lelassítják a program futását.&lt;br /&gt;
* mutexxel: nagyon lassú, állandóan várnak egymásra a párhuzamos szálak&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
#pragma omp critical&lt;br /&gt;
  { // kritikus szekció, csak egy szál hajthatja végre&lt;br /&gt;
    total = total + i;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* atomi művelet definiálása: sajnos még ez is lassú, de itt már nem olyan &amp;quot;erős&amp;quot; a szinkronizáció, ezért rendkívül sok limitációja van az itt használható atomi műveleteknek.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
#pragma omp atomic&lt;br /&gt;
   total += i;&lt;br /&gt;
}	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Párhuzamos redukció=====&lt;br /&gt;
Az itt bemutatott eljárás gyorsabb mint a fenti szinkronizációs megoldás, de sajnos nem alkalmazható vektorokra! A redukciót a ''reduction(operation: scalar)'' formában kell megadni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int sum = 0;&lt;br /&gt;
#pragma omp parallel for reduction(+: sum)&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
  sum = sum + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tulajdonképpen a fenti problémakörre a következő minta ad megoldást. Ekkor egy külön változóban akkumuláltatjuk a szál általi összeget és ezen értékeke összegyűjtését végezzük csak atomi műveletként.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int sum = 0;&lt;br /&gt;
#pragma omp parallel&lt;br /&gt;
{&lt;br /&gt;
  int sum_thr = 0;&lt;br /&gt;
#pragma omp for&lt;br /&gt;
  for (int i=0; i&amp;lt;n; i++)&lt;br /&gt;
    sum_thr += i;&lt;br /&gt;
&lt;br /&gt;
#pragma omp atomic&lt;br /&gt;
  sum += sum_thr;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Ciklusok párhuzamosítása====&lt;br /&gt;
Ciklus párhuzamosítására a következő mintát szokás használni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel&lt;br /&gt;
{&lt;br /&gt;
  // Az itt definiált forrást minden szál esetén végre fog hajtani&lt;br /&gt;
  ...&lt;br /&gt;
#pragma omp for [schedule (&amp;lt;mode&amp;gt;,&amp;lt;chunk&amp;gt;)&lt;br /&gt;
  for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
    // Ez a kódrész lesz párhuzamosítva&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
  // ... és ez a köd is minden szál esetén végrehajtódik&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Ciklus kifejtés====&lt;br /&gt;
A technika már egy példa erejéig a vektorizációnál is látható, de ott nem került részletezésre. A megoldás lényege, hogy a kellően nagy ciklust szétdaraboljuk kisebb darabokra, amit már külön feldolgozhatóak, ezzel párhuzamosítva a folyamatokat. Az egy darab kiindulási ciklusból két darab egymásba ágyazott ciklust hozunk létre, ami ugyanazon a feladattéren dolgozik. &lt;br /&gt;
&lt;br /&gt;
Eredeti állapot:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Átírt változat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int STRIP=1024;&lt;br /&gt;
for (int ii = 0; ii &amp;lt; n; ii += STRIP)&lt;br /&gt;
 for (int i = ii; i &amp;lt; ii+STRIP; i++) {...}&lt;br /&gt;
&lt;br /&gt;
// ha még van maradék elem, akkor azokon is végrehajtjuk a számításokat&lt;br /&gt;
if (n%STRIP != 0) {&lt;br /&gt;
  for (i=n-(n%STRIP)+1; i&amp;lt;n; i++) {...}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A darabok mérete (STRIP értéke) az adott rendszer és feladat függvényében változhat, tehát ez egyfajta &amp;quot;tuning&amp;quot; paraméter.&lt;br /&gt;
&lt;br /&gt;
====Automatikus ciklusösszevonás====&lt;br /&gt;
Az OpenMP támogatást nyújt több egymásba ágyazott ciklus &amp;quot;összevonására&amp;quot;. Ehhez csak a '''collaps''' fordítási direktívát és az összevonandó ciklusok számát kell megadni. &amp;lt;br /&amp;gt;&lt;br /&gt;
FONTOS: ekkor az automatikus vektorizáció kikapcsolásra kerül!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for collaps(2)&lt;br /&gt;
for (int i=0; i&amp;lt;n; i++)&lt;br /&gt;
  for( int j=0; j&amp;lt;m; j++){...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fneti példában a 2db for ciklis kerül párhuzamosításra úgy, hogy a fordítás során 1db ciklus generálódik belőle, ami a következő paraméterezéssel ekvivalens:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int c=0; c &amp;lt; n*m; c++) {&lt;br /&gt;
  int i = c/n;&lt;br /&gt;
  int j = c%n;&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3771</id>
		<title>HPC software</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3771"/>
				<updated>2016-05-10T04:56:33Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current version of software on specific machines might be higher than described here. We are encouraging all users to install other tools to be used on our servers if service AUP and license restrictions are respected.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!Software component&lt;br /&gt;
!Debrecen&lt;br /&gt;
!Pécs&lt;br /&gt;
!Szeged&lt;br /&gt;
!Budapest&lt;br /&gt;
!Budapest2&lt;br /&gt;
!Debrecen2,3 (Leo, Apollo)&lt;br /&gt;
!Miskolc&lt;br /&gt;
|-&lt;br /&gt;
| colspan=8| '''Compiler environment (compiler, debugger, profiler)'''&lt;br /&gt;
|-&lt;br /&gt;
| AMD [http://developer.amd.com/tools-and-sdks/cpu-development/x86-open64-compiler-suite/ compilers ((opencc, openf90, openf95))] || colspan=2|-||colspan=2|Available||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| Math. Library (AMD) [http://developer.amd.com/tools/cpu-development/amd-core-math-library-acml ACML] ||colspan=2|-||colspan=2|4.2.4||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://sources.redhat.com/gdb/ GDB] || colspan=2|7|| colspan=2|7.0.1|| colspan=2|7.2||7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/ GNU compilers (gcc, g++, gfortran)]||4,3||4.1.2 || colspan=2|4.1.2, 4.4.4|| colspan=2|4.4.7|| 4.3.4&lt;br /&gt;
|-&lt;br /&gt;
| Gprof|| colspan=2|2,2|| colspan=2|2,17|| colspan=2|2.20|| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| Intel [http://software.intel.com/en-us/articles/intel-composer-xe/ compilers (icc, ifort)], [http://software.intel.com/en-us/articles/intel-math-kernel-library-documentation/ MKL],  [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/ Linking]  ||colspan=2|12.1.5 (composerxe-2011 Update 11) ||colspan=2|-|| colspan=3|16.0&lt;br /&gt;
|- &lt;br /&gt;
| [http://oprofile.sourceforge.net/ Oprofile] ||  colspan=3|- ||0.9.4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Libraries supporting parallel development'''&lt;br /&gt;
|- &lt;br /&gt;
| LAM-MPI ||colspan=2|- ||colspan=2|7.1.2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| MPICH2 ||colspan=2|1,4||colspan=2|1,2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://openmp.org/ OpenMP]||colspan=2|2.5 (GNU), 3.0 (Intel)||colspan=2|2.5 (GNU), 2.5 (AMD) ||colspan=3|2.5 (GNU), 3.0 (Intel)&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.open-mpi.org/ OpenMPI] ||1.4.2 ||1.3.2 ||colspan=2|1.4.3 || colspan=2|1.8.5||1.6.3&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.csm.ornl.gov/pvm/ PVM] ||colspan=4|3.4.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://videotorium.hu/hu/recordings/details/12291,Overview_and_usage_of_the_SGI_HPC_softwares_on_the_SGI_ICE_and_SGI_UV_supercomputers SGI Perf. Suite] ||colspan=2|Available||colspan=2|-||colspan=2|-||Available&lt;br /&gt;
|- &lt;br /&gt;
| SGI-MPI (MPT) ||colspan=2|2,04||colspan=2|-||colspan=2|-||2.12&lt;br /&gt;
|- &lt;br /&gt;
| PGI Compiler and Tools ||colspan=5|-|| 15.10 || -&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Libraries supporting scientific work'''&lt;br /&gt;
|- &lt;br /&gt;
| Atlas ||colspan=4|3.8.3||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| BLACS ||colspan=4|1.1 (OpenMPI, MPICH2) ||-||3.1.3||-&lt;br /&gt;
|- &lt;br /&gt;
| BLAS ||colspan=2|3.2.2 ||colspan=2|3||colspan=2|-||3&lt;br /&gt;
|- &lt;br /&gt;
| Boost||colspan=2|1,36||colspan=2|1,33||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| FFTW ||colspan=2|3.1.2 ||colspan=2|3.2.2||colspan=2|-||3.3.3&lt;br /&gt;
|- &lt;br /&gt;
| Gromacs ||colspan=2|4.5.4 ||colspan=2|4.5.5||colspan=2|-||4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| GUILE ||colspan=2|1.8.5 ||colspan=2|-||colspan=2|-||1.8.8&lt;br /&gt;
|- &lt;br /&gt;
| HDF5 ||colspan=2|1.8.7||colspan=2|-||colspan=2|1.8.17||-&lt;br /&gt;
|- &lt;br /&gt;
| Lapack ||colspan=2|3.2.2 ||colspan=2|3 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.maplesoft.com/ Maple] ||colspan=2| - ||colspan=2|18||-||2015||-&lt;br /&gt;
|- &lt;br /&gt;
| [https://wiki.niif.hu/index.php?title=NIIF_szuperszámítógépek_használata#Matlab_feladatok Matlab] ||colspan=2|7.13.0 (R2011b)|| colspan=2|-||-||R2015b||-&lt;br /&gt;
|- &lt;br /&gt;
| NumPy ||colspan=2|1,3||colspan=2|1.5.1||colspan=2|-||1.7.0&lt;br /&gt;
|- &lt;br /&gt;
| Octave ||colspan=2|3,4||colspan=2|3.0.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Qt||colspan=2|3.3.8b, 4.6.2||colspan=2|3.3.6 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| R ||colspan=2|2.8.1 ||colspan=2|-||colspan=2|-||3.0.1&lt;br /&gt;
|- &lt;br /&gt;
| Scalapack||colspan=4|1.7.5||-||2.0.2||-&lt;br /&gt;
|- &lt;br /&gt;
| Scilab ||colspan=2|5.3.2||colspan=2|-||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Sun JRE ||colspan=2|1,6||colspan=2|-||colspan=1|-||1.8||1.7&lt;br /&gt;
|- &lt;br /&gt;
| Gaussian||colspan=3|09_REV_C.01||-||-||colspan=2|09_REV_D.01&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Middleware'''&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.nordugrid.org/arc/ ARC grid middleware] ||colspan=7|4.1.0 (A-REX, ARIS, clients))&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Miscellaneous software'''&lt;br /&gt;
|- &lt;br /&gt;
| Emacs ||colspan=2|22,3||colspan=2|21,4||-||23.1.1||22.3.1&lt;br /&gt;
|- &lt;br /&gt;
| GNU Plot ||colspan=2|4.2.3 ||colspan=2|4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| ImageMagick ||colspan=2|6.4.3 ||colspan=2|6.2.8||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/About/TigerVNC Turbo VNC]||colspan=4|1,1||colspan=3|2&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.blender.org/ Blender]||colspan=3|2,49||-||colspan=2|2.49||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/ VirtualGL]||colspan=3|2.3.2||-||colspan=2|2.4||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.paraview.org/ Paraview]||colspan=3|3.14.1||-||colspan=3|3.14.1&lt;br /&gt;
|- &lt;br /&gt;
| ffmpeg||colspan=2|-||colspan=2|0.4.9||colspan=3|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Intel_Xeon_Phi&amp;diff=3770</id>
		<title>Intel Xeon Phi</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Intel_Xeon_Phi&amp;diff=3770"/>
				<updated>2016-05-06T11:07:15Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az oldalon található információk segítséget nyújtanak a HPC felhasználóinknak, hogy alkalmazásaikat miként portolhatják valamint optimalizálhatják a hatékonyabb futást szem előtt tartva Intel Xeon Phi koprocesszor kártyákon.&lt;br /&gt;
&lt;br /&gt;
==Hardver bemutatása==&lt;br /&gt;
Intel® Xeon Phi™ Coprocessor 7120P&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fájl:Xeon-phi-family-rwd.png.rendition.intel.web.720.405.png|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
! CPU&lt;br /&gt;
! threads/Core&lt;br /&gt;
!max threads&lt;br /&gt;
! CPU Freq&lt;br /&gt;
! Memória&lt;br /&gt;
! L1 cache&lt;br /&gt;
! L2 cache&lt;br /&gt;
! Interfész&lt;br /&gt;
! Ptot&lt;br /&gt;
! Számítási kapacitás&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 61&lt;br /&gt;
| 4 Hardver&lt;br /&gt;
| 244&lt;br /&gt;
| 1238 GHz&lt;br /&gt;
| 16GB GDDR5&lt;br /&gt;
| 32KB/core&lt;br /&gt;
| 512KB/core&lt;br /&gt;
| PCIe&lt;br /&gt;
| 300W&lt;br /&gt;
| 1,2 TFlop/s dupla pontosság&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| OpenMP-nél csak '''240'''&lt;br /&gt;
|&lt;br /&gt;
| ~100 cycles&lt;br /&gt;
~174 GB/s&lt;br /&gt;
| ~3 cycles&lt;br /&gt;
| ~10 cycles&lt;br /&gt;
| ~7 GB/s&lt;br /&gt;
~1 microsecond&lt;br /&gt;
|&lt;br /&gt;
| 2,4 TFlop/s egyszeres pontosság&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Az Intel® 1. generációs Xeon Phi™ koprocesszorában található 61 processzor ugyanazt a 16GB memóriát éri el, de semmilyen módon se fér hozzá közvetlenül a hoszt gép fizikai memóriájához.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Budapest2_klaszter|Budapest2]] és [[HPC#Szupersz.C3.A1m.C3.ADt.C3.B3g.C3.A9peink_.C3.B6sszehasonl.C3.ADt.C3.A1sa|Debrecen3-Phi]] gépeinkben számítási nodonként 2-2 Phi™ koprocesszor található. &amp;lt;br/&amp;gt;&lt;br /&gt;
A kártyákon speciális célú Linux kernel fut melyre a belépés limitáltan csak a rendszergazdák számára lehetséges SSH-n keresztül a hoszt gépről. Természetesen a kártyára belépve olyan érzésünk lehet, mintha egy sok processzoros gépen dolgoznánk, ami rendelkezik rengeteg memóriával. Ez így is van, de a hatékonyabb kihasználás érdekében az SSH-n keresztüli elérés nem lehetséges, csak a Slurm segítségével valamint a programozási nyelvek által támogatott csatornákon keresztül. Ennek részletezése lentebb megtalálható.&lt;br /&gt;
&lt;br /&gt;
==Használati módok==&lt;br /&gt;
A koprocesszor használatai módjait két csoportba lehet sorolni. A '''natív''' és az '''offload''' használatot.  &amp;lt;br/&amp;gt;&lt;br /&gt;
Ezen használati módokról a lenti fejezetekben több részletet is megtudhat. Az itt megfogalmazott &amp;quot;támogatás&amp;quot; csak a mi infrastruktúránkra érvényes! &amp;lt;br /&amp;gt;&lt;br /&gt;
A bemutatott példák ''c++'' nyelven vannak, de természetesen ''c'' és ''fortran'' esetén is megtalálható az ekvivalens módszer.&lt;br /&gt;
&lt;br /&gt;
===a) nem támogatott mód===&lt;br /&gt;
====közvetlen natív használat====&lt;br /&gt;
A natív mód arra szolgál, hogy a MIC kártyára  lefordított alkalmazásunkat felmásoljuk a kártyára, majd belépünk SSH-n a kártyára és azon futtatjuk a bináris kódunkat. &amp;lt;br /&amp;gt;&lt;br /&gt;
Biztonsági okokból a közvetlen natív használat az NIIF HPC infrastruktúrán nem elérhető. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===b) támogatott, de nem preferált használat===&lt;br /&gt;
====automatikus kódátvitel====&lt;br /&gt;
Ebben az esetben nem kell átmásolnunk a bináris alkalmazásunkat a kártyára sőt még csak be se kell lépnünk, mert ezt a két lépést egy beépített tool végzi el. &amp;lt;br/&amp;gt;&lt;br /&gt;
A tool eléréséhez szükséges parancs neve: '''micnativeloadex'''&lt;br /&gt;
&lt;br /&gt;
Ebben az esetben a workflow a következőképpen módosul:&lt;br /&gt;
# Alkalmazás megírása. például [[Média:hello.cc|''hello.cc'']]&lt;br /&gt;
# Alkalmazás fordítása &amp;lt;br/&amp;gt; &amp;lt;pre&amp;gt;icpc -o hello-MIC -mmic hello.cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
# A tool futásához szükséges library-k megadása &amp;lt;br&amp;gt; &amp;lt;pre&amp;gt;export SINK_LD_LIBRARY_PATH=/opt/intel/composerxe/compiler/lib/mic&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Alkalmazás futtatása &amp;lt;br/&amp;gt; &amp;lt;pre&amp;gt;micnativeloadex hello-MIC&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| BUDAPEST2[cn10] phi (0)$ export SINK_LD_LIBRARY_PATH=/opt/intel/composerxe/compiler/lib/mic &amp;lt;br/&amp;gt;BUDAPEST2[cn10] phi (0)$ micnativeloadex hello-MIC &amp;lt;br/&amp;gt;Hello world! I have 244 logical cores.&amp;lt;br/&amp;gt;BUDAPEST2[cn10] phi (0)$&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===c) támogatott módok===&lt;br /&gt;
====Offload====&lt;br /&gt;
Az Offload modell esetén szükséges a forráskód módosítása, mégpedig úgy, hogy azon kódrészletet, amit a koprocesszoron szeretnénk futtatni, ki kell egészíteni egy fordítási direktívával. Az alkalmazás fordításakor elegendő csak a CPU-ra való binárist készíteni mivel a modell végzi a megfelelő forrás részlet mozgatását és futtatását.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:offload.png|Offload modell]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánkban jól látható, hogy a második kiíratás már a koprocesszoron fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main(int argc, char * argv[]) {&lt;br /&gt;
  printf(&amp;quot;Hello world from host!\n&amp;quot;);&lt;br /&gt;
#pragma offload target(mic)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;Hello world from coprocessor!\n&amp;quot;); fflush(stdout);&lt;br /&gt;
  }&lt;br /&gt;
  printf(&amp;quot;Bye\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebben a példában az operációs rendszer választja ki, hogy melyik Phi kártyán fusson le a kódrészlet. Amennyiben mi szeretnénk explicite megmondani, hogy melyik kártyán fusson, akkor a fordítási direktívában a mic kulcsszó után kell tenni egy &amp;quot;:&amp;quot;-t és a kártya sorszámát [mi esetünkben 0 vagy 1]. Ekkor így nézne ki a direktíva: ''#pragma offload target(mic:1)''&lt;br /&gt;
&lt;br /&gt;
Amennyiben az offload szekcióban függvény hívás is szerepel, akkor szükségeltetik az függvény futásához szükséges változók adatterületének átmásolása a Phi kártyára, majd a lefutás után visszamásolni a hoszt gépre. Ezen másolást az ''offload_attribute'' ''push'' és ''pop'' paraméterei segítségével határozhatjuk meg. &amp;lt;br /&amp;gt;&lt;br /&gt;
A következő mátrix-vektor szorzás példánál az A mátrix globális változó, míg a b és c vektorok a függvény paraméterei.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//A változók felmásolásra kerülnek a Xeon Phi-re&lt;br /&gt;
#pragma offload_attribute(push, target(mic))&lt;br /&gt;
  double* A;&lt;br /&gt;
  void MatrixVector(double *b, double *c, double m, double n) {&lt;br /&gt;
    ...&lt;br /&gt;
    c[] = A[..]*b[]&lt;br /&gt;
  }&lt;br /&gt;
// felmásolt objektumok visszamásolása&lt;br /&gt;
#pragma offload_attribute(pop)&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  ...&lt;br /&gt;
#pragma offload target(mic) in(A[0:n*m])&lt;br /&gt;
// így is meg lehetne adni: #pragma offload target(mic:0) in(A : length(n*m))	        &lt;br /&gt;
  {&lt;br /&gt;
    MatrixVector(b, c, m, n);&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ekkor minden memória területet 2x kell másolni, egyszer fel a kártyára, majd másodszor vissza a hoszt gépre, pedig elegendő lenne csak az eredmény vektort visszamásolni. Ezen optimalizálással egy későbbi fejezetben foglalkozunk. &amp;lt;p /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Futás során kaphatunk részletes riportot is, hogy pontosan milyen adatmozgatások történnek az alkalmazás futása során. Ehhez nincs szükség másra csak az '''OFFLOAD_REPORT''' környezeti változó megfelelő beállítása. A beállított értékek 1, 2 vagy 3 lehetnek, attól függően mennyire részletes riportot szeretnénk kapni. &amp;lt;br /&amp;gt;&lt;br /&gt;
beállítás:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OFFLOAD_REPORT=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
példa kimenet a hello alkalmazásra:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hello world from host!&lt;br /&gt;
[Offload] [MIC 0] [File]                    hello_offload.cc&lt;br /&gt;
[Offload] [MIC 0] [Line]                    5&lt;br /&gt;
[Offload] [MIC 0] [Tag]                     Tag 0&lt;br /&gt;
Hello world from coprocessor!&lt;br /&gt;
[Offload] [HOST]  [Tag 0] [CPU Time]        0.554653(seconds)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [CPU-&amp;gt;MIC Data]   0 (bytes)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [MIC Time]        0.000140(seconds)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [MIC-&amp;gt;CPU Data]   0 (bytes)&lt;br /&gt;
Bye&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Offload + OpenMP====&lt;br /&gt;
Amennyiben nem csak 1 processzort szeretnénk használni a Phi kártyánkon és az alkalmazásunkban használt számítás megengedi a párhuzamosítást, akkor az OpenMP segítségével párhuzamosíthatjuk a megfelelő számítást. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:Offload+openmp.png|Offload modell és OpenMP]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánk maradjon ugyanúgy a mátrix-vektor szorzás. Amennyiben a teljes kártya adta kapacitást ki szeretnénk használni, akkor az OMP threadek számát 240-re kell beállítani. Azért nem 244-re, mivel 1 CPU-t dedikáltan csak a kommunikációra használ a rendszer és 1 CPU 4 hardver threaddel rendelkezik.&lt;br /&gt;
Ekkor a példánk így változik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;omp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#pragma offload_attribute(push, target(mic))&lt;br /&gt;
void multiply(int n, int m, double* A, double* b, double* c){&lt;br /&gt;
  const int nCPUs = omp_get_max_threads();   //240&lt;br /&gt;
  omp_set_num_threads(nCPUs);&lt;br /&gt;
#pragma omp parallel for schedule(dynamic, 1)&lt;br /&gt;
  for ( int i = 0 ; i &amp;lt; m ; i++)&lt;br /&gt;
     for ( int j = 0 ; j &amp;lt; n ; j++)&lt;br /&gt;
       c[i] += A[i*n+j] * b[j];&lt;br /&gt;
}&lt;br /&gt;
#pragma offload_attribute(pop)&lt;br /&gt;
&lt;br /&gt;
int main(){&lt;br /&gt;
  double * A = (double*) malloc(sizeof(double)*n*m);&lt;br /&gt;
  ...&lt;br /&gt;
#pragma offload target(mic) in(A:length(n*m))&lt;br /&gt;
     multiply(n, m, A, b, c);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alkalmazás fordításánál a fordítónak meg kell adni, hogy használhja az openmp library-ket is. Ezt a '''-qopenmp''' kapcsolóval tudjuk elérni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
icpc -o matrix-CPU -qopenmp matrix.cc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MPI + Offload + OpenMP====&lt;br /&gt;
Abban az esetben, ha 1 számítási node nem elég, MPI segítségével össze tudunk kötni több nodet, heterogén rendszert alkotva, és azokon alkalmazható a fenti Offload + OpenMP modell. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:Mpi+offload+openmp.png|MPI elosztás valamint Offload modell és OpenMP]] &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Phi használat slurm-mel==&lt;br /&gt;
Slurm esetén a mic opciót kell megadni a gres-knél. Amennyiben egynél több kártyára van szükség, akkor azt a ''mic:2''-vel lehetséges megadni. Ekkor két kártyát foglal le az ütemező a futtatandó feladatnak. &amp;lt;br /&amp;gt;&lt;br /&gt;
Egy lehetséges feladat, amit srun-nal lehet a slurmben beküldeni. debrecen3 esetén a ''prod-phi'' particiót kell használni&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat slurm_job_openmp_phi&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A &amp;lt;PROJECT NEVE&amp;gt;&lt;br /&gt;
#SBATCH --job-name=&amp;lt;JOB NEVE&amp;gt;&lt;br /&gt;
#SBATCH --gres mic:2&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
#SBATCH --partition=prod&lt;br /&gt;
#SBATCH -o slurm-%A.out&lt;br /&gt;
export OMP_NUM_THREADS=2&lt;br /&gt;
./runme_openmp_2phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ekkor a feladat beküldése a következő paranccsal lehetséges.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun ./slurm_job_openmp_phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Alkalmazások optimalizálása a kártyára==&lt;br /&gt;
Ebben a fejezetben optimalizálási lehetőségeket mutatunk be, melyek segítségül szolgálhatnak az egyes alkalmazások hatékonyabb futása érdekében ezzel jobban kihasználni a rendelkezésre álló erőforrások adta számítási kapacitás.&lt;br /&gt;
&lt;br /&gt;
===Környezeti változók===&lt;br /&gt;
Lehetséges csak a Phi kártyákon használt környezeti változók beállítása, amit az alkalmazásunk használni is tud. &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánkban az OpenMP esetén használható szálak számát állíthatjuk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIC_ENV_PREFIX=XEONPHI&lt;br /&gt;
export OMP_NUM_THREADS=12&lt;br /&gt;
export XEONPHI_OMP_NUM_THREADS=240&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A beállított prefix tetszőleges karaktersorozat lehet, a lényeg, hogy ezt a beállított prefixet használjuk a környezeti változók esetén is!&lt;br /&gt;
 &lt;br /&gt;
===Hosszredukció===&lt;br /&gt;
Többnyire a fordítók, ha nem mondjuk meg explicite, a dupla pontosságú változatot választják a lehetséges változó- és függvény típusok közül. Amennyiben a számításunk nem igényli a dupla pontosságot, akkor használjuk a forrásban mindenhol az adott típus vagy függvény egyszeres pontosságú változatát, mellyel jelentős teljesítmény növekedést tudunk elérni. Továbbá az egyes műveletek futási ideje nem egyforma, így a műveletet helyettesíthetjük más művelettel, ami gyorsabb, akkor ismét javíthatunk a hatékonyságon. &amp;lt;br /&amp;gt;&lt;br /&gt;
Íme pár példa, amit alkalmazni lehet:&lt;br /&gt;
* &amp;quot;''/''&amp;quot; művelet helyett &amp;quot;''*''&amp;quot; -t használjunk, mert azt gyorsabban végre tudja hajtani a processzor&lt;br /&gt;
* ''pow'' =&amp;gt; ''1.0 / sqrt()''    , tetszőleges hatványozás, pl.: 3/2-ik hatvány&lt;br /&gt;
* hardver áltatl támogatott műveletek:&lt;br /&gt;
** ''exp'' =&amp;gt; ''exp2''&lt;br /&gt;
** ''log'' =&amp;gt; ''log2''&lt;br /&gt;
* dupla pontosság -&amp;gt; egyszeres pontosság lebegőpontos számok és műveletek esetén &lt;br /&gt;
** ''1.0'' =&amp;gt; ''1.0f''&lt;br /&gt;
** ''pow'' =&amp;gt; ''powf''&lt;br /&gt;
&lt;br /&gt;
===Vektorizáció===&lt;br /&gt;
A vektorizáció azon fordítási időben eldönthető optimalizációs faktor, amely nagy mértékben függ attól a hardver felépítésétől, amire éppen a fordítás történni fog. Legfontosabb befolyásoló tényezők a processzor cache méretei illetve a vektor műveletekért felelős aritmetikai egységének jellemzői mivel ezeket használja fel a fordító az optimalizálási folyamata során. &amp;lt;br /&amp;gt;&lt;br /&gt;
Az automatikus vektorizáció minimum -O2 szinttől érvényes, de mivel általában ez a szint az alapértelmezett, ezért minden fordításnál alkalmazásra kerül. &amp;lt;br /&amp;gt;&lt;br /&gt;
A fordító programnak a következő kapcsolókat lehet megadni, melyek segítenek a minél jobb vektorizációban:&lt;br /&gt;
* ''-qopt-report=&amp;lt;szám&amp;gt;'' ; az optimalizációs jelentés részletességét lehet megadni 0-tól 5-ig, ahol az 5-s szint a legrészletesebbet jelenti&lt;br /&gt;
* ''-qopt-report-phase:vec'' ; a vektorizációról szeretnék jelentést kapni&lt;br /&gt;
* ''-opt-report-file=&amp;lt;fájlnév&amp;gt;'' ; megadható a riportfájl neve&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
icpc autovec.cc -mmic -qopt-report=5 -opt-report-file=vectorization.oMIC.optrpt -qopt-report-phase:vec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SIMD====&lt;br /&gt;
Az adatok hatékonyabb feldolgozására az egyik megvalósítás a SIMD (Single Instruction Multiple Data), amikor is a különálló adatokat úgy kezeli, mintha az vektorok volnának és azon végzi el a vektor-műveletet. Ezzel egy a hardver által támogatott műveletet végzünk egy lépésben egy nagyobb adatmennyiségen, ezzel párhuzamosítva a feldolgozási folyamatot. Ezzel a módszerrel nagyon jó adat szintű párhuzamosítást lehet elérni.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Simd.png|SIMD]]&lt;br /&gt;
&lt;br /&gt;
Főbb támogatott műveletek:&lt;br /&gt;
* aritmetikai műveletek, bináris operátorok&lt;br /&gt;
* összehasonlítások&lt;br /&gt;
* konverziók és típus kasztolások&lt;br /&gt;
* bit-műveletek: NOT, AND, OR, XOR, XAND&lt;br /&gt;
&lt;br /&gt;
Használata: '''simd''' fordítási direktívával lehetséges &amp;lt;br /&amp;gt;&lt;br /&gt;
Például:&lt;br /&gt;
* egyszerű vektorizáció&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  A[i] += B[i];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* adat párhuzamosítás OpenMP segítségével&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  DoSomeWork(A[i]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AoS -&amp;gt; SoA====&lt;br /&gt;
A kiindulás probléma az, hogy a struktúrákat tartalmazó vektort nem lehet jól vektorizálni, mivel a cache-ben tárolt adatok nagy többsége feleslegesen van bent, mivel azon adatokat csak egy későbbi ciklus futás során fogja az alkalmazás feldolgozni. Tehát ezen adatok jelenleg feleslegesen foglalják a cache területet, ahelyett, hogy hasznos adatot tárolnánk ott.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct MyStructure {&lt;br /&gt;
  float x, y, z;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void My_Function(cons int nItem, MyStructure* const Items, const float delta) {&lt;br /&gt;
  for (int i = 0; i &amp;lt; nItem; i++) {&lt;br /&gt;
    ...&lt;br /&gt;
    for (int j = 0; j &amp;lt; nItem; j++) {&lt;br /&gt;
      const float dx = Items[j].x - Items[i].x;&lt;br /&gt;
      const float dy = Items[j].y - Items[i].y;&lt;br /&gt;
      const float dz = Items[j].z - Items[i].z;&lt;br /&gt;
      ...  &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  ... &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A vektorban a struktúrák tárolása helyett minden elemnek egy dedikált vektort allokálunk és így könnyen tudja a fordító vektorizálni azt. Természetesen segítségként a vektor feldolgozását &amp;quot;tömbösítettük&amp;quot; a tileSize méret megadásával illetve a ''unroll'' fordítási direktíva segítségével.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct MyStructureSet {&lt;br /&gt;
  float *x, *y, *z;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void My_Function(cons int nItem, MyStructure* const Items, const float delta) {&lt;br /&gt;
  const int tileSize = 16;&lt;br /&gt;
#pragma omp parallel for schedule(guided)&lt;br /&gt;
  for (int ii = 0; ii &amp;lt; nItem; ii+= tileSize) {&lt;br /&gt;
    ...&lt;br /&gt;
#pragma unroll(tileSize)&lt;br /&gt;
    for (int j = 0; j &amp;lt; nItem; j++) {&lt;br /&gt;
#pragma unroll(tileSize)&lt;br /&gt;
      for (int i = ii; i &amp;lt; ii + tileSize; i++) {&lt;br /&gt;
        const float dx = Items.x[j] - Items.x[i];&lt;br /&gt;
        const float dy = Items.y[j] - Items.y[i];&lt;br /&gt;
        const float dz = Items.z[j] - Items.z[i];&lt;br /&gt;
        ...&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  ... &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Hatékony hossz választás====&lt;br /&gt;
Olyan esetben jelent előnyt, ha például az n*n-es mátrix esetén n nem osztható 16-val, mert akkor a vektorizáció nem teljesen hajtható végre. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// n%16 != 0&lt;br /&gt;
float* A = _mm_malloc(sizeof(float)*n*n, 64);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ilyen esetben mindig marad egy kis vektor részlet, amire elemenként kell elvégezni a műveletet.&amp;lt;br /&amp;gt;&lt;br /&gt;
A megoldást az jelenti, hogy a memória allokálást kiterjesztjük és nagyobb memória területet foglalunk a változónak, így már alkalmazható lesz a vektorizáció, mivel a maradvány területen is el tudjuk végezni a műveletet egy lépésben.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int lda=n;&lt;br /&gt;
if (n % 16 != 0) lda += (16 - n%16); // most lda%16==0&lt;br /&gt;
float* A = _mm_malloc(sizeof(float)*n*lda, 64);&lt;br /&gt;
&lt;br /&gt;
// használat&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  for (int j = 0; j &amp;lt; n; j++)&lt;br /&gt;
    A[i*lda + j] = ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Héj ciklusok&amp;quot; kiküszöbölése====&lt;br /&gt;
Ciklusok esetén lehetséges, hogy a vektorizációt nem teljes mértékben ismeri fel a fordító program. &lt;br /&gt;
Ekkor segíthetünk a fordítónak egy fordítási direktívával ('''#pragma vector aligned'''), ha teljes mértékben biztosak vagyunk, hogy a ciklusunk vektorizálható!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma vector aligned&lt;br /&gt;
  for (int j = 0; j &amp;lt; n; j++)&lt;br /&gt;
    A[i*lda + j] -= ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ettől jelentős futás idejű javulást érhetünk el, mivel ezzel a #pragma-val kikapcsoltuk a futás idejű ellenőrzést, de előfordulhatnak olyan esetek, főleg amikor nem jól mértük fel a ciklusunkat és nem sikerült a vektorizálás, hogy ''Segmentation fault'' hibára fogunk futni.&lt;br /&gt;
&lt;br /&gt;
====Regularizáció====&lt;br /&gt;
Van egy ciklusunk, ami egy vektor elemeit módosítja. A processzor az adatokat &amp;quot;csokorba szedve&amp;quot; emeli be a belső kis méretű cache-be. Egyszerre természetesen több vektor elem is bekerül a a cache-be ezzel gyorsítva a feldolgozást. Ezen vektor iterációk valahogyan ráilleszkedik a vektorra.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:regularization.png|Vektor regularizáció]]&lt;br /&gt;
&lt;br /&gt;
Abban az esetben, amikor ez az illesztés nem teljesen tökéletes (lsd. piros elemek), keletkeznem héj ciklusok, melyeket a regularizációval is eliminálni lehet. &amp;lt;br /&amp;gt;&lt;br /&gt;
A feladat eredetileg valahogyan így nézhet ki:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int i = 0; i&amp;lt;n; i++)&lt;br /&gt;
  A[i]=...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ez a következő átalakítással már alkalmas vektorizációra és nem lesz &amp;quot;peel loop&amp;quot; probléma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int b=0; b&amp;lt;n; b++) {&lt;br /&gt;
  const int jStart = b- b%16; // mindig osztható 16-val&lt;br /&gt;
  ...&lt;br /&gt;
#pragma simd&lt;br /&gt;
  for (int j = jStart; j&amp;lt;n; j++)&lt;br /&gt;
    A[j]=...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Párhuzamosítás===&lt;br /&gt;
Több féle mód létezik a párhuzamosításra. Korábban említettük a SIMD technikát, ami adatpárhuzamosításra való 1 processzoron belül, de létezik még processzorok közti párhuzamosítás, amit az OpenMP segítségével tudunk hatékonyan megvalósítani. Amennyiben gépek közti párhuzamosításra, üzenek küldésre van szükség, akkor az MPI-t kell segítségül hívni. Általános megoldás nem létezik minden feladatra, mert MPI is alkalmas lehet gépen belüli párhuzamosításra, nem csak az OpenMP. Amit mérlegelni kell, hogy mi az amire az alkalmazásnak szükséges van illetve mekkora kommunikációs overhead keletkezik, ha lecseréljük az OpenMP-t MPI-ra. Általában az egymástól független számításokat OpenMP-vel, míg a kommunikációt igénylő feladatokra MPI-t szoktak használni.&lt;br /&gt;
&lt;br /&gt;
====Szálak párhuzamosítása====&lt;br /&gt;
Az OpenMP-nek környezeti változók segítségével megadható a párhuzamosan futtatható szálak száma. Ezt a következő paranccsal tudjuk megtenni, ahol 5-re állítjuk.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Forrásban a párhuzamos szálakat a ''#pragma omp parallel'' segítségével adhatjuk meg.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for              	//külső for szálak párhuzamosítása&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
#pragma simd				// vektorizáció a belső cikluson&lt;br /&gt;
  for (int j = 0; j &amp;lt; m; j++)&lt;br /&gt;
    My_Function(A[i][j]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fordítási direktívák össze is vonhatóak, ilyenkor 1 ciklus is elég.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
    My_Function(A[i]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Változók láthatósága, megosztása=====&lt;br /&gt;
Változók hatókörét a programozási nyelven kívül pragma-k segítségével is beállíthatjuk, hogy megosztott legyen a változó vagy a szálra nézve saját példány. Amennyiben nem definiáljuk felül, akkor minden változó megosztott. A felül definiálást a private és a shared paraméterekkel lehet megadni az OpenMP-nek.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int A, B, C;&lt;br /&gt;
&lt;br /&gt;
#pragma omp parallel private(A) shared(B)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az itteni példában az B és C megosztott változó a szálak között, míg A-t minden szálnak lemásolja a futás kezdetén.&lt;br /&gt;
&lt;br /&gt;
====Párhuzamos szálak ütemezése====&lt;br /&gt;
OpenMp a szálak ütemezésére három féle módod kínál fel.&lt;br /&gt;
Módok:&lt;br /&gt;
* '''static''' (alapértelmezett): egyenletesen arányban egymás után elosztja a processzeket az indított szálakon, ezért a futási idő tetszőlegesen elhúzódhat, ha egyes processzek lassabban futnak le.&lt;br /&gt;
* '''dynamic''': minden esetben az első szabad szálra kerül a következő processz ütemezése, folyamatos kihasználtságot elérve, de &amp;quot;költséges&amp;quot; a sok-sok ütemezés&lt;br /&gt;
* '''guided''': Az előző két mód ötvözése. Nagyobb procesz számot ütemez az éppen szabad szálakra, melyek számát folyamatosan csökkenti a futás előre haladtával, hogy körülbelül egyszerre fejeződjön be minden szál futása, ezzel csökkentve a dynamic esetén magad ütemezési időráfordítást.&lt;br /&gt;
&lt;br /&gt;
Mindhárom esetben megadható az egyszerre ütemezett processzek száma, amit a ''chunk'' értéke határoz meg. Ha megvan adva a chunk értéke, akkor az minden esetben annak megfelelő processzámot ütemez a szálakra.&lt;br /&gt;
Használata:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel [schedule (&amp;lt;mode&amp;gt;,&amp;lt;chunk&amp;gt;) {...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Szálak szinkronizációja====&lt;br /&gt;
Szála szinkronizálását többféle módon lehet megvalósítani, de ezen megoldások sajno jelentősen lelassítják a program futását.&lt;br /&gt;
* mutexxel: nagyon lassú, állandóan várnak egymásra a párhuzamos szálak&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
#pragma omp critical&lt;br /&gt;
  { // kritikus szekció, csak egy szál hajthatja végre&lt;br /&gt;
    total = total + i;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* atomi művelet definiálása: sajnos még ez is lassú, de itt már nem olyan &amp;quot;erős&amp;quot; a szinkronizáció, ezért rendkívül sok limitációja van az itt használható atomi műveleteknek.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
#pragma omp atomic&lt;br /&gt;
   total += i;&lt;br /&gt;
}	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Párhuzamos redukció=====&lt;br /&gt;
Az itt bemutatott eljárás gyorsabb mint a fenti szinkronizációs megoldás, de sajnos nem alkalmazható vektorokra! A redukciót a ''reduction(operation: scalar)'' formában kell megadni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int sum = 0;&lt;br /&gt;
#pragma omp parallel for reduction(+: sum)&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
  sum = sum + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tulajdonképpen a fenti problémakörre a következő minta ad megoldást. Ekkor egy külön változóban akkumuláltatjuk a szál általi összeget és ezen értékeke összegyűjtését végezzük csak atomi műveletként.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int sum = 0;&lt;br /&gt;
#pragma omp parallel&lt;br /&gt;
{&lt;br /&gt;
  int sum_thr = 0;&lt;br /&gt;
#pragma omp for&lt;br /&gt;
  for (int i=0; i&amp;lt;n; i++)&lt;br /&gt;
    sum_thr += i;&lt;br /&gt;
&lt;br /&gt;
#pragma omp atomic&lt;br /&gt;
  sum += sum_thr;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Ciklusok párhuzamosítása====&lt;br /&gt;
Ciklus párhuzamosítására a következő mintát szokás használni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel&lt;br /&gt;
{&lt;br /&gt;
  // Az itt definiált forrást minden szál esetén végre fog hajtani&lt;br /&gt;
  ...&lt;br /&gt;
#pragma omp for [schedule (&amp;lt;mode&amp;gt;,&amp;lt;chunk&amp;gt;)&lt;br /&gt;
  for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
    // Ez a kódrész lesz párhuzamosítva&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
  // ... és ez a köd is minden szál esetén végrehajtódik&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Ciklus kifejtés====&lt;br /&gt;
A technika már egy példa erejéig a vektorizációnál is látható, de ott nem került részletezésre. A megoldás lényege, hogy a kellően nagy ciklust szétdaraboljuk kisebb darabokra, amit már külön feldolgozhatóak, ezzel párhuzamosítva a folyamatokat. Az egy darab kiindulási ciklusból két darab egymásba ágyazott ciklust hozunk létre, ami ugyanazon a feladattéren dolgozik. &lt;br /&gt;
&lt;br /&gt;
Eredeti állapot:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Átírt változat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int STRIP=1024;&lt;br /&gt;
for (int ii = 0; ii &amp;lt; n; ii += STRIP)&lt;br /&gt;
 for (int i = ii; i &amp;lt; ii+STRIP; i++) {...}&lt;br /&gt;
&lt;br /&gt;
// ha még van maradék elem, akkor azokon is végrehajtjuk a számításokat&lt;br /&gt;
if (n%STRIP != 0) {&lt;br /&gt;
  for (i=n-(n%STRIP)+1; i&amp;lt;n; i++) {...}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A darabok mérete (STRIP értéke) az adott rendszer és feladat függvényében változhat, tehát ez egyfajta &amp;quot;tuning&amp;quot; paraméter.&lt;br /&gt;
&lt;br /&gt;
====Automatikus ciklusösszevonás====&lt;br /&gt;
Az OpenMP támogatást nyújt több egymásba ágyazott ciklus &amp;quot;összevonására&amp;quot;. Ehhez csak a '''collaps''' fordítási direktívát és az összevonandó ciklusok számát kell megadni. &amp;lt;br /&amp;gt;&lt;br /&gt;
FONTOS: ekkor az automatikus vektorizáció kikapcsolásra kerül!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for collaps(2)&lt;br /&gt;
for (int i=0; i&amp;lt;n; i++)&lt;br /&gt;
  for( int j=0; j&amp;lt;m; j++){...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fneti példában a 2db for ciklis kerül párhuzamosításra úgy, hogy a fordítás során 1db ciklus generálódik belőle, ami a következő paraméterezéssel ekvivalens:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int c=0; c &amp;lt; n*m; c++) {&lt;br /&gt;
  int i = c/n;&lt;br /&gt;
  int j = c%n;&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Debrecen2_GPU_klaszter&amp;diff=3769</id>
		<title>Debrecen2 GPU klaszter</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Debrecen2_GPU_klaszter&amp;diff=3769"/>
				<updated>2016-05-06T10:19:32Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Klaszter&lt;br /&gt;
| Debrecen2 (Leo)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP SL250s&lt;br /&gt;
|- &lt;br /&gt;
| core / node&lt;br /&gt;
| 8 × 2 Xeon E5-2650v2 2.60GHz  &lt;br /&gt;
|- &lt;br /&gt;
| GPU / node&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok&lt;br /&gt;
| 84 db&lt;br /&gt;
|-&lt;br /&gt;
| Max Walltime&lt;br /&gt;
| 7-00:00:00&lt;br /&gt;
|-&lt;br /&gt;
| Max core-ok / projekt&lt;br /&gt;
| 336 (21db node)&lt;br /&gt;
|-&lt;br /&gt;
| Max mem / core&lt;br /&gt;
| 7800 MB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CPU idő kérés ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ATTENTION|A CPU idő igénylésekor egy olyan rövid indoklást várunk a HPC projekt vezetőktől, amiből kiderül, hogy a futtatandó alkalmazás képes GPU-t használni (ez alól kivétel, ha a felhasználás célja a gépen elérhető licenszelt szoftver használata, amennyiben az nem képes GPU-t használni (pl. Gaussian, Maple)). Erre azért van szükség, mert az erőforrás teljesítményének nagyobbik része GPU gyorsításból származik, egy gyorsítás nélküli program a CPU-kat lefoglalja, korlátozva ezzel a GPU-k használatát, ami kihasználatlansághoz vezet. Az NVidia  [http://www.nvidia.com/object/gpu-applications.html közzétett egy listát] arról, hogy melyik alkalmazás rendelkezik jelenleg hivatalosan NVidia GPU támogatással, de természetesen egyéb, GPU-t használó program is nagy valószínűséggel jól fut a gépen.&lt;br /&gt;
&lt;br /&gt;
* A GPU programozás iránt érdeklődőknek tartottunk egy workshopot, amelynek video anyagai elérhetőek itt:  [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Belépés ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh USER@login.debrecen2.hpc.niif.hu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nem alapértelmezett kulcs használata esetén a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval megadása szükséges (SSH és SCP parancsok).&lt;br /&gt;
&lt;br /&gt;
=== Fájlok másolása SCP-vel ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  scp FILE USER@login.debrecen2.hpc.niif.hu:FILE&lt;br /&gt;
Le :  scp USER@login.debrecen2.hpc.niif.hu:FILE FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatszinkronizáció ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  rsync -a -e ssh DIRECTORY USER@login.debrecen2.hpc.niif.hu:/home/USER&lt;br /&gt;
Le :  rsync -a -e ssh USER@login.debrecen2.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A törölt fájlok szinkronizálásához a &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt; opciót kell megadni.&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                     |&lt;br /&gt;
    DEBRECEN2[login] ~ (0)$&lt;br /&gt;
        |       |       |&lt;br /&gt;
   HPC állomás  |       |&lt;br /&gt;
         rövid gép név  |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rx $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Addott könyvtárat (DIRECTORY) írahtóvá:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rxw $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A kiterjesztett jogokat a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getfacl $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még elérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
bob *                7 |           foobar           7 |         1,000         993&lt;br /&gt;
alice                0 |           foobar           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csökkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== GPU-k lefoglalása ====&lt;br /&gt;
A GPU-k lefoglalása a következő direktívával törénik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=gpu:N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; a GPU-k/node számát adja meg, ami 1, 2 és 3 lehet maximum.&lt;br /&gt;
&lt;br /&gt;
==== Interaktív használat ====&lt;br /&gt;
Rövid interaktív feladatokat az 'srun' paranccsal tudunk beküldeni, pl.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun -l -n 1 -t TIME --gres=gpu:1 -A ACCOUNT APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Batch job-ok indítása ====&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch slurm.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépen két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a &amp;lt;code&amp;gt;prod-gpu-k40&amp;lt;/code&amp;gt; sor és a &amp;lt;code&amp;gt;prod-gpu-k20&amp;lt;/code&amp;gt; sor. Mind a kettő éles számolásokra való, az első olyan CN gépeket tartalmaz amikben Nvidia K40x GPU-k, a másodikban pedig Nvidia K20x GPU-k vannak. Az alapértelmezett sor a &amp;lt;code&amp;gt; prod-gpu-k20&amp;lt;/code&amp;gt;. A prod-gpu-k40 partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=prod-gpu-k40&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. A maximális memória/core 7800 MB lehet.&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=8&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
mpirun --report-pid ${TMPDIR}/mpirun.pid PROGRAM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenMPI FAQ: http://www.open-mpi.org/faq&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=8&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 8 CPU core-t rendeltunk, a 8 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 8 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 8 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 8 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=8&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Maple Grid feladatok ====&lt;br /&gt;
Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (&amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/startserver&amp;lt;/code&amp;gt;). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (&amp;lt;code&amp;gt;#SBATCH --licenses=maplegrid:1&amp;lt;/code&amp;gt;). A Maple feladat indátását a &amp;lt;code&amp;gt;${MAPLE}/toolbox/Grid/bin/joblauncher&amp;lt;/code&amp;gt; paranccsal kell elvégezni.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=maple&lt;br /&gt;
#SBATCH -N 1&lt;br /&gt;
#SBATCH --ntasks-per-node=16&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
#SBATCH --licenses=maplegrid:1&lt;br /&gt;
&lt;br /&gt;
module load maple&lt;br /&gt;
&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/startserver&lt;br /&gt;
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Budapest2_klaszter&amp;diff=3768</id>
		<title>Budapest2 klaszter</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Budapest2_klaszter&amp;diff=3768"/>
				<updated>2016-05-06T07:29:09Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Intel Xeon Phi használata */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Klaszter&lt;br /&gt;
| Budapest2&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP SL205s&lt;br /&gt;
|- &lt;br /&gt;
| core / node&lt;br /&gt;
| 10 × 2 Xeon E5-2680v2 2.80GHz  &lt;br /&gt;
|- &lt;br /&gt;
| Intel Xeon Phi / node&lt;br /&gt;
| 2 × Intel(R) Xeon Phi(TM) MIC SE10/7120 &lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok&lt;br /&gt;
| 14 db&lt;br /&gt;
|-&lt;br /&gt;
| Max Walltime&lt;br /&gt;
| 7-00:00:00&lt;br /&gt;
|-&lt;br /&gt;
| Max core-ok / projekt&lt;br /&gt;
| 140 (7db node)&lt;br /&gt;
|-&lt;br /&gt;
| Max mem / core&lt;br /&gt;
| 3000 MB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Belépés ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh USER@login.budapest2.hpc.niif.hu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nem alapértelmezett kulcs használata esetén a &amp;lt;code&amp;gt;-i KULCS&amp;lt;/code&amp;gt; kapcsolóval megadása szükséges (SSH és SCP parancsok).&lt;br /&gt;
&lt;br /&gt;
=== Fájlok másolása SCP-vel ===&lt;br /&gt;
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  scp FILE USER@login.budapest2.hpc.niif.hu:FILE&lt;br /&gt;
Le :  scp USER@login.budapest2.hpc.niif.hu:FILE FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adatszinkronizáció ===&lt;br /&gt;
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fel:  rsync -a -e ssh DIRECTORY USER@login.budapest2.hpc.niif.hu:/home/USER&lt;br /&gt;
Le :  rsync -a -e ssh USER@login.budapest2.hpc.niif.hu:/home/USER/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A törölt fájlok szinkronizálásához a &amp;lt;code&amp;gt;--delete&amp;lt;/code&amp;gt; opciót kell megadni.&lt;br /&gt;
&lt;br /&gt;
== Felhasználói felület ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               rövid CWD&lt;br /&gt;
                     |&lt;br /&gt;
    BUDAPEST2[login] ~ (0)$&lt;br /&gt;
        |       |       |&lt;br /&gt;
   HPC állomás  |       |&lt;br /&gt;
         rövid gép név  |&lt;br /&gt;
               előző parancs exit kódja&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul környezet ===&lt;br /&gt;
Az elérhető modulok listáját a következő paranccsal kapjuk meg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module avail&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
a már betöltött modulok listáját:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alkalmazást a következő paranccsal tölthetünk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
module load APP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A NIIF által beállított környezeti változókat &amp;lt;code&amp;gt;nce&amp;lt;/code&amp;gt; parancs listázza ki.&lt;br /&gt;
&lt;br /&gt;
=== Adatok megosztása projekt tagok számára ===&lt;br /&gt;
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rx $HOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Addott könyvtárat (DIRECTORY) írahtóvá:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setfacl -m u:OTHER:rxw $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A kiterjesztett jogokat a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getfacl $HOME/DIRECTORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Közös home könyvtár használata ==&lt;br /&gt;
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alkalmazások lefordítása ==&lt;br /&gt;
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: &amp;lt;code&amp;gt;hpc-forum kukac listserv.niif.hu&amp;lt;/code&amp;gt;. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a &amp;lt;code&amp;gt;hpc-support kukac niif.hu&amp;lt;/code&amp;gt; címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.&lt;br /&gt;
&lt;br /&gt;
== Intel Xeon Phi használata ==&lt;br /&gt;
&lt;br /&gt;
* [[Intel_Xeon_Phi |Részletes]] használati és alkalmazás optimalizációs leírás&lt;br /&gt;
* [http://software.intel.com/en-us/mic-developer Itt] található az Intel hivatalos dokumentációja ezzel kapcsolatban&lt;br /&gt;
* [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Itt] tájékozódhatnak az Intel matematikai könyvtárainak a linkeléséről&lt;br /&gt;
&lt;br /&gt;
== SLURM ütemező használata ==&lt;br /&gt;
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbalance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még elérhető (Available) gépidőről ad tájékoztatást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Scheduler Account Balance&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)&lt;br /&gt;
---------- ----------- + ---------------- ----------- + ------------- -----------&lt;br /&gt;
bob *                7 |           foobar           7 |         1,000         993&lt;br /&gt;
alice                0 |           foobar           7 |         1,000         993&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A gépidő becslése ===&lt;br /&gt;
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sestimate -N NODES -t WALLTIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;NODES&amp;lt;/code&amp;gt; a lefoglalni kívánt node-ok száma, a &amp;lt;code&amp;gt;WALLTIME&amp;lt;/code&amp;gt; pedig a futás maximális ideje.&lt;br /&gt;
&lt;br /&gt;
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az &amp;lt;code&amp;gt;sacct&amp;lt;/code&amp;gt; paranccsal is ellenőrizni.'''&lt;br /&gt;
&lt;br /&gt;
=== Állapotinformációk ===&lt;br /&gt;
Az ütemezőben lévő jobokról az &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt;, a klaszter általános állapotáról az &amp;lt;code&amp;gt;sinfo&amp;lt;/code&amp;gt; parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scontrol show job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sacct -l -j JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A felhasznált memóriáról a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smemory JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lemezhasználatról pedig a&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sdisk JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Slurm figyelmeztető üzenetek ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resources/AssociationResourceLimit - Erőforrásra vár&lt;br /&gt;
AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva&lt;br /&gt;
Piority - Alacsony prioritás miatt várakozik&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az utóbbi esetben, csökkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.&lt;br /&gt;
&lt;br /&gt;
==== Licenszek ellenőrzése ====&lt;br /&gt;
Az elérhető és éppen használt licenszekről a következő parancs ad információt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slicenses&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Karbantartás ellenőrzése ====&lt;br /&gt;
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreservations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Összesített felhasználás ====&lt;br /&gt;
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
susage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Teljes fogyasztás ====&lt;br /&gt;
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feladatok futtatása ===&lt;br /&gt;
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a &amp;lt;code&amp;gt;#SBATCH&amp;lt;/code&amp;gt; direktívával kell megadni.&lt;br /&gt;
&lt;br /&gt;
==== Kötelező paraméterek ====&lt;br /&gt;
A következő paramétereket minden esetben meg kell adni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=NAME&lt;br /&gt;
#SBATCH --time=TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; a terhelendő számla neve (elérhető számláinkről az &amp;lt;code&amp;gt;sbalance&amp;lt;/code&amp;gt; parancs ad felvilágosítást), a &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt; a job rövid neve, a &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; pedig a maximális walltime idő (&amp;lt;code&amp;gt;DD-HH:MM:SS&amp;lt;/code&amp;gt;). A következő időformátumok használhatók: &lt;br /&gt;
&amp;quot;minutes&amp;quot;, &amp;quot;minutes:seconds&amp;quot;, &amp;quot;hours:minutes:seconds&amp;quot;, &amp;quot;days-hours&amp;quot;, &amp;quot;days-hours:minutes&amp;quot; és &amp;quot;days-hours:minutes:seconds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Intel Xeon Phi-k lefoglalása ====&lt;br /&gt;
A Intel Xeon Phi-k lefoglalása a következő direktívával történik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --gres=mic:N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; az Intel Xeon Phi-k/node számát adja meg, ami 1 és 2 lehet maximum.&lt;br /&gt;
&lt;br /&gt;
==== Job-ok indítása ====&lt;br /&gt;
A jobok feladását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sbatch slurm.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sikeres feladás esetén a következő kimenetet kapjuk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Submitted batch job JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;JOBID&amp;lt;/code&amp;gt; a feladat egyedi azonosítószáma.&lt;br /&gt;
&lt;br /&gt;
A feladat leállítását a következő parancs végzi:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scancel JOBID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nem újrainduló jobok ====&lt;br /&gt;
Nem újrainduló jobokhoz a következő direktívát kell használni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --no-requeue&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feladat sorok ====&lt;br /&gt;
A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; sor és a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt; sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a &amp;lt;code&amp;gt;prod&amp;lt;/code&amp;gt;. A teszt partíciót a következő direktívával lehet kiválasztani:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== A szolgáltatás minősége (QOS) ====&lt;br /&gt;
A szolgáltatást alapértelmezett minősége &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, azaz nem megszakítható a futás.&lt;br /&gt;
&lt;br /&gt;
===== Magas prioritás =====&lt;br /&gt;
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=fast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Alacsony prioritás =====&lt;br /&gt;
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --qos=lowpri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Memória foglalás ====&lt;br /&gt;
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mem-per-cpu=MEMORY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol &amp;lt;code&amp;gt;MEMORY&amp;lt;/code&amp;gt; MB egységben van megadva. A maximális memória/core 3000 MB lehet.&lt;br /&gt;
&lt;br /&gt;
Amennyiben a szálaknak 4GB-nál több virtuális memóriára van szükségük, akkor az indítandó program elé a következő parancsot is el kell helyezni:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ulimit -v unlimited&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Email értesítés ====&lt;br /&gt;
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SBATCH --mail-type=ALL&lt;br /&gt;
#SBATCH --mail-user=EMAIL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ahol az &amp;lt;code&amp;gt;EMAIL&amp;lt;/code&amp;gt; az értesítendő emial cím.&lt;br /&gt;
&lt;br /&gt;
==== Tömbfeladatok (arrayjob) ====&lt;br /&gt;
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a &amp;lt;code&amp;gt;SLURM_ARRAY_TASK_ID&amp;lt;/code&amp;gt; környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a &amp;lt;code&amp;gt;slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out&amp;lt;/code&amp;gt; fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=array&lt;br /&gt;
#SBATCH --time=24:00:00&lt;br /&gt;
#SBATCH --array=1-96&lt;br /&gt;
srun envtest.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Soros (serial) jobok ====&lt;br /&gt;
Több soros job futtatását a tömbfeladatokhoz hasonlóan kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=serial&lt;br /&gt;
#SBATCH --time=24:30:00&lt;br /&gt;
#SBATCH -n 3&lt;br /&gt;
#SBATCH --partition=test&lt;br /&gt;
srun -n 1 program input1 &amp;amp;&lt;br /&gt;
srun -n 1 program input2 &amp;amp;&lt;br /&gt;
srun -n 1 program input3&lt;br /&gt;
wait&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== IntelMPI feladatok ====&lt;br /&gt;
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (&amp;lt;code&amp;gt;#SBATCH --ntasks-per-node=&amp;lt;/code&amp;gt;). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; paranccsal kell indítani.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A ACCOUNT&lt;br /&gt;
#SBATCH --job-name=mpi&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks-per-node=20&lt;br /&gt;
#SBATCH --time=12:00:00&lt;br /&gt;
&lt;br /&gt;
mpirun PROGRAM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OpenMPI FAQ: http://www.open-mpi.org/faq&lt;br /&gt;
&lt;br /&gt;
==== OpenMP (OMP) feladatok ====&lt;br /&gt;
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az &amp;lt;code&amp;gt;OMP_NUM_THREADS&amp;lt;/code&amp;gt; környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=10&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A következő példában egy taskhoz 10 CPU core-t rendeltunk, a 10 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a &amp;lt;code&amp;gt;&lt;br /&gt;
SLURM_CPUS_PER_TASK&amp;lt;/code&amp;gt; változó tartalmazza, és ez állítja be az OMP szálak számát is.&lt;br /&gt;
&lt;br /&gt;
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 10 szálas OMP alkalmazást.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=omp&lt;br /&gt;
#SBATCH --time=06:00:00&lt;br /&gt;
#SBATCH --ntasks=1&lt;br /&gt;
#SBATCH --cpus-per-task=10&lt;br /&gt;
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hibrid MPI-OMP feladatok ====&lt;br /&gt;
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.&lt;br /&gt;
&lt;br /&gt;
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 10 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 10 OMP szál fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A foobar&lt;br /&gt;
#SBATCH --job-name=mpiomp&lt;br /&gt;
#SBATCH --time=08:00:00&lt;br /&gt;
#SBATCH -N 2&lt;br /&gt;
#SBATCH --ntasks=2&lt;br /&gt;
#SBATCH --ntasks-per-node=1&lt;br /&gt;
#SBATCH --cpus-per-task=10&lt;br /&gt;
#SBATCH -o slurm.out&lt;br /&gt;
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK&lt;br /&gt;
mpirun ./a.out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC&amp;diff=3767</id>
		<title>HPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC&amp;diff=3767"/>
				<updated>2016-05-06T07:28:26Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* Saját HPC oktató tartalmaink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[HPC_en|NIIF HPC in ENGLISH]]&lt;br /&gt;
&lt;br /&gt;
== A szuperszámítógépekről ==&lt;br /&gt;
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:&lt;br /&gt;
&lt;br /&gt;
* Debreceni Egyetem&lt;br /&gt;
* NIIFI központ&lt;br /&gt;
* Pécsi Tudományegyetem&lt;br /&gt;
* Szegedi Tudományegyetem&lt;br /&gt;
* Miskolci Egyetem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Orszagos-attekinto_hpc.png|center|700px|alt=Az NIIF szuperszámítógépei térképen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: két helyszínen ccNUMA, három helyszínen pedig &amp;quot;fat-node&amp;quot; fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.&lt;br /&gt;
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.&lt;br /&gt;
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.&lt;br /&gt;
&lt;br /&gt;
==== Szuperszámítógépeink összehasonlítása ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
| Helyszín&lt;br /&gt;
| Budapest&lt;br /&gt;
| [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
| Szeged&lt;br /&gt;
| Debrecen&lt;br /&gt;
| [[Debrecen2_GPU_klaszter|Debrecen2-GPU]] (tesztüzem)&lt;br /&gt;
| Debrecen3-Phi (beüzemelése folyamatban van)&lt;br /&gt;
| Pécs&lt;br /&gt;
&lt;br /&gt;
| [[Miskolc_UV_2000|Miskolc]] (tesztüzem)&lt;br /&gt;
|- &lt;br /&gt;
| Típus&lt;br /&gt;
| HP CP4000SL&lt;br /&gt;
| HP SL250s &lt;br /&gt;
| HP CP4000BL&lt;br /&gt;
| SGI ICE8400EX&lt;br /&gt;
| HP SL250s&lt;br /&gt;
&lt;br /&gt;
| HP Apollo 8000&lt;br /&gt;
| SGI UV 1000&lt;br /&gt;
&lt;br /&gt;
| SGI UV 2000&lt;br /&gt;
|- &lt;br /&gt;
| CPU-k / node &lt;br /&gt;
| 2&lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
&lt;br /&gt;
| 2 &lt;br /&gt;
| 192&lt;br /&gt;
&lt;br /&gt;
| 44 &lt;br /&gt;
|- &lt;br /&gt;
| Core-ok / CPU &lt;br /&gt;
| 12&lt;br /&gt;
| 10&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
| 12&lt;br /&gt;
| 6&lt;br /&gt;
| 8&lt;br /&gt;
|- &lt;br /&gt;
| Memória / node &lt;br /&gt;
| 66 GB&lt;br /&gt;
| 63 GB &lt;br /&gt;
| 132 GB&lt;br /&gt;
| 47 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 125 GB&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 1.4 TB&lt;br /&gt;
|- &lt;br /&gt;
| Memória / core &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 3 GB &lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 2.6 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 7.5 GB&lt;br /&gt;
| 5 GB&lt;br /&gt;
| 4 GB&lt;br /&gt;
|- &lt;br /&gt;
| CPU &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz&lt;br /&gt;
| Intel Xeon E5-2680 v2 @ 2.80GHz    &lt;br /&gt;
| AMD Opteron 6174 @ 2.2GHz &lt;br /&gt;
| Intel Xeon X5680 @ 3.33 GHz&lt;br /&gt;
| Intel Xeon E5-2650 v2 @ 2.60GHz &lt;br /&gt;
| Intel Xeon E5-2670 v3 @ 2.30GHz&lt;br /&gt;
| Intel Xeon X7542 @ 2.66 GHz&lt;br /&gt;
| Intel Xeon E5-4627 v2 @ 3.33 GHz&lt;br /&gt;
|- &lt;br /&gt;
| GPU &lt;br /&gt;
| -&lt;br /&gt;
| -   &lt;br /&gt;
| 2 * 6 Nvidia M2070&lt;br /&gt;
| -&lt;br /&gt;
| 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x &lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Intel Xeon Phi &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |14 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -  &lt;br /&gt;
| -&lt;br /&gt;
| [[Intel_Xeon_Phi |44 * 2 * Intel(R) Xeon Phi(TM) MIC SE10/7120]]&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|- &lt;br /&gt;
| Linpack teljesítmény (Rmax)&lt;br /&gt;
| 5 Tflops&lt;br /&gt;
| 27 Tflops&lt;br /&gt;
| 20 Tflops&lt;br /&gt;
| 18 Tlops&lt;br /&gt;
| 254 Tflops&lt;br /&gt;
| ~106 Tflops&lt;br /&gt;
| 10 Tflops&lt;br /&gt;
| 8 Tflops&lt;br /&gt;
|- &lt;br /&gt;
| Compute node-ok száma &lt;br /&gt;
| 32&lt;br /&gt;
| 14&lt;br /&gt;
| 50&lt;br /&gt;
| 128&lt;br /&gt;
| 84&lt;br /&gt;
| 44&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-  &lt;br /&gt;
| Dedikált storage &lt;br /&gt;
| 50 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 250 TB&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 585 TB (Phi-vel közös)&lt;br /&gt;
| 585 TB (GPU-val közös)&lt;br /&gt;
| 500 TB&lt;br /&gt;
| 240 TB&lt;br /&gt;
|- &lt;br /&gt;
| Scheduler &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]  &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM]&lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
| [http://slurm.schedmd.com/ SLURM] &lt;br /&gt;
|- &lt;br /&gt;
| MPI &lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| IntelMPI (impi) &lt;br /&gt;
| OpenMPI (ompi) &lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
&lt;br /&gt;
| OpenMPI (ompi)&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
&lt;br /&gt;
| SGI MPT (mpt)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== További információ ==&lt;br /&gt;
=== Az új HPC-k dokumentációja ===&lt;br /&gt;
* [[Budapest2_klaszter|Budapest2]]&lt;br /&gt;
* [[Miskolc_UV_2000|Miskolc]]&lt;br /&gt;
* [[Debrecen2_GPU_klaszter|Debrecen2 GPU klaszter (LEO)]]&lt;br /&gt;
&lt;br /&gt;
=== Kapcsolódó oldalak===&lt;br /&gt;
* [[HPC-Portal|HPC portál: projekt és témaszámok kezelése, leállások, statisztikák]]&lt;br /&gt;
* [[NIIF_szuperszámítógépek_használata|A szuperszámítógépek használata]]&lt;br /&gt;
* [[HPC-GYIK|GY.I.K]]&lt;br /&gt;
* [http://www.niif.hu/hu/niif_intezet/az_niifi_szuperszamitogepek_hasznalata NIIF.HU HPC oldal]&lt;br /&gt;
* [[HPC_software|Telepített HPC Szoftverek ]]&lt;br /&gt;
&lt;br /&gt;
=== Saját HPC oktató tartalmaink ===&lt;br /&gt;
&lt;br /&gt;
* [http://videotorium.hu/hu/channels/details/1895 HPC oktató videók]&lt;br /&gt;
* [http://conference.niif.hu/event/3/session/23/contribution/25 HPC tutorial (NWS 2015) anyagai ]&lt;br /&gt;
* [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)]&lt;br /&gt;
* [[Intel_Xeon_Phi |Xeon Phi kártyák használata és alkamazások optimalizációja]]&lt;br /&gt;
&lt;br /&gt;
=== Angol nyelvű tréningek, videók, anyagok ===&lt;br /&gt;
* [http://www.training.prace-ri.eu PRACE training portal]&lt;br /&gt;
* [[PRACE_User_Support|PRACE User Support]]&lt;br /&gt;
[[Kategória: HPC]]&lt;br /&gt;
[[Kategória: Összefoglaló lapok]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Intel_Xeon_Phi&amp;diff=3766</id>
		<title>Intel Xeon Phi</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Intel_Xeon_Phi&amp;diff=3766"/>
				<updated>2016-05-06T07:27:19Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* közvetlen natív használat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az oldalon található információk segítséget nyújtanak a HPC felhasználóinknak, hogy alkalmazásaikat miként portolhatják valamint optimalizálhatják a hatékonyabb futást szem előtt tartva Intel Xeon Phi koprocesszor kártyákon.&lt;br /&gt;
&lt;br /&gt;
==Hardver bemutatása==&lt;br /&gt;
Intel® Xeon Phi™ Coprocessor 7120P&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fájl:Xeon-phi-family-rwd.png.rendition.intel.web.720.405.png|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
! CPU&lt;br /&gt;
! threads/Core&lt;br /&gt;
!max threads&lt;br /&gt;
! CPU Freq&lt;br /&gt;
! Memória&lt;br /&gt;
! L1 cache&lt;br /&gt;
! L2 cache&lt;br /&gt;
! Interfész&lt;br /&gt;
! Ptot&lt;br /&gt;
! Számítási kapacitás&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 61&lt;br /&gt;
| 4 Hardver&lt;br /&gt;
| 244&lt;br /&gt;
| 1238 GHz&lt;br /&gt;
| 16GB GDDR5&lt;br /&gt;
| 32KB/core&lt;br /&gt;
| 512KB/core&lt;br /&gt;
| PCIe&lt;br /&gt;
| 300W&lt;br /&gt;
| 1,2 TFlop/s dupla pontosság&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| OpenMP-nél csak '''240'''&lt;br /&gt;
|&lt;br /&gt;
| ~100 cycles&lt;br /&gt;
~174 GB/s&lt;br /&gt;
| ~3 cycles&lt;br /&gt;
| ~10 cycles&lt;br /&gt;
| ~7 GB/s&lt;br /&gt;
~1 microsecond&lt;br /&gt;
|&lt;br /&gt;
| 2,4 TFlop/s egyszeres pontosság&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Az Intel® 1. generációs Xeon Phi™ koprocesszorában található 61 processzor ugyanazt a 16GB memóriát éri el, de semmilyen módon se fér hozzá közvetlenül a hoszt gép fizikai memóriájához.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Budapest2_klaszter|Budapest2]] és [[HPC#Szupersz.C3.A1m.C3.ADt.C3.B3g.C3.A9peink_.C3.B6sszehasonl.C3.ADt.C3.A1sa|Debrecen3-Phi]] gépeinkben számítási nodonként 2-2 Phi™ koprocesszor található. &amp;lt;br/&amp;gt;&lt;br /&gt;
A kártyákon speciális célú Linux kernel fut melyre a belépés limitáltan csak a rendszergazdák számára lehetséges SSH-n keresztül a hoszt gépről. Természetesen a kártyára belépve olyan érzésünk lehet, mintha egy sok processzoros gépen dolgoznánk, ami rendelkezik rengeteg memóriával. Ez így is van, de a hatékonyabb kihasználás érdekében az SSH-n keresztüli elérés nem lehetséges, csak a Slurm segítségével valamint a programozási nyelvek által támogatott csatornákon keresztül. Ennek részletezése lentebb megtalálható.&lt;br /&gt;
&lt;br /&gt;
==Használati módok==&lt;br /&gt;
A koprocesszor használatai módjait két csoportba lehet sorolni. A '''natív''' és az '''offload''' használatot.  &amp;lt;br/&amp;gt;&lt;br /&gt;
Ezen használati módokról a lenti fejezetekben több részletet is megtudhat. Az itt megfogalmazott &amp;quot;támogatás&amp;quot; csak a mi infrastruktúránkra érvényes! &amp;lt;br /&amp;gt;&lt;br /&gt;
A bemutatott példák ''c++'' nyelven vannak, de természetesen ''c'' és ''fortran'' esetén is megtalálható az ekvivalens módszer.&lt;br /&gt;
&lt;br /&gt;
===a) nem támogatott mód===&lt;br /&gt;
====közvetlen natív használat====&lt;br /&gt;
A natív mód arra szolgál, hogy a MIC kártyára  lefordított alkalmazásunkat felmásoljuk a kártyára, majd belépünk SSH-n a kártyára és azon futtatjuk a bináris kódunkat. &amp;lt;br /&amp;gt;&lt;br /&gt;
Biztonsági okokból a közvetlen natív használat az NIIF HPC infrastruktúrán nem elérhető. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===b) támogatott, de nem preferált használat===&lt;br /&gt;
====automatikus kódátvitel====&lt;br /&gt;
Ebben az esetben nem kell átmásolnunk a bináris alkalmazásunkat a kártyára sőt még csak be se kell lépnünk, mert ezt a két lépést egy beépített tool végzi el. &amp;lt;br/&amp;gt;&lt;br /&gt;
A tool eléréséhez szükséges parancs neve: '''micnativeloadex'''&lt;br /&gt;
&lt;br /&gt;
Ebben az esetben a workflow a következőképpen módosul:&lt;br /&gt;
# Alkalmazás megírása. például [[Média:hello.cc|''hello.cc'']]&lt;br /&gt;
# Alkalmazás fordítása &amp;lt;br/&amp;gt; &amp;lt;pre&amp;gt;icpc -o hello-MIC -mmic hello.cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
# A tool futásához szükséges library-k megadása &amp;lt;br&amp;gt; &amp;lt;pre&amp;gt;export SINK_LD_LIBRARY_PATH=/opt/intel/composerxe/compiler/lib/mic&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Alkalmazás futtatása &amp;lt;br/&amp;gt; &amp;lt;pre&amp;gt;micnativeloadex hello-MIC&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| BUDAPEST2[cn10] phi (0)$ export SINK_LD_LIBRARY_PATH=/opt/intel/composerxe/compiler/lib/mic &amp;lt;br/&amp;gt;BUDAPEST2[cn10] phi (0)$ micnativeloadex hello-MIC &amp;lt;br/&amp;gt;Hello world! I have 244 logical cores.&amp;lt;br/&amp;gt;BUDAPEST2[cn10] phi (0)$&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===c) támogatott módok===&lt;br /&gt;
====Offload====&lt;br /&gt;
Az Offload modell esetén szükséges a forráskód módosítása, mégpedig úgy, hogy azon kódrészletet, amit a koprocesszoron szeretnénk futtatni, ki kell egészíteni egy fordítási direktívával. Az alkalmazás fordításakor elegendő csak a CPU-ra való binárist készíteni mivel a modell végzi a megfelelő forrás részlet mozgatását és futtatását.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:offload.png|Offload modell]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánkban jól látható, hogy a második kiíratás már a koprocesszoron fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main(int argc, char * argv[]) {&lt;br /&gt;
  printf(&amp;quot;Hello world from host!\n&amp;quot;);&lt;br /&gt;
#pragma offload target(mic)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;Hello world from coprocessor!\n&amp;quot;); fflush(stdout);&lt;br /&gt;
  }&lt;br /&gt;
  printf(&amp;quot;Bye\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebben a példában az operációs rendszer választja ki, hogy melyik Phi kártyán fusson le a kódrészlet. Amennyiben mi szeretnénk explicite megmondani, hogy melyik kártyán fusson, akkor a fordítási direktívában a mic kulcsszó után kell tenni egy &amp;quot;:&amp;quot;-t és a kártya sorszámát [mi esetünkben 0 vagy 1]. Ekkor így nézne ki a direktíva: ''#pragma offload target(mic:1)''&lt;br /&gt;
&lt;br /&gt;
Amennyiben az offload szekcióban függvény hívás is szerepel, akkor szükségeltetik az függvény futásához szükséges változók adatterületének átmásolása a Phi kártyára, majd a lefutás után visszamásolni a hoszt gépre. Ezen másolást az ''offload_attribute'' ''push'' és ''pop'' paraméterei segítségével határozhatjuk meg. &amp;lt;br /&amp;gt;&lt;br /&gt;
A következő mátrix-vektor szorzás példánál az A mátrix globális változó, míg a b és c vektorok a függvény paraméterei.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//A változók felmásolásra kerülnek a Xeon Phi-re&lt;br /&gt;
#pragma offload_attribute(push, target(mic))&lt;br /&gt;
  double* A;&lt;br /&gt;
  void MatrixVector(double *b, double *c, double m, double n) {&lt;br /&gt;
    ...&lt;br /&gt;
    c[] = A[..]*b[]&lt;br /&gt;
  }&lt;br /&gt;
// felmásolt objektumok visszamásolása&lt;br /&gt;
#pragma offload_attribute(pop)&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  ...&lt;br /&gt;
#pragma offload target(mic) in(A[0:n*m])&lt;br /&gt;
// így is meg lehetne adni: #pragma offload target(mic:0) in(A : length(n*m))	        &lt;br /&gt;
  {&lt;br /&gt;
    MatrixVector(b, c, m, n);&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ekkor minden memória területet 2x kell másolni, egyszer fel a kártyára, majd másodszor vissza a hoszt gépre, pedig elegendő lenne csak az eredmény vektort visszamásolni. Ezen optimalizálással egy későbbi fejezetben foglalkozunk. &amp;lt;p /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Futás során kaphatunk részletes riportot is, hogy pontosan milyen adatmozgatások történnek az alkalmazás futása során. Ehhez nincs szükség másra csak az '''OFFLOAD_REPORT''' környezeti változó megfelelő beállítása. A beállított értékek 1, 2 vagy 3 lehetnek, attól függően mennyire részletes riportot szeretnénk kapni. &amp;lt;br /&amp;gt;&lt;br /&gt;
beállítás:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OFFLOAD_REPORT=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
példa kimenet a hello alkalmazásra:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hello world from host!&lt;br /&gt;
[Offload] [MIC 0] [File]                    hello_offload.cc&lt;br /&gt;
[Offload] [MIC 0] [Line]                    5&lt;br /&gt;
[Offload] [MIC 0] [Tag]                     Tag 0&lt;br /&gt;
Hello world from coprocessor!&lt;br /&gt;
[Offload] [HOST]  [Tag 0] [CPU Time]        0.554653(seconds)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [CPU-&amp;gt;MIC Data]   0 (bytes)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [MIC Time]        0.000140(seconds)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [MIC-&amp;gt;CPU Data]   0 (bytes)&lt;br /&gt;
Bye&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Offload + OpenMP====&lt;br /&gt;
Amennyiben nem csak 1 processzort szeretnénk használni a Phi kártyánkon és az alkalmazásunkban használt számítás megengedi a párhuzamosítást, akkor az OpenMP segítségével párhuzamosíthatjuk a megfelelő számítást. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:Offload+openmp.png|Offload modell és OpenMP]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánk maradjon ugyanúgy a mátrix-vektor szorzás. Amennyiben a teljes kártya adta kapacitást ki szeretnénk használni, akkor az OMP threadek számát 240-re kell beállítani. Azért nem 244-re, mivel 1 CPU-t dedikáltan csak a kommunikációra használ a rendszer és 1 CPU 4 hardver threaddel rendelkezik.&lt;br /&gt;
Ekkor a példánk így változik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;omp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#pragma offload_attribute(push, target(mic))&lt;br /&gt;
void multiply(int n, int m, double* A, double* b, double* c){&lt;br /&gt;
  const int nCPUs = omp_get_max_threads();   //240&lt;br /&gt;
  omp_set_num_threads(nCPUs);&lt;br /&gt;
#pragma omp parallel for schedule(dynamic, 1)&lt;br /&gt;
  for ( int i = 0 ; i &amp;lt; m ; i++)&lt;br /&gt;
     for ( int j = 0 ; j &amp;lt; n ; j++)&lt;br /&gt;
       c[i] += A[i*n+j] * b[j];&lt;br /&gt;
}&lt;br /&gt;
#pragma offload_attribute(pop)&lt;br /&gt;
&lt;br /&gt;
int main(){&lt;br /&gt;
  double * A = (double*) malloc(sizeof(double)*n*m);&lt;br /&gt;
  ...&lt;br /&gt;
#pragma offload target(mic) in(A:length(n*m))&lt;br /&gt;
     multiply(n, m, A, b, c);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alkalmazás fordításánál a fordítónak meg kell adni, hogy használhja az openmp library-ket is. Ezt a '''-qopenmp''' kapcsolóval tudjuk elérni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
icpc -o matrix-CPU -qopenmp matrix.cc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MPI + Offload + OpenMP====&lt;br /&gt;
Abban az esetben, ha 1 számítási node nem elég, MPI segítségével össze tudunk kötni több nodet, heterogén rendszert alkotva, és azokon alkalmazható a fenti Offload + OpenMP modell. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:Mpi+offload+openmp.png|MPI elosztás valamint Offload modell és OpenMP]] &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Phi használat slurm-mel==&lt;br /&gt;
Slurm esetén a mic opciót kell megadni a gres-knél. Amennyiben egynél több kártyára van szükség, akkor azt a ''mic:2''-vel lehetséges megadni. Ekkor két kártyát foglal le az ütemező a futtatandó feladatnak. &amp;lt;br /&amp;gt;&lt;br /&gt;
Egy lehetséges feladat, amit srun-nal lehet a slurmben beküldeni. debrecen3 esetén a ''prod-phi'' particiót kell használni&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat slurm_job_openmp_phi&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A &amp;lt;PROJECT NEVE&amp;gt;&lt;br /&gt;
#SBATCH --job-name=&amp;lt;JOB NEVE&amp;gt;&lt;br /&gt;
#SBATCH --gres mic:2&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
#SBATCH --partition=prod&lt;br /&gt;
#SBATCH -o slurm-%A.out&lt;br /&gt;
export OMP_NUM_THREADS=2&lt;br /&gt;
./runme_openmp_2phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ekkor a feladat beküldése a következő paranccsal lehetséges.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun ./slurm_job_openmp_phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Alkalmazások optimalizálása a kártyára==&lt;br /&gt;
Ebben a fejezetben optimalizálási lehetőségeket mutatunk be, melyek segítségül szolgálhatnak az egyes alkalmazások hatékonyabb futása érdekében ezzel jobban kihasználni a rendelkezésre álló erőforrások adta számítási kapacitás.&lt;br /&gt;
&lt;br /&gt;
===Környezeti változók===&lt;br /&gt;
Lehetséges csak a Phi kártyákon használt környezeti változók beállítása, amit az alkalmazásunk használni is tud. &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánkban az OpenMP esetén használható szálak számát állíthatjuk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIC_ENV_PREFIX=XEONPHI&lt;br /&gt;
export OMP_NUM_THREADS=12&lt;br /&gt;
export XEONPHI_OMP_NUM_THREADS=240&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A beállított prefix tetszőleges karaktersorozat lehet, a lényeg, hogy ezt a beállított prefixet használjuk a környezeti változók esetén is!&lt;br /&gt;
 &lt;br /&gt;
===Hosszredukció===&lt;br /&gt;
Többnyire a fordítók, ha nem mondjuk meg explicite, a dupla pontosságú változatot választják a lehetséges változó- és függvény típusok közül. Amennyiben a számításunk nem igényli a dupla pontosságot, akkor használjuk a forrásban mindenhol az adott típus vagy függvény egyszeres pontosságú változatát, mellyel jelentős teljesítmény növekedést tudunk elérni. Továbbá az egyes műveletek futási ideje nem egyforma, így a műveletet helyettesíthetjük más művelettel, ami gyorsabb, akkor ismét javíthatunk a hatékonyságon. &amp;lt;br /&amp;gt;&lt;br /&gt;
Íme pár példa, amit alkalmazni lehet:&lt;br /&gt;
* &amp;quot;''/''&amp;quot; művelet helyett &amp;quot;''*''&amp;quot; -t használjunk, mert azt gyorsabban végre tudja hajtani a processzor&lt;br /&gt;
* ''pow'' =&amp;gt; ''1.0 / sqrt()''    , tetszőleges hatványozás, pl.: 3/2-ik hatvány&lt;br /&gt;
* hardver áltatl támogatott műveletek:&lt;br /&gt;
** ''exp'' =&amp;gt; ''exp2''&lt;br /&gt;
** ''log'' =&amp;gt; ''log2''&lt;br /&gt;
* dupla pontosság -&amp;gt; egyszeres pontosság lebegőpontos számok és műveletek esetén &lt;br /&gt;
** ''1.0'' =&amp;gt; ''1.0f''&lt;br /&gt;
** ''pow'' =&amp;gt; ''powf''&lt;br /&gt;
&lt;br /&gt;
===Vektorizáció===&lt;br /&gt;
A vektorizáció azon fordítási időben eldönthető optimalizációs faktor, amely nagy mértékben függ attól a hardver felépítésétől, amire éppen a fordítás történni fog. Legfontosabb befolyásoló tényezők a processzor cache méretei illetve a vektor műveletekért felelős aritmetikai egységének jellemzői mivel ezeket használja fel a fordító az optimalizálási folyamata során. &amp;lt;br /&amp;gt;&lt;br /&gt;
Az automatikus vektorizáció minimum -O2 szinttől érvényes, de mivel általában ez a szint az alapértelmezett, ezért minden fordításnál alkalmazásra kerül. &amp;lt;br /&amp;gt;&lt;br /&gt;
A fordító programnak a következő kapcsolókat lehet megadni, melyek segítenek a minél jobb vektorizációban:&lt;br /&gt;
* ''-qopt-report=&amp;lt;szám&amp;gt;'' ; az optimalizációs jelentés részletességét lehet megadni 0-tól 5-ig, ahol az 5-s szint a legrészletesebbet jelenti&lt;br /&gt;
* ''-qopt-report-phase:vec'' ; a vektorizációról szeretnék jelentést kapni&lt;br /&gt;
* ''-opt-report-file=&amp;lt;fájlnév&amp;gt;'' ; megadható a riportfájl neve&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
icpc autovec.cc -mmic -qopt-report=5 -opt-report-file=vectorization.oMIC.optrpt -qopt-report-phase:vec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SIMD====&lt;br /&gt;
Az adatok hatékonyabb feldolgozására az egyik megvalósítás a SIMD (Single Instruction Multiple Data), amikor is a különálló adatokat úgy kezeli, mintha az vektorok volnának és azon végzi el a vektor-műveletet. Ezzel egy a hardver által támogatott műveletet végzünk egy lépésben egy nagyobb adatmennyiségen, ezzel párhuzamosítva a feldolgozási folyamatot. Ezzel a módszerrel nagyon jó adat szintű párhuzamosítást lehet elérni.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Simd.png|SIMD]]&lt;br /&gt;
&lt;br /&gt;
Főbb támogatott műveletek:&lt;br /&gt;
* aritmetikai műveletek, bináris operátorok&lt;br /&gt;
* összehasonlítások&lt;br /&gt;
* konverziók és típus kasztolások&lt;br /&gt;
* bit-műveletek: NOT, AND, OR, XOR, XAND&lt;br /&gt;
&lt;br /&gt;
Használata: '''simd''' fordítási direktívával lehetséges &amp;lt;br /&amp;gt;&lt;br /&gt;
Például:&lt;br /&gt;
* egyszerű vektorizáció&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  A[i] += B[i];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* adat párhuzamosítás OpenMP segítségével&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  DoSomeWork(A[i]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AoS -&amp;gt; SoA====&lt;br /&gt;
A kiindulás probléma az, hogy a struktúrákat tartalmazó vektort nem lehet jól vektorizálni, mivel a cache-ben tárolt adatok nagy többsége feleslegesen van bent, mivel azon adatokat csak egy későbbi ciklus futás során fogja az alkalmazás feldolgozni. Tehát ezen adatok jelenleg feleslegesen foglalják a cache területet, ahelyett, hogy hasznos adatot tárolnánk ott.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct MyStructure {&lt;br /&gt;
  float x, y, z;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void My_Function(cons int nItem, MyStructure* const Items, const float delta) {&lt;br /&gt;
  for (int i = 0; i &amp;lt; nItem; i++) {&lt;br /&gt;
    ...&lt;br /&gt;
    for (int j = 0; j &amp;lt; nItem; j++) {&lt;br /&gt;
      const float dx = Items[j].x - Items[i].x;&lt;br /&gt;
      const float dy = Items[j].y - Items[i].y;&lt;br /&gt;
      const float dz = Items[j].z - Items[i].z;&lt;br /&gt;
      ...  &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  ... &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A vektorban a struktúrák tárolása helyett minden elemnek egy dedikált vektort allokálunk és így könnyen tudja a fordító vektorizálni azt. Természetesen segítségként a vektor feldolgozását &amp;quot;tömbösítettük&amp;quot; a tileSize méret megadásával illetve a ''unroll'' fordítási direktíva segítségével.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct MyStructureSet {&lt;br /&gt;
  float *x, *y, *z;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void My_Function(cons int nItem, MyStructure* const Items, const float delta) {&lt;br /&gt;
  const int tileSize = 16;&lt;br /&gt;
#pragma omp parallel for schedule(guided)&lt;br /&gt;
  for (int ii = 0; ii &amp;lt; nItem; ii+= tileSize) {&lt;br /&gt;
    ...&lt;br /&gt;
#pragma unroll(tileSize)&lt;br /&gt;
    for (int j = 0; j &amp;lt; nItem; j++) {&lt;br /&gt;
#pragma unroll(tileSize)&lt;br /&gt;
      for (int i = ii; i &amp;lt; ii + tileSize; i++) {&lt;br /&gt;
        const float dx = Items.x[j] - Items.x[i];&lt;br /&gt;
        const float dy = Items.y[j] - Items.y[i];&lt;br /&gt;
        const float dz = Items.z[j] - Items.z[i];&lt;br /&gt;
        ...&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  ... &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Hatékony hossz választás====&lt;br /&gt;
Olyan esetben jelent előnyt, ha például az n*n-es mátrix esetén n nem osztható 16-val, mert akkor a vektorizáció nem teljesen hajtható végre. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// n%16 != 0&lt;br /&gt;
float* A = _mm_malloc(sizeof(float)*n*n, 64);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ilyen esetben mindig marad egy kis vektor részlet, amire elemenként kell elvégezni a műveletet.&amp;lt;br /&amp;gt;&lt;br /&gt;
A megoldást az jelenti, hogy a memória allokálást kiterjesztjük és nagyobb memória területet foglalunk a változónak, így már alkalmazható lesz a vektorizáció, mivel a maradvány területen is el tudjuk végezni a műveletet egy lépésben.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int lda=n;&lt;br /&gt;
if (n % 16 != 0) lda += (16 - n%16); // most lda%16==0&lt;br /&gt;
float* A = _mm_malloc(sizeof(float)*n*lda, 64);&lt;br /&gt;
&lt;br /&gt;
// használat&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  for (int j = 0; j &amp;lt; n; j++)&lt;br /&gt;
    A[i*lda + j] = ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Héj ciklusok&amp;quot; kiküszöbölése====&lt;br /&gt;
Ciklusok esetén lehetséges, hogy a vektorizációt nem teljes mértékben ismeri fel a fordító program. &lt;br /&gt;
Ekkor segíthetünk a fordítónak egy fordítási direktívával ('''#pragma vector aligned'''), ha teljes mértékben biztosak vagyunk, hogy a ciklusunk vektorizálható!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma vector aligned&lt;br /&gt;
  for (int j = 0; j &amp;lt; n; j++)&lt;br /&gt;
    A[i*lda + j] -= ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ettől jelentős futás idejű javulást érhetünk el, mivel ezzel a #pragma-val kikapcsoltuk a futás idejű ellenőrzést, de előfordulhatnak olyan esetek, főleg amikor nem jól mértük fel a ciklusunkat és nem sikerült a vektorizálás, hogy ''Segmentation fault'' hibára fogunk futni.&lt;br /&gt;
&lt;br /&gt;
====Regularizáció====&lt;br /&gt;
Van egy ciklusunk, ami egy vektor elemeit módosítja. A processzor az adatokat &amp;quot;csokorba szedve&amp;quot; emeli be a belső kis méretű cache-be. Egyszerre természetesen több vektor elem is bekerül a a cache-be ezzel gyorsítva a feldolgozást. Ezen vektor iterációk valahogyan ráilleszkedik a vektorra.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:regularization.png|Vektor regularizáció]]&lt;br /&gt;
&lt;br /&gt;
Abban az esetben, amikor ez az illesztés nem teljesen tökéletes (lsd. piros elemek), keletkeznem héj ciklusok, melyeket a regularizációval is eliminálni lehet. &amp;lt;br /&amp;gt;&lt;br /&gt;
A feladat eredetileg valahogyan így nézhet ki:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int i = 0; i&amp;lt;n; i++)&lt;br /&gt;
  A[i]=...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ez a következő átalakítással már alkalmas vektorizációra és nem lesz &amp;quot;peel loop&amp;quot; probléma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int b=0; b&amp;lt;n; b++) {&lt;br /&gt;
  const int jStart = b- b%16; // mindig osztható 16-val&lt;br /&gt;
  ...&lt;br /&gt;
#pragma simd&lt;br /&gt;
  for (int j = jStart; j&amp;lt;n; j++)&lt;br /&gt;
    A[j]=...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Párhuzamosítás===&lt;br /&gt;
Több féle mód létezik a párhuzamosításra. Korábban említettük a SIMD technikát, ami adatpárhuzamosításra való 1 processzoron belül, de létezik még processzorok közti párhuzamosítás, amit az OpenMP segítségével tudunk hatékonyan megvalósítani. Amennyiben gépek közti párhuzamosításra, üzenek küldésre van szükség, akkor az MPI-t kell segítségül hívni. Általános megoldás nem létezik minden feladatra, mert MPI is alkalmas lehet gépen belüli párhuzamosításra, nem csak az OpenMP. Amit mérlegelni kell, hogy mi az amire az alkalmazásnak szükséges van illetve mekkora kommunikációs overhead keletkezik, ha lecseréljük az OpenMP-t MPI-ra. Általában az egymástól független számításokat OpenMP-vel, míg a kommunikációt igénylő feladatokra MPI-t szoktak használni.&lt;br /&gt;
&lt;br /&gt;
====Szálak párhuzamosítása====&lt;br /&gt;
Az OpenMP-nek környezeti változók segítségével megadható a párhuzamosan futtatható szálak száma. Ezt a következő paranccsal tudjuk megtenni, ahol 5-re állítjuk.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Forrásban a párhuzamos szálakat a ''#pragma omp parallel'' segítségével adhatjuk meg.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for              	//külső for szálak párhuzamosítása&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
#pragma simd				// vektorizáció a belső cikluson&lt;br /&gt;
  for (int j = 0; j &amp;lt; m; j++)&lt;br /&gt;
    My_Function(A[i][j]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fordítási direktívák össze is vonhatóak, ilyenkor 1 ciklus is elég.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
    My_Function(A[i]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Változók láthatósága, megosztása=====&lt;br /&gt;
Változók hatókörét a programozási nyelven kívül pragma-k segítségével is beállíthatjuk, hogy megosztott legyen a változó vagy a szálra nézve saját példány. Amennyiben nem definiáljuk felül, akkor minden változó megosztott. A felül definiálást a private és a shared paraméterekkel lehet megadni az OpenMP-nek.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int A, B, C;&lt;br /&gt;
&lt;br /&gt;
#pragma omp parallel private(A) shared(B)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az itteni példában az B és C megosztott változó a szálak között, míg A-t minden szálnak lemásolja a futás kezdetén.&lt;br /&gt;
&lt;br /&gt;
====Párhuzamos szálak ütemezése====&lt;br /&gt;
OpenMp a szálak ütemezésére három féle módod kínál fel.&lt;br /&gt;
Módok:&lt;br /&gt;
* '''static''' (alapértelmezett): egyenletesen arányban egymás után elosztja a processzeket az indított szálakon, ezért a futási idő tetszőlegesen elhúzódhat, ha egyes processzek lassabban futnak le.&lt;br /&gt;
* '''dynamic''': minden esetben az első szabad szálra kerül a következő processz ütemezése, folyamatos kihasználtságot elérve, de &amp;quot;költséges&amp;quot; a sok-sok ütemezés&lt;br /&gt;
* '''guided''': Az előző két mód ötvözése. Nagyobb procesz számot ütemez az éppen szabad szálakra, melyek számát folyamatosan csökkenti a futás előre haladtával, hogy körülbelül egyszerre fejeződjön be minden szál futása, ezzel csökkentve a dynamic esetén magad ütemezési időráfordítást.&lt;br /&gt;
&lt;br /&gt;
Mindhárom esetben megadható az egyszerre ütemezett processzek száma, amit a ''chunk'' értéke határoz meg. Ha megvan adva a chunk értéke, akkor az minden esetben annak megfelelő processzámot ütemez a szálakra.&lt;br /&gt;
Használata:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel [schedule (&amp;lt;mode&amp;gt;,&amp;lt;chunk&amp;gt;) {...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Szálak szinkronizációja====&lt;br /&gt;
Szála szinkronizálását többféle módon lehet megvalósítani, de ezen megoldások sajno jelentősen lelassítják a program futását.&lt;br /&gt;
* mutexxel: nagyon lassú, állandóan várnak egymásra a párhuzamos szálak&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
#pragma omp critical&lt;br /&gt;
  { // kritikus szekció, csak egy szál hajthatja végre&lt;br /&gt;
    total = total + i;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* atomi művelet definiálása: sajnos még ez is lassú, de itt már nem olyan &amp;quot;erős&amp;quot; a szinkronizáció, ezért rendkívül sok limitációja van az itt használható atomi műveleteknek.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
#pragma omp atomic&lt;br /&gt;
   total += i;&lt;br /&gt;
}	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Párhuzamos redukció=====&lt;br /&gt;
Az itt bemutatott eljárás gyorsabb mint a fenti szinkronizációs megoldás, de sajnos nem alkalmazható vektorokra! A redukciót a ''reduction(operation: scalar)'' formában kell megadni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int sum = 0;&lt;br /&gt;
#pragma omp parallel for reduction(+: sum)&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
  sum = sum + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tulajdonképpen a fenti problémakörre a következő minta ad megoldást. Ekkor egy külön változóban akkumuláltatjuk a szál általi összeget és ezen értékeke összegyűjtését végezzük csak atomi műveletként.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int sum = 0;&lt;br /&gt;
#pragma omp parallel&lt;br /&gt;
{&lt;br /&gt;
  int sum_thr = 0;&lt;br /&gt;
#pragma omp for&lt;br /&gt;
  for (int i=0; i&amp;lt;n; i++)&lt;br /&gt;
    sum_thr += i;&lt;br /&gt;
&lt;br /&gt;
#pragma omp atomic&lt;br /&gt;
  sum += sum_thr;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Ciklusok párhuzamosítása====&lt;br /&gt;
Ciklus párhuzamosítására a következő mintát szokás használni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel&lt;br /&gt;
{&lt;br /&gt;
  // Az itt definiált forrást minden szál esetén végre fog hajtani&lt;br /&gt;
  ...&lt;br /&gt;
#pragma omp for [schedule (&amp;lt;mode&amp;gt;,&amp;lt;chunk&amp;gt;)&lt;br /&gt;
  for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
    // Ez a kódrész lesz párhuzamosítva&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
  // ... és ez a köd is minden szál esetén végrehajtódik&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Ciklus kifejtés====&lt;br /&gt;
A technika már egy példa erejéig a vektorizációnál is látható, de ott nem került részletezésre. A megoldás lényege, hogy a kellően nagy ciklust szétdaraboljuk kisebb darabokra, amit már külön feldolgozhatóak, ezzel párhuzamosítva a folyamatokat. Az egy darab kiindulási ciklusból két darab egymásba ágyazott ciklust hozunk létre, ami ugyanazon a feladattéren dolgozik. &lt;br /&gt;
&lt;br /&gt;
Eredeti állapot:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Átírt változat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int STRIP=1024;&lt;br /&gt;
for (int ii = 0; ii &amp;lt; n; ii += STRIP)&lt;br /&gt;
 for (int i = ii; i &amp;lt; ii+STRIP; i++) {...}&lt;br /&gt;
&lt;br /&gt;
// ha még van maradék elem, akkor azokon is végrehajtjuk a számításokat&lt;br /&gt;
if (n%STRIP != 0) {&lt;br /&gt;
  for (i=n-(n%STRIP)+1; i&amp;lt;n; i++) {...}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A darabok mérete (STRIP értéke) az adott rendszer és feladat függvényében változhat, tehát ez egyfajta &amp;quot;tuning&amp;quot; paraméter.&lt;br /&gt;
&lt;br /&gt;
====Automatikus ciklusösszevonás====&lt;br /&gt;
Az OpenMP támogatást nyújt több egymásba ágyazott ciklus &amp;quot;összevonására&amp;quot;. Ehhez csak a '''collaps''' fordítási direktívát és az összevonandó ciklusok számát kell megadni. &amp;lt;br /&amp;gt;&lt;br /&gt;
FONTOS: ekkor az automatikus vektorizáció kikapcsolásra kerül!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for collaps(2)&lt;br /&gt;
for (int i=0; i&amp;lt;n; i++)&lt;br /&gt;
  for( int j=0; j&amp;lt;m; j++){...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fneti példában a 2db for ciklis kerül párhuzamosításra úgy, hogy a fordítás során 1db ciklus generálódik belőle, ami a következő paraméterezéssel ekvivalens:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int c=0; c &amp;lt; n*m; c++) {&lt;br /&gt;
  int i = c/n;&lt;br /&gt;
  int j = c%n;&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=Intel_Xeon_Phi&amp;diff=3765</id>
		<title>Intel Xeon Phi</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=Intel_Xeon_Phi&amp;diff=3765"/>
				<updated>2016-05-06T07:26:19Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: /* közvetlen natív használat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Az oldalon található információk segítséget nyújtanak a HPC felhasználóinknak, hogy alkalmazásaikat miként portolhatják valamint optimalizálhatják a hatékonyabb futást szem előtt tartva Intel Xeon Phi koprocesszor kártyákon.&lt;br /&gt;
&lt;br /&gt;
==Hardver bemutatása==&lt;br /&gt;
Intel® Xeon Phi™ Coprocessor 7120P&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fájl:Xeon-phi-family-rwd.png.rendition.intel.web.720.405.png|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
! CPU&lt;br /&gt;
! threads/Core&lt;br /&gt;
!max threads&lt;br /&gt;
! CPU Freq&lt;br /&gt;
! Memória&lt;br /&gt;
! L1 cache&lt;br /&gt;
! L2 cache&lt;br /&gt;
! Interfész&lt;br /&gt;
! Ptot&lt;br /&gt;
! Számítási kapacitás&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 61&lt;br /&gt;
| 4 Hardver&lt;br /&gt;
| 244&lt;br /&gt;
| 1238 GHz&lt;br /&gt;
| 16GB GDDR5&lt;br /&gt;
| 32KB/core&lt;br /&gt;
| 512KB/core&lt;br /&gt;
| PCIe&lt;br /&gt;
| 300W&lt;br /&gt;
| 1,2 TFlop/s dupla pontosság&lt;br /&gt;
|-  align=&amp;quot;center&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| OpenMP-nél csak '''240'''&lt;br /&gt;
|&lt;br /&gt;
| ~100 cycles&lt;br /&gt;
~174 GB/s&lt;br /&gt;
| ~3 cycles&lt;br /&gt;
| ~10 cycles&lt;br /&gt;
| ~7 GB/s&lt;br /&gt;
~1 microsecond&lt;br /&gt;
|&lt;br /&gt;
| 2,4 TFlop/s egyszeres pontosság&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Az Intel® 1. generációs Xeon Phi™ koprocesszorában található 61 processzor ugyanazt a 16GB memóriát éri el, de semmilyen módon se fér hozzá közvetlenül a hoszt gép fizikai memóriájához.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Budapest2_klaszter|Budapest2]] és [[HPC#Szupersz.C3.A1m.C3.ADt.C3.B3g.C3.A9peink_.C3.B6sszehasonl.C3.ADt.C3.A1sa|Debrecen3-Phi]] gépeinkben számítási nodonként 2-2 Phi™ koprocesszor található. &amp;lt;br/&amp;gt;&lt;br /&gt;
A kártyákon speciális célú Linux kernel fut melyre a belépés limitáltan csak a rendszergazdák számára lehetséges SSH-n keresztül a hoszt gépről. Természetesen a kártyára belépve olyan érzésünk lehet, mintha egy sok processzoros gépen dolgoznánk, ami rendelkezik rengeteg memóriával. Ez így is van, de a hatékonyabb kihasználás érdekében az SSH-n keresztüli elérés nem lehetséges, csak a Slurm segítségével valamint a programozási nyelvek által támogatott csatornákon keresztül. Ennek részletezése lentebb megtalálható.&lt;br /&gt;
&lt;br /&gt;
==Használati módok==&lt;br /&gt;
A koprocesszor használatai módjait két csoportba lehet sorolni. A '''natív''' és az '''offload''' használatot.  &amp;lt;br/&amp;gt;&lt;br /&gt;
Ezen használati módokról a lenti fejezetekben több részletet is megtudhat. Az itt megfogalmazott &amp;quot;támogatás&amp;quot; csak a mi infrastruktúránkra érvényes! &amp;lt;br /&amp;gt;&lt;br /&gt;
A bemutatott példák ''c++'' nyelven vannak, de természetesen ''c'' és ''fortran'' esetén is megtalálható az ekvivalens módszer.&lt;br /&gt;
&lt;br /&gt;
===a) nem támogatott mód===&lt;br /&gt;
====közvetlen natív használat====&lt;br /&gt;
A natív mód arra szolgál, hogy a MIC kártyára  lefordított alkalmazásunkat felmásoljuk a kártyára, majd belépünk SSH-n a kártyára és azon futtatjuk a bináris kódunkat. &amp;lt;br /&amp;gt;&lt;br /&gt;
Ha elérhető lenne a mód, a '''-mmic''' kapcsolót kellene használni a fordításnál és a fordító egy máris a MIC architektúrára kész binárist készít nekünk. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===b) támogatott, de nem preferált használat===&lt;br /&gt;
====automatikus kódátvitel====&lt;br /&gt;
Ebben az esetben nem kell átmásolnunk a bináris alkalmazásunkat a kártyára sőt még csak be se kell lépnünk, mert ezt a két lépést egy beépített tool végzi el. &amp;lt;br/&amp;gt;&lt;br /&gt;
A tool eléréséhez szükséges parancs neve: '''micnativeloadex'''&lt;br /&gt;
&lt;br /&gt;
Ebben az esetben a workflow a következőképpen módosul:&lt;br /&gt;
# Alkalmazás megírása. például [[Média:hello.cc|''hello.cc'']]&lt;br /&gt;
# Alkalmazás fordítása &amp;lt;br/&amp;gt; &amp;lt;pre&amp;gt;icpc -o hello-MIC -mmic hello.cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
# A tool futásához szükséges library-k megadása &amp;lt;br&amp;gt; &amp;lt;pre&amp;gt;export SINK_LD_LIBRARY_PATH=/opt/intel/composerxe/compiler/lib/mic&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Alkalmazás futtatása &amp;lt;br/&amp;gt; &amp;lt;pre&amp;gt;micnativeloadex hello-MIC&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| BUDAPEST2[cn10] phi (0)$ export SINK_LD_LIBRARY_PATH=/opt/intel/composerxe/compiler/lib/mic &amp;lt;br/&amp;gt;BUDAPEST2[cn10] phi (0)$ micnativeloadex hello-MIC &amp;lt;br/&amp;gt;Hello world! I have 244 logical cores.&amp;lt;br/&amp;gt;BUDAPEST2[cn10] phi (0)$&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===c) támogatott módok===&lt;br /&gt;
====Offload====&lt;br /&gt;
Az Offload modell esetén szükséges a forráskód módosítása, mégpedig úgy, hogy azon kódrészletet, amit a koprocesszoron szeretnénk futtatni, ki kell egészíteni egy fordítási direktívával. Az alkalmazás fordításakor elegendő csak a CPU-ra való binárist készíteni mivel a modell végzi a megfelelő forrás részlet mozgatását és futtatását.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:offload.png|Offload modell]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánkban jól látható, hogy a második kiíratás már a koprocesszoron fut.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main(int argc, char * argv[]) {&lt;br /&gt;
  printf(&amp;quot;Hello world from host!\n&amp;quot;);&lt;br /&gt;
#pragma offload target(mic)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;Hello world from coprocessor!\n&amp;quot;); fflush(stdout);&lt;br /&gt;
  }&lt;br /&gt;
  printf(&amp;quot;Bye\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebben a példában az operációs rendszer választja ki, hogy melyik Phi kártyán fusson le a kódrészlet. Amennyiben mi szeretnénk explicite megmondani, hogy melyik kártyán fusson, akkor a fordítási direktívában a mic kulcsszó után kell tenni egy &amp;quot;:&amp;quot;-t és a kártya sorszámát [mi esetünkben 0 vagy 1]. Ekkor így nézne ki a direktíva: ''#pragma offload target(mic:1)''&lt;br /&gt;
&lt;br /&gt;
Amennyiben az offload szekcióban függvény hívás is szerepel, akkor szükségeltetik az függvény futásához szükséges változók adatterületének átmásolása a Phi kártyára, majd a lefutás után visszamásolni a hoszt gépre. Ezen másolást az ''offload_attribute'' ''push'' és ''pop'' paraméterei segítségével határozhatjuk meg. &amp;lt;br /&amp;gt;&lt;br /&gt;
A következő mátrix-vektor szorzás példánál az A mátrix globális változó, míg a b és c vektorok a függvény paraméterei.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//A változók felmásolásra kerülnek a Xeon Phi-re&lt;br /&gt;
#pragma offload_attribute(push, target(mic))&lt;br /&gt;
  double* A;&lt;br /&gt;
  void MatrixVector(double *b, double *c, double m, double n) {&lt;br /&gt;
    ...&lt;br /&gt;
    c[] = A[..]*b[]&lt;br /&gt;
  }&lt;br /&gt;
// felmásolt objektumok visszamásolása&lt;br /&gt;
#pragma offload_attribute(pop)&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  ...&lt;br /&gt;
#pragma offload target(mic) in(A[0:n*m])&lt;br /&gt;
// így is meg lehetne adni: #pragma offload target(mic:0) in(A : length(n*m))	        &lt;br /&gt;
  {&lt;br /&gt;
    MatrixVector(b, c, m, n);&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ekkor minden memória területet 2x kell másolni, egyszer fel a kártyára, majd másodszor vissza a hoszt gépre, pedig elegendő lenne csak az eredmény vektort visszamásolni. Ezen optimalizálással egy későbbi fejezetben foglalkozunk. &amp;lt;p /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Futás során kaphatunk részletes riportot is, hogy pontosan milyen adatmozgatások történnek az alkalmazás futása során. Ehhez nincs szükség másra csak az '''OFFLOAD_REPORT''' környezeti változó megfelelő beállítása. A beállított értékek 1, 2 vagy 3 lehetnek, attól függően mennyire részletes riportot szeretnénk kapni. &amp;lt;br /&amp;gt;&lt;br /&gt;
beállítás:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OFFLOAD_REPORT=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
példa kimenet a hello alkalmazásra:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hello world from host!&lt;br /&gt;
[Offload] [MIC 0] [File]                    hello_offload.cc&lt;br /&gt;
[Offload] [MIC 0] [Line]                    5&lt;br /&gt;
[Offload] [MIC 0] [Tag]                     Tag 0&lt;br /&gt;
Hello world from coprocessor!&lt;br /&gt;
[Offload] [HOST]  [Tag 0] [CPU Time]        0.554653(seconds)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [CPU-&amp;gt;MIC Data]   0 (bytes)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [MIC Time]        0.000140(seconds)&lt;br /&gt;
[Offload] [MIC 0] [Tag 0] [MIC-&amp;gt;CPU Data]   0 (bytes)&lt;br /&gt;
Bye&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Offload + OpenMP====&lt;br /&gt;
Amennyiben nem csak 1 processzort szeretnénk használni a Phi kártyánkon és az alkalmazásunkban használt számítás megengedi a párhuzamosítást, akkor az OpenMP segítségével párhuzamosíthatjuk a megfelelő számítást. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:Offload+openmp.png|Offload modell és OpenMP]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánk maradjon ugyanúgy a mátrix-vektor szorzás. Amennyiben a teljes kártya adta kapacitást ki szeretnénk használni, akkor az OMP threadek számát 240-re kell beállítani. Azért nem 244-re, mivel 1 CPU-t dedikáltan csak a kommunikációra használ a rendszer és 1 CPU 4 hardver threaddel rendelkezik.&lt;br /&gt;
Ekkor a példánk így változik:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;omp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#pragma offload_attribute(push, target(mic))&lt;br /&gt;
void multiply(int n, int m, double* A, double* b, double* c){&lt;br /&gt;
  const int nCPUs = omp_get_max_threads();   //240&lt;br /&gt;
  omp_set_num_threads(nCPUs);&lt;br /&gt;
#pragma omp parallel for schedule(dynamic, 1)&lt;br /&gt;
  for ( int i = 0 ; i &amp;lt; m ; i++)&lt;br /&gt;
     for ( int j = 0 ; j &amp;lt; n ; j++)&lt;br /&gt;
       c[i] += A[i*n+j] * b[j];&lt;br /&gt;
}&lt;br /&gt;
#pragma offload_attribute(pop)&lt;br /&gt;
&lt;br /&gt;
int main(){&lt;br /&gt;
  double * A = (double*) malloc(sizeof(double)*n*m);&lt;br /&gt;
  ...&lt;br /&gt;
#pragma offload target(mic) in(A:length(n*m))&lt;br /&gt;
     multiply(n, m, A, b, c);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az alkalmazás fordításánál a fordítónak meg kell adni, hogy használhja az openmp library-ket is. Ezt a '''-qopenmp''' kapcsolóval tudjuk elérni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
icpc -o matrix-CPU -qopenmp matrix.cc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MPI + Offload + OpenMP====&lt;br /&gt;
Abban az esetben, ha 1 számítási node nem elég, MPI segítségével össze tudunk kötni több nodet, heterogén rendszert alkotva, és azokon alkalmazható a fenti Offload + OpenMP modell. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fájl:Mpi+offload+openmp.png|MPI elosztás valamint Offload modell és OpenMP]] &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Phi használat slurm-mel==&lt;br /&gt;
Slurm esetén a mic opciót kell megadni a gres-knél. Amennyiben egynél több kártyára van szükség, akkor azt a ''mic:2''-vel lehetséges megadni. Ekkor két kártyát foglal le az ütemező a futtatandó feladatnak. &amp;lt;br /&amp;gt;&lt;br /&gt;
Egy lehetséges feladat, amit srun-nal lehet a slurmben beküldeni. debrecen3 esetén a ''prod-phi'' particiót kell használni&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat slurm_job_openmp_phi&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#SBATCH -A &amp;lt;PROJECT NEVE&amp;gt;&lt;br /&gt;
#SBATCH --job-name=&amp;lt;JOB NEVE&amp;gt;&lt;br /&gt;
#SBATCH --gres mic:2&lt;br /&gt;
#SBATCH --time=1:00:00&lt;br /&gt;
#SBATCH --partition=prod&lt;br /&gt;
#SBATCH -o slurm-%A.out&lt;br /&gt;
export OMP_NUM_THREADS=2&lt;br /&gt;
./runme_openmp_2phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ekkor a feladat beküldése a következő paranccsal lehetséges.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
srun ./slurm_job_openmp_phi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Alkalmazások optimalizálása a kártyára==&lt;br /&gt;
Ebben a fejezetben optimalizálási lehetőségeket mutatunk be, melyek segítségül szolgálhatnak az egyes alkalmazások hatékonyabb futása érdekében ezzel jobban kihasználni a rendelkezésre álló erőforrások adta számítási kapacitás.&lt;br /&gt;
&lt;br /&gt;
===Környezeti változók===&lt;br /&gt;
Lehetséges csak a Phi kártyákon használt környezeti változók beállítása, amit az alkalmazásunk használni is tud. &amp;lt;br /&amp;gt;&lt;br /&gt;
Példánkban az OpenMP esetén használható szálak számát állíthatjuk be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIC_ENV_PREFIX=XEONPHI&lt;br /&gt;
export OMP_NUM_THREADS=12&lt;br /&gt;
export XEONPHI_OMP_NUM_THREADS=240&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A beállított prefix tetszőleges karaktersorozat lehet, a lényeg, hogy ezt a beállított prefixet használjuk a környezeti változók esetén is!&lt;br /&gt;
 &lt;br /&gt;
===Hosszredukció===&lt;br /&gt;
Többnyire a fordítók, ha nem mondjuk meg explicite, a dupla pontosságú változatot választják a lehetséges változó- és függvény típusok közül. Amennyiben a számításunk nem igényli a dupla pontosságot, akkor használjuk a forrásban mindenhol az adott típus vagy függvény egyszeres pontosságú változatát, mellyel jelentős teljesítmény növekedést tudunk elérni. Továbbá az egyes műveletek futási ideje nem egyforma, így a műveletet helyettesíthetjük más művelettel, ami gyorsabb, akkor ismét javíthatunk a hatékonyságon. &amp;lt;br /&amp;gt;&lt;br /&gt;
Íme pár példa, amit alkalmazni lehet:&lt;br /&gt;
* &amp;quot;''/''&amp;quot; művelet helyett &amp;quot;''*''&amp;quot; -t használjunk, mert azt gyorsabban végre tudja hajtani a processzor&lt;br /&gt;
* ''pow'' =&amp;gt; ''1.0 / sqrt()''    , tetszőleges hatványozás, pl.: 3/2-ik hatvány&lt;br /&gt;
* hardver áltatl támogatott műveletek:&lt;br /&gt;
** ''exp'' =&amp;gt; ''exp2''&lt;br /&gt;
** ''log'' =&amp;gt; ''log2''&lt;br /&gt;
* dupla pontosság -&amp;gt; egyszeres pontosság lebegőpontos számok és műveletek esetén &lt;br /&gt;
** ''1.0'' =&amp;gt; ''1.0f''&lt;br /&gt;
** ''pow'' =&amp;gt; ''powf''&lt;br /&gt;
&lt;br /&gt;
===Vektorizáció===&lt;br /&gt;
A vektorizáció azon fordítási időben eldönthető optimalizációs faktor, amely nagy mértékben függ attól a hardver felépítésétől, amire éppen a fordítás történni fog. Legfontosabb befolyásoló tényezők a processzor cache méretei illetve a vektor műveletekért felelős aritmetikai egységének jellemzői mivel ezeket használja fel a fordító az optimalizálási folyamata során. &amp;lt;br /&amp;gt;&lt;br /&gt;
Az automatikus vektorizáció minimum -O2 szinttől érvényes, de mivel általában ez a szint az alapértelmezett, ezért minden fordításnál alkalmazásra kerül. &amp;lt;br /&amp;gt;&lt;br /&gt;
A fordító programnak a következő kapcsolókat lehet megadni, melyek segítenek a minél jobb vektorizációban:&lt;br /&gt;
* ''-qopt-report=&amp;lt;szám&amp;gt;'' ; az optimalizációs jelentés részletességét lehet megadni 0-tól 5-ig, ahol az 5-s szint a legrészletesebbet jelenti&lt;br /&gt;
* ''-qopt-report-phase:vec'' ; a vektorizációról szeretnék jelentést kapni&lt;br /&gt;
* ''-opt-report-file=&amp;lt;fájlnév&amp;gt;'' ; megadható a riportfájl neve&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
icpc autovec.cc -mmic -qopt-report=5 -opt-report-file=vectorization.oMIC.optrpt -qopt-report-phase:vec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SIMD====&lt;br /&gt;
Az adatok hatékonyabb feldolgozására az egyik megvalósítás a SIMD (Single Instruction Multiple Data), amikor is a különálló adatokat úgy kezeli, mintha az vektorok volnának és azon végzi el a vektor-műveletet. Ezzel egy a hardver által támogatott műveletet végzünk egy lépésben egy nagyobb adatmennyiségen, ezzel párhuzamosítva a feldolgozási folyamatot. Ezzel a módszerrel nagyon jó adat szintű párhuzamosítást lehet elérni.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fájl:Simd.png|SIMD]]&lt;br /&gt;
&lt;br /&gt;
Főbb támogatott műveletek:&lt;br /&gt;
* aritmetikai műveletek, bináris operátorok&lt;br /&gt;
* összehasonlítások&lt;br /&gt;
* konverziók és típus kasztolások&lt;br /&gt;
* bit-műveletek: NOT, AND, OR, XOR, XAND&lt;br /&gt;
&lt;br /&gt;
Használata: '''simd''' fordítási direktívával lehetséges &amp;lt;br /&amp;gt;&lt;br /&gt;
Például:&lt;br /&gt;
* egyszerű vektorizáció&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  A[i] += B[i];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* adat párhuzamosítás OpenMP segítségével&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  DoSomeWork(A[i]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====AoS -&amp;gt; SoA====&lt;br /&gt;
A kiindulás probléma az, hogy a struktúrákat tartalmazó vektort nem lehet jól vektorizálni, mivel a cache-ben tárolt adatok nagy többsége feleslegesen van bent, mivel azon adatokat csak egy későbbi ciklus futás során fogja az alkalmazás feldolgozni. Tehát ezen adatok jelenleg feleslegesen foglalják a cache területet, ahelyett, hogy hasznos adatot tárolnánk ott.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct MyStructure {&lt;br /&gt;
  float x, y, z;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void My_Function(cons int nItem, MyStructure* const Items, const float delta) {&lt;br /&gt;
  for (int i = 0; i &amp;lt; nItem; i++) {&lt;br /&gt;
    ...&lt;br /&gt;
    for (int j = 0; j &amp;lt; nItem; j++) {&lt;br /&gt;
      const float dx = Items[j].x - Items[i].x;&lt;br /&gt;
      const float dy = Items[j].y - Items[i].y;&lt;br /&gt;
      const float dz = Items[j].z - Items[i].z;&lt;br /&gt;
      ...  &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  ... &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A vektorban a struktúrák tárolása helyett minden elemnek egy dedikált vektort allokálunk és így könnyen tudja a fordító vektorizálni azt. Természetesen segítségként a vektor feldolgozását &amp;quot;tömbösítettük&amp;quot; a tileSize méret megadásával illetve a ''unroll'' fordítási direktíva segítségével.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct MyStructureSet {&lt;br /&gt;
  float *x, *y, *z;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void My_Function(cons int nItem, MyStructure* const Items, const float delta) {&lt;br /&gt;
  const int tileSize = 16;&lt;br /&gt;
#pragma omp parallel for schedule(guided)&lt;br /&gt;
  for (int ii = 0; ii &amp;lt; nItem; ii+= tileSize) {&lt;br /&gt;
    ...&lt;br /&gt;
#pragma unroll(tileSize)&lt;br /&gt;
    for (int j = 0; j &amp;lt; nItem; j++) {&lt;br /&gt;
#pragma unroll(tileSize)&lt;br /&gt;
      for (int i = ii; i &amp;lt; ii + tileSize; i++) {&lt;br /&gt;
        const float dx = Items.x[j] - Items.x[i];&lt;br /&gt;
        const float dy = Items.y[j] - Items.y[i];&lt;br /&gt;
        const float dz = Items.z[j] - Items.z[i];&lt;br /&gt;
        ...&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  ... &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Hatékony hossz választás====&lt;br /&gt;
Olyan esetben jelent előnyt, ha például az n*n-es mátrix esetén n nem osztható 16-val, mert akkor a vektorizáció nem teljesen hajtható végre. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// n%16 != 0&lt;br /&gt;
float* A = _mm_malloc(sizeof(float)*n*n, 64);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ilyen esetben mindig marad egy kis vektor részlet, amire elemenként kell elvégezni a műveletet.&amp;lt;br /&amp;gt;&lt;br /&gt;
A megoldást az jelenti, hogy a memória allokálást kiterjesztjük és nagyobb memória területet foglalunk a változónak, így már alkalmazható lesz a vektorizáció, mivel a maradvány területen is el tudjuk végezni a műveletet egy lépésben.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int lda=n;&lt;br /&gt;
if (n % 16 != 0) lda += (16 - n%16); // most lda%16==0&lt;br /&gt;
float* A = _mm_malloc(sizeof(float)*n*lda, 64);&lt;br /&gt;
&lt;br /&gt;
// használat&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
  for (int j = 0; j &amp;lt; n; j++)&lt;br /&gt;
    A[i*lda + j] = ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Héj ciklusok&amp;quot; kiküszöbölése====&lt;br /&gt;
Ciklusok esetén lehetséges, hogy a vektorizációt nem teljes mértékben ismeri fel a fordító program. &lt;br /&gt;
Ekkor segíthetünk a fordítónak egy fordítási direktívával ('''#pragma vector aligned'''), ha teljes mértékben biztosak vagyunk, hogy a ciklusunk vektorizálható!&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma vector aligned&lt;br /&gt;
  for (int j = 0; j &amp;lt; n; j++)&lt;br /&gt;
    A[i*lda + j] -= ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ettől jelentős futás idejű javulást érhetünk el, mivel ezzel a #pragma-val kikapcsoltuk a futás idejű ellenőrzést, de előfordulhatnak olyan esetek, főleg amikor nem jól mértük fel a ciklusunkat és nem sikerült a vektorizálás, hogy ''Segmentation fault'' hibára fogunk futni.&lt;br /&gt;
&lt;br /&gt;
====Regularizáció====&lt;br /&gt;
Van egy ciklusunk, ami egy vektor elemeit módosítja. A processzor az adatokat &amp;quot;csokorba szedve&amp;quot; emeli be a belső kis méretű cache-be. Egyszerre természetesen több vektor elem is bekerül a a cache-be ezzel gyorsítva a feldolgozást. Ezen vektor iterációk valahogyan ráilleszkedik a vektorra.&lt;br /&gt;
&lt;br /&gt;
[[Fájl:regularization.png|Vektor regularizáció]]&lt;br /&gt;
&lt;br /&gt;
Abban az esetben, amikor ez az illesztés nem teljesen tökéletes (lsd. piros elemek), keletkeznem héj ciklusok, melyeket a regularizációval is eliminálni lehet. &amp;lt;br /&amp;gt;&lt;br /&gt;
A feladat eredetileg valahogyan így nézhet ki:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int i = 0; i&amp;lt;n; i++)&lt;br /&gt;
  A[i]=...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ez a következő átalakítással már alkalmas vektorizációra és nem lesz &amp;quot;peel loop&amp;quot; probléma.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int b=0; b&amp;lt;n; b++) {&lt;br /&gt;
  const int jStart = b- b%16; // mindig osztható 16-val&lt;br /&gt;
  ...&lt;br /&gt;
#pragma simd&lt;br /&gt;
  for (int j = jStart; j&amp;lt;n; j++)&lt;br /&gt;
    A[j]=...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Párhuzamosítás===&lt;br /&gt;
Több féle mód létezik a párhuzamosításra. Korábban említettük a SIMD technikát, ami adatpárhuzamosításra való 1 processzoron belül, de létezik még processzorok közti párhuzamosítás, amit az OpenMP segítségével tudunk hatékonyan megvalósítani. Amennyiben gépek közti párhuzamosításra, üzenek küldésre van szükség, akkor az MPI-t kell segítségül hívni. Általános megoldás nem létezik minden feladatra, mert MPI is alkalmas lehet gépen belüli párhuzamosításra, nem csak az OpenMP. Amit mérlegelni kell, hogy mi az amire az alkalmazásnak szükséges van illetve mekkora kommunikációs overhead keletkezik, ha lecseréljük az OpenMP-t MPI-ra. Általában az egymástól független számításokat OpenMP-vel, míg a kommunikációt igénylő feladatokra MPI-t szoktak használni.&lt;br /&gt;
&lt;br /&gt;
====Szálak párhuzamosítása====&lt;br /&gt;
Az OpenMP-nek környezeti változók segítségével megadható a párhuzamosan futtatható szálak száma. Ezt a következő paranccsal tudjuk megtenni, ahol 5-re állítjuk.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OMP_NUM_THREADS=5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Forrásban a párhuzamos szálakat a ''#pragma omp parallel'' segítségével adhatjuk meg.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for              	//külső for szálak párhuzamosítása&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
#pragma simd				// vektorizáció a belső cikluson&lt;br /&gt;
  for (int j = 0; j &amp;lt; m; j++)&lt;br /&gt;
    My_Function(A[i][j]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fordítási direktívák össze is vonhatóak, ilyenkor 1 ciklus is elég.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for simd&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
    My_Function(A[i]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Változók láthatósága, megosztása=====&lt;br /&gt;
Változók hatókörét a programozási nyelven kívül pragma-k segítségével is beállíthatjuk, hogy megosztott legyen a változó vagy a szálra nézve saját példány. Amennyiben nem definiáljuk felül, akkor minden változó megosztott. A felül definiálást a private és a shared paraméterekkel lehet megadni az OpenMP-nek.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int A, B, C;&lt;br /&gt;
&lt;br /&gt;
#pragma omp parallel private(A) shared(B)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Az itteni példában az B és C megosztott változó a szálak között, míg A-t minden szálnak lemásolja a futás kezdetén.&lt;br /&gt;
&lt;br /&gt;
====Párhuzamos szálak ütemezése====&lt;br /&gt;
OpenMp a szálak ütemezésére három féle módod kínál fel.&lt;br /&gt;
Módok:&lt;br /&gt;
* '''static''' (alapértelmezett): egyenletesen arányban egymás után elosztja a processzeket az indított szálakon, ezért a futási idő tetszőlegesen elhúzódhat, ha egyes processzek lassabban futnak le.&lt;br /&gt;
* '''dynamic''': minden esetben az első szabad szálra kerül a következő processz ütemezése, folyamatos kihasználtságot elérve, de &amp;quot;költséges&amp;quot; a sok-sok ütemezés&lt;br /&gt;
* '''guided''': Az előző két mód ötvözése. Nagyobb procesz számot ütemez az éppen szabad szálakra, melyek számát folyamatosan csökkenti a futás előre haladtával, hogy körülbelül egyszerre fejeződjön be minden szál futása, ezzel csökkentve a dynamic esetén magad ütemezési időráfordítást.&lt;br /&gt;
&lt;br /&gt;
Mindhárom esetben megadható az egyszerre ütemezett processzek száma, amit a ''chunk'' értéke határoz meg. Ha megvan adva a chunk értéke, akkor az minden esetben annak megfelelő processzámot ütemez a szálakra.&lt;br /&gt;
Használata:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel [schedule (&amp;lt;mode&amp;gt;,&amp;lt;chunk&amp;gt;) {...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Szálak szinkronizációja====&lt;br /&gt;
Szála szinkronizálását többféle módon lehet megvalósítani, de ezen megoldások sajno jelentősen lelassítják a program futását.&lt;br /&gt;
* mutexxel: nagyon lassú, állandóan várnak egymásra a párhuzamos szálak&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
#pragma omp critical&lt;br /&gt;
  { // kritikus szekció, csak egy szál hajthatja végre&lt;br /&gt;
    total = total + i;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* atomi művelet definiálása: sajnos még ez is lassú, de itt már nem olyan &amp;quot;erős&amp;quot; a szinkronizáció, ezért rendkívül sok limitációja van az itt használható atomi műveleteknek.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
#pragma omp atomic&lt;br /&gt;
   total += i;&lt;br /&gt;
}	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Párhuzamos redukció=====&lt;br /&gt;
Az itt bemutatott eljárás gyorsabb mint a fenti szinkronizációs megoldás, de sajnos nem alkalmazható vektorokra! A redukciót a ''reduction(operation: scalar)'' formában kell megadni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int sum = 0;&lt;br /&gt;
#pragma omp parallel for reduction(+: sum)&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
  sum = sum + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tulajdonképpen a fenti problémakörre a következő minta ad megoldást. Ekkor egy külön változóban akkumuláltatjuk a szál általi összeget és ezen értékeke összegyűjtését végezzük csak atomi műveletként.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int sum = 0;&lt;br /&gt;
#pragma omp parallel&lt;br /&gt;
{&lt;br /&gt;
  int sum_thr = 0;&lt;br /&gt;
#pragma omp for&lt;br /&gt;
  for (int i=0; i&amp;lt;n; i++)&lt;br /&gt;
    sum_thr += i;&lt;br /&gt;
&lt;br /&gt;
#pragma omp atomic&lt;br /&gt;
  sum += sum_thr;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Ciklusok párhuzamosítása====&lt;br /&gt;
Ciklus párhuzamosítására a következő mintát szokás használni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel&lt;br /&gt;
{&lt;br /&gt;
  // Az itt definiált forrást minden szál esetén végre fog hajtani&lt;br /&gt;
  ...&lt;br /&gt;
#pragma omp for [schedule (&amp;lt;mode&amp;gt;,&amp;lt;chunk&amp;gt;)&lt;br /&gt;
  for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
    // Ez a kódrész lesz párhuzamosítva&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
  // ... és ez a köd is minden szál esetén végrehajtódik&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Ciklus kifejtés====&lt;br /&gt;
A technika már egy példa erejéig a vektorizációnál is látható, de ott nem került részletezésre. A megoldás lényege, hogy a kellően nagy ciklust szétdaraboljuk kisebb darabokra, amit már külön feldolgozhatóak, ezzel párhuzamosítva a folyamatokat. Az egy darab kiindulási ciklusból két darab egymásba ágyazott ciklust hozunk létre, ami ugyanazon a feladattéren dolgozik. &lt;br /&gt;
&lt;br /&gt;
Eredeti állapot:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int i = 0; i &amp;lt; n; i++) {...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Átírt változat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int STRIP=1024;&lt;br /&gt;
for (int ii = 0; ii &amp;lt; n; ii += STRIP)&lt;br /&gt;
 for (int i = ii; i &amp;lt; ii+STRIP; i++) {...}&lt;br /&gt;
&lt;br /&gt;
// ha még van maradék elem, akkor azokon is végrehajtjuk a számításokat&lt;br /&gt;
if (n%STRIP != 0) {&lt;br /&gt;
  for (i=n-(n%STRIP)+1; i&amp;lt;n; i++) {...}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A darabok mérete (STRIP értéke) az adott rendszer és feladat függvényében változhat, tehát ez egyfajta &amp;quot;tuning&amp;quot; paraméter.&lt;br /&gt;
&lt;br /&gt;
====Automatikus ciklusösszevonás====&lt;br /&gt;
Az OpenMP támogatást nyújt több egymásba ágyazott ciklus &amp;quot;összevonására&amp;quot;. Ehhez csak a '''collaps''' fordítási direktívát és az összevonandó ciklusok számát kell megadni. &amp;lt;br /&amp;gt;&lt;br /&gt;
FONTOS: ekkor az automatikus vektorizáció kikapcsolásra kerül!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for collaps(2)&lt;br /&gt;
for (int i=0; i&amp;lt;n; i++)&lt;br /&gt;
  for( int j=0; j&amp;lt;m; j++){...}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A fneti példában a 2db for ciklis kerül párhuzamosításra úgy, hogy a fordítás során 1db ciklus generálódik belőle, ami a következő paraméterezéssel ekvivalens:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
for (int c=0; c &amp;lt; n*m; c++) {&lt;br /&gt;
  int i = c/n;&lt;br /&gt;
  int j = c%n;&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3601</id>
		<title>HPC software</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3601"/>
				<updated>2016-04-26T13:04:58Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current version of software on specific machines might be higher than described here. We are encouraging all users to install other tools to be used on our servers if service AUP and license restrictions are respected.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!Software component&lt;br /&gt;
!Debrecen&lt;br /&gt;
!Pécs&lt;br /&gt;
!Szeged&lt;br /&gt;
!Budapest&lt;br /&gt;
!Budapest2&lt;br /&gt;
!Debrecen2,3 (Leo, Apollo)&lt;br /&gt;
!Miskolc&lt;br /&gt;
|-&lt;br /&gt;
| colspan=8| '''Compiler environment (compiler, debugger, profiler)'''&lt;br /&gt;
|-&lt;br /&gt;
| AMD [http://developer.amd.com/tools-and-sdks/cpu-development/x86-open64-compiler-suite/ compilers ((opencc, openf90, openf95))] || colspan=2|-||colspan=2|Available||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| Math. Library (AMD) [http://developer.amd.com/tools/cpu-development/amd-core-math-library-acml ACML] ||colspan=2|-||colspan=2|4.2.4||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://sources.redhat.com/gdb/ GDB] || colspan=2|7|| colspan=2|7.0.1|| colspan=2|7.2||7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/ GNU compilers (gcc, g++, gfortran)]||4,3||4.1.2 || colspan=2|4.1.2, 4.4.4|| colspan=2|4.4.7|| 4.3.4&lt;br /&gt;
|-&lt;br /&gt;
| Gprof|| colspan=2|2,2|| colspan=2|2,17|| colspan=2|2.20|| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| Intel [http://software.intel.com/en-us/articles/intel-composer-xe/ compilers (icc, ifort)], [http://software.intel.com/en-us/articles/intel-math-kernel-library-documentation/ MKL],  [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/ Linking]  ||colspan=2|12.1.5 (composerxe-2011 Update 11) ||colspan=2|-|| colspan=3|16.0&lt;br /&gt;
|- &lt;br /&gt;
| [http://oprofile.sourceforge.net/ Oprofile] ||  colspan=3|- ||0.9.4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Libraries supporting parallel development'''&lt;br /&gt;
|- &lt;br /&gt;
| LAM-MPI ||colspan=2|- ||colspan=2|7.1.2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| MPICH2 ||colspan=2|1,4||colspan=2|1,2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://openmp.org/ OpenMP]||colspan=2|2.5 (GNU), 3.0 (Intel)||colspan=2|2.5 (GNU), 2.5 (AMD) ||colspan=3|2.5 (GNU), 3.0 (Intel)&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.open-mpi.org/ OpenMPI] ||1.4.2 ||1.3.2 ||colspan=2|1.4.3 || colspan=2|1.8.5||1.6.3&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.csm.ornl.gov/pvm/ PVM] ||colspan=4|3.4.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://videotorium.hu/hu/recordings/details/12291,Overview_and_usage_of_the_SGI_HPC_softwares_on_the_SGI_ICE_and_SGI_UV_supercomputers SGI Perf. Suite] ||colspan=2|Available||colspan=2|-||colspan=2|-||Available&lt;br /&gt;
|- &lt;br /&gt;
| SGI-MPI (MPT) ||colspan=2|2,04||colspan=2|-||colspan=2|-||2.12&lt;br /&gt;
|- &lt;br /&gt;
| PGI Compiler and Tools ||colspan=5|-|| 15.10 || -&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Libraries supporting scientific work'''&lt;br /&gt;
|- &lt;br /&gt;
| Atlas ||colspan=4|3.8.3||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| BLACS ||colspan=4|1.1 (OpenMPI, MPICH2) ||-||3.1.3||-&lt;br /&gt;
|- &lt;br /&gt;
| BLAS ||colspan=2|3.2.2 ||colspan=2|3||colspan=2|-||3&lt;br /&gt;
|- &lt;br /&gt;
| Boost||colspan=2|1,36||colspan=2|1,33||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| FFTW ||colspan=2|3.1.2 ||colspan=2|3.2.2||colspan=2|-||3.3.3&lt;br /&gt;
|- &lt;br /&gt;
| Gromacs ||colspan=2|4.5.4 ||colspan=2|4.5.5||colspan=2|-||4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| GUILE ||colspan=2|1.8.5 ||colspan=2|-||colspan=2|-||1.8.8&lt;br /&gt;
|- &lt;br /&gt;
| HDF5 ||colspan=2|1.8.7||colspan=2|-||colspan=2|1.8.17||-&lt;br /&gt;
|- &lt;br /&gt;
| Lapack ||colspan=2|3.2.2 ||colspan=2|3 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.maplesoft.com/ Maple] ||colspan=2| - ||colspan=2|18||-||2015||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.niif.hu/node/645 Matlab] ||colspan=2|7.13.0 (R2011b)|| colspan=2|-||-||R2015b||-&lt;br /&gt;
|- &lt;br /&gt;
| NumPy ||colspan=2|1,3||colspan=2|1.5.1||colspan=2|-||1.7.0&lt;br /&gt;
|- &lt;br /&gt;
| Octave ||colspan=2|3,4||colspan=2|3.0.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Qt||colspan=2|3.3.8b, 4.6.2||colspan=2|3.3.6 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| R ||colspan=2|2.8.1 ||colspan=2|-||colspan=2|-||3.0.1&lt;br /&gt;
|- &lt;br /&gt;
| Scalapack||colspan=4|1.7.5||-||2.0.2||-&lt;br /&gt;
|- &lt;br /&gt;
| Scilab ||colspan=2|5.3.2||colspan=2|-||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Sun JRE ||colspan=2|1,6||colspan=2|-||colspan=1|-||1.8||1.7&lt;br /&gt;
|- &lt;br /&gt;
| Gaussian||colspan=3|09_REV_C.01||-||-||colspan=2|09_REV_D.01&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Middleware'''&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.nordugrid.org/arc/ ARC grid middleware] ||colspan=7|4.1.0 (A-REX, ARIS, clients))&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Miscellaneous software'''&lt;br /&gt;
|- &lt;br /&gt;
| Emacs ||colspan=2|22,3||colspan=2|21,4||-||23.1.1||22.3.1&lt;br /&gt;
|- &lt;br /&gt;
| GNU Plot ||colspan=2|4.2.3 ||colspan=2|4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| ImageMagick ||colspan=2|6.4.3 ||colspan=2|6.2.8||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/About/TigerVNC Turbo VNC]||colspan=4|1,1||colspan=3|2&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.blender.org/ Blender]||colspan=3|2,49||-||colspan=2|2.49||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/ VirtualGL]||colspan=3|2.3.2||-||colspan=2|2.4||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.paraview.org/ Paraview]||colspan=3|3.14.1||-||colspan=3|3.14.1&lt;br /&gt;
|- &lt;br /&gt;
| ffmpeg||colspan=2|-||colspan=2|0.4.9||colspan=3|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategória: HPC]]&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3565</id>
		<title>HPC software</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3565"/>
				<updated>2016-04-07T12:43:53Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current version of software on specific machines might be higher than described here. We are encouraging all users to install other tools to be used on our servers if service AUP and license restrictions are respected.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!Software component&lt;br /&gt;
!Debrecen&lt;br /&gt;
!Pécs&lt;br /&gt;
!Szeged&lt;br /&gt;
!Budapest&lt;br /&gt;
!Budapest2&lt;br /&gt;
!Debrecen2,3 (Leo, Apollo)&lt;br /&gt;
!Miskolc&lt;br /&gt;
|-&lt;br /&gt;
| colspan=8| '''Compiler environment (compiler, debugger, profiler)'''&lt;br /&gt;
|-&lt;br /&gt;
| AMD [http://developer.amd.com/tools-and-sdks/cpu-development/x86-open64-compiler-suite/ compilers ((opencc, openf90, openf95))] || colspan=2|-||colspan=2|Available||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| Math. Library (AMD) [http://developer.amd.com/tools/cpu-development/amd-core-math-library-acml ACML] ||colspan=2|-||colspan=2|4.2.4||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://sources.redhat.com/gdb/ GDB] || colspan=2|7|| colspan=2|7.0.1|| colspan=2|7.2||7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/ GNU compilers (gcc, g++, gfortran)]||4,3||4.1.2 || colspan=2|4.1.2, 4.4.4|| colspan=2|4.4.7|| 4.3.4&lt;br /&gt;
|-&lt;br /&gt;
| Gprof|| colspan=2|2,2|| colspan=2|2,17|| colspan=2|2.20|| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| Intel [http://software.intel.com/en-us/articles/intel-composer-xe/ compilers (icc, ifort)], [http://software.intel.com/en-us/articles/intel-math-kernel-library-documentation/ MKL],  [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/ Linking]  ||colspan=2|12.1.5 (composerxe-2011 Update 11) ||colspan=2|-|| colspan=3|16.0&lt;br /&gt;
|- &lt;br /&gt;
| [http://oprofile.sourceforge.net/ Oprofile] ||  colspan=3|- ||0.9.4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Libraries supporting parallel development'''&lt;br /&gt;
|- &lt;br /&gt;
| LAM-MPI ||colspan=2|- ||colspan=2|7.1.2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| MPICH2 ||colspan=2|1,4||colspan=2|1,2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://openmp.org/ OpenMP]||colspan=2|2.5 (GNU), 3.0 (Intel)||colspan=2|2.5 (GNU), 2.5 (AMD) ||colspan=3|2.5 (GNU), 3.0 (Intel)&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.open-mpi.org/ OpenMPI] ||1.4.2 ||1.3.2 ||colspan=2|1.4.3 || colspan=2|1.8.5||1.6.3&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.csm.ornl.gov/pvm/ PVM] ||colspan=4|3.4.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://videotorium.hu/hu/recordings/details/12291,Overview_and_usage_of_the_SGI_HPC_softwares_on_the_SGI_ICE_and_SGI_UV_supercomputers SGI Perf. Suite] ||colspan=2|Available||colspan=2|-||colspan=2|-||Available&lt;br /&gt;
|- &lt;br /&gt;
| SGI-MPI (MPT) ||colspan=2|2,04||colspan=2|-||colspan=2|-||2.12&lt;br /&gt;
|- &lt;br /&gt;
| PGI Compiler and Tools ||colspan=5|-|| 15.10 || -&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Libraries supporting scientific work'''&lt;br /&gt;
|- &lt;br /&gt;
| Atlas ||colspan=4|3.8.3||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| BLACS ||colspan=4|1.1 (OpenMPI, MPICH2) ||-||3.1.3||-&lt;br /&gt;
|- &lt;br /&gt;
| BLAS ||colspan=2|3.2.2 ||colspan=2|3||colspan=2|-||3&lt;br /&gt;
|- &lt;br /&gt;
| Boost||colspan=2|1,36||colspan=2|1,33||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| FFTW ||colspan=2|3.1.2 ||colspan=2|3.2.2||colspan=2|-||3.3.3&lt;br /&gt;
|- &lt;br /&gt;
| Gromacs ||colspan=2|4.5.4 ||colspan=2|4.5.5||colspan=2|-||4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| GUILE ||colspan=2|1.8.5 ||colspan=2|-||colspan=2|-||1.8.8&lt;br /&gt;
|- &lt;br /&gt;
| HDF5 ||colspan=2|1.8.7||colspan=2|-||colspan=2|1.8.17||-&lt;br /&gt;
|- &lt;br /&gt;
| Lapack ||colspan=2|3.2.2 ||colspan=2|3 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.maplesoft.com/ Maple] ||colspan=2| - ||colspan=2|18||-||2015||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.niif.hu/node/645 Matlab] ||colspan=2|7.13.0 (R2011b)|| colspan=2|-||-||R2015b||-&lt;br /&gt;
|- &lt;br /&gt;
| NumPy ||colspan=2|1,3||colspan=2|1.5.1||colspan=2|-||1.7.0&lt;br /&gt;
|- &lt;br /&gt;
| Octave ||colspan=2|3,4||colspan=2|3.0.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Qt||colspan=2|3.3.8b, 4.6.2||colspan=2|3.3.6 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| R ||colspan=2|2.8.1 ||colspan=2|-||colspan=2|-||3.0.1&lt;br /&gt;
|- &lt;br /&gt;
| Scalapack||colspan=4|1.7.5||-||2.0.2||-&lt;br /&gt;
|- &lt;br /&gt;
| Scilab ||colspan=2|5.3.2||colspan=2|-||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Sun JRE ||colspan=2|1,6||colspan=2|-||colspan=1|-||1.8||1.7&lt;br /&gt;
|- &lt;br /&gt;
| Gaussian||colspan=3|09_REV_C.01||-||-||colspan=2|09_REV_D.01&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Middleware'''&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.nordugrid.org/arc/ ARC grid middleware] ||colspan=7|4.1.0 (A-REX, ARIS, clients))&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Miscellaneous software'''&lt;br /&gt;
|- &lt;br /&gt;
| Emacs ||colspan=2|22,3||colspan=2|21,4||-||23.1.1||22.3.1&lt;br /&gt;
|- &lt;br /&gt;
| GNU Plot ||colspan=2|4.2.3 ||colspan=2|4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| ImageMagick ||colspan=2|6.4.3 ||colspan=2|6.2.8||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/About/TigerVNC Turbo VNC]||colspan=4|1,1||colspan=3|2&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.blender.org/ Blender]||colspan=3|2,49||-||colspan=2|2.49||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/ VirtualGL]||colspan=3|2.3.2||-||colspan=2|2.4||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.paraview.org/ Paraview]||colspan=3|3.14.1||-||colspan=3|3.14.1&lt;br /&gt;
|- &lt;br /&gt;
| ffmpeg||colspan=2|-||colspan=2|0.4.9||colspan=3|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3564</id>
		<title>HPC software</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3564"/>
				<updated>2016-04-07T12:43:36Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current version of software on specific machines might be higher than described here. We are encouraging all users to install other tools to be used on our servers if service AUP and license restrictions are respected.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!Software component&lt;br /&gt;
!Debrecen&lt;br /&gt;
!Pécs&lt;br /&gt;
!Szeged&lt;br /&gt;
!Budapest&lt;br /&gt;
!Budapest2&lt;br /&gt;
!Debrecen2,3 (Leo, Apollo)&lt;br /&gt;
!Miskolc&lt;br /&gt;
|-&lt;br /&gt;
| colspan=8| '''Compiler environment (compiler, debugger, profiler)'''&lt;br /&gt;
|-&lt;br /&gt;
| AMD [http://developer.amd.com/tools-and-sdks/cpu-development/x86-open64-compiler-suite/ compilers ((opencc, openf90, openf95))] || colspan=2|-||colspan=2|Available||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| Math. Library (AMD) [http://developer.amd.com/tools/cpu-development/amd-core-math-library-acml ACML] ||colspan=2|-||colspan=2|4.2.4||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://sources.redhat.com/gdb/ GDB] || colspan=2|7|| colspan=2|7.0.1|| colspan=2|7.2||7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/ GNU compilers (gcc, g++, gfortran)]||4,3||4.1.2 || colspan=2|4.1.2, 4.4.4|| colspan=2|4.4.7|| 4.3.4&lt;br /&gt;
|-&lt;br /&gt;
| Gprof|| colspan=2|2,2|| colspan=2|2,17|| colspan=2|2.20|| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| Intel [http://software.intel.com/en-us/articles/intel-composer-xe/ compilers (icc, ifort)], [http://software.intel.com/en-us/articles/intel-math-kernel-library-documentation/ MKL],  [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/ Linking]  ||colspan=2|12.1.5 (composerxe-2011 Update 11) ||colspan=2|-|| colspan=3|16.0&lt;br /&gt;
|- &lt;br /&gt;
| [http://oprofile.sourceforge.net/ Oprofile] ||  colspan=3|- ||0.9.4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Libraries supporting parallel development'''&lt;br /&gt;
|- &lt;br /&gt;
| LAM-MPI ||colspan=2|- ||colspan=2|7.1.2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| MPICH2 ||colspan=2|1,4||colspan=2|1,2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://openmp.org/ OpenMP]||colspan=2|2.5 (GNU), 3.0 (Intel)||colspan=2|2.5 (GNU), 2.5 (AMD) ||colspan=3|2.5 (GNU), 3.0 (Intel)&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.open-mpi.org/ OpenMPI] ||1.4.2 ||1.3.2 ||colspan=2|1.4.3 || colspan=2|1.8.5||1.6.3&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.csm.ornl.gov/pvm/ PVM] ||colspan=4|3.4.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://videotorium.hu/hu/recordings/details/12291,Overview_and_usage_of_the_SGI_HPC_softwares_on_the_SGI_ICE_and_SGI_UV_supercomputers SGI Perf. Suite] ||colspan=2|Available||colspan=2|-||colspan=2|-||Available&lt;br /&gt;
|- &lt;br /&gt;
| SGI-MPI (MPT) ||colspan=2|2,04||colspan=2|-||colspan=2|-||2.12&lt;br /&gt;
|- &lt;br /&gt;
| PGI Compiler and Tools ||colspan=5|-|| 15.10 || -&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Libraries supporting scientific work'''&lt;br /&gt;
|- &lt;br /&gt;
| Atlas ||colspan=4|3.8.3||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| BLACS ||colspan=4|1.1 (OpenMPI, MPICH2) ||-||3.1.3||-&lt;br /&gt;
|- &lt;br /&gt;
| BLAS ||colspan=2|3.2.2 ||colspan=2|3||colspan=2|-||3&lt;br /&gt;
|- &lt;br /&gt;
| Boost||colspan=2|1,36||colspan=2|1,33||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| FFTW ||colspan=2|3.1.2 ||colspan=2|3.2.2||colspan=2|-||3.3.3&lt;br /&gt;
|- &lt;br /&gt;
| Gromacs ||colspan=2|4.5.4 ||colspan=2|4.5.5||colspan=2|-||4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| GUILE ||colspan=2|1.8.5 ||colspan=2|-||colspan=2|-||1.8.8&lt;br /&gt;
|- &lt;br /&gt;
| HDF5 ||colspan=2|1.8.7||colspan=2|-||colspan=2|1.8.17||-&lt;br /&gt;
|- &lt;br /&gt;
| Lapack ||colspan=2|3.2.2 ||colspan=2|3 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.maplesoft.com/ Maple] ||colspan=2| - ||colspan=2|18||-||2015||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.niif.hu/node/645 Matlab] ||colspan=2|7.13.0 (R2011b)|| colspan=2|-||-||R2015b||-&lt;br /&gt;
|- &lt;br /&gt;
| NumPy ||colspan=2|1,3||colspan=2|1.5.1||colspan=2|-||1.7.0&lt;br /&gt;
|- &lt;br /&gt;
| Octave ||colspan=2|3,4||colspan=2|3.0.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Qt||colspan=2|3.3.8b, 4.6.2||colspan=2|3.3.6 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| R ||colspan=2|2.8.1 ||colspan=2|-||colspan=2|-||3.0.1&lt;br /&gt;
|- &lt;br /&gt;
| Scalapack||colspan=4|1.7.5||-||2.0.2||-&lt;br /&gt;
|- &lt;br /&gt;
| Scilab ||colspan=2|5.3.2||colspan=2|-||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Sun JRE ||colspan=2|1,6||colspan=2|-||colspan=1|-||1.8||1.7&lt;br /&gt;
|- &lt;br /&gt;
| Gaussian||colspan=3|09_REV_C.01||-||-||colspan=2|09_REV_D.01&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Middleware'''&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.nordugrid.org/arc/ ARC grid middleware] ||colspan=7|4.1.0 (A-REX, ARIS, kliensek))&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Miscellaneous software'''&lt;br /&gt;
|- &lt;br /&gt;
| Emacs ||colspan=2|22,3||colspan=2|21,4||-||23.1.1||22.3.1&lt;br /&gt;
|- &lt;br /&gt;
| GNU Plot ||colspan=2|4.2.3 ||colspan=2|4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| ImageMagick ||colspan=2|6.4.3 ||colspan=2|6.2.8||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/About/TigerVNC Turbo VNC]||colspan=4|1,1||colspan=3|2&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.blender.org/ Blender]||colspan=3|2,49||-||colspan=2|2.49||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/ VirtualGL]||colspan=3|2.3.2||-||colspan=2|2.4||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.paraview.org/ Paraview]||colspan=3|3.14.1||-||colspan=3|3.14.1&lt;br /&gt;
|- &lt;br /&gt;
| ffmpeg||colspan=2|-||colspan=2|0.4.9||colspan=3|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3563</id>
		<title>HPC software</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3563"/>
				<updated>2016-04-07T12:39:12Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current version of software on specific machines might be higher than described here. We are encouraging all users to install other tools to be used on our servers if service AUP and license restrictions are respected.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!Szoftver komponens&lt;br /&gt;
!Debrecen&lt;br /&gt;
!Pécs&lt;br /&gt;
!Szeged&lt;br /&gt;
!Budapest&lt;br /&gt;
!Budapest2&lt;br /&gt;
!Debrecen2,3 (Leo, Apollo)&lt;br /&gt;
!Miskolc&lt;br /&gt;
|-&lt;br /&gt;
| colspan=8| '''Fejlesztő környezet (fordító, debugger, profiler)'''&lt;br /&gt;
|-&lt;br /&gt;
| AMD [http://developer.amd.com/tools-and-sdks/cpu-development/x86-open64-compiler-suite/ compilers ((opencc, openf90, openf95))] || colspan=2|-||colspan=2|Available||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| Math. Library (AMD) [http://developer.amd.com/tools/cpu-development/amd-core-math-library-acml ACML] ||colspan=2|-||colspan=2|4.2.4||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://sources.redhat.com/gdb/ GDB] || colspan=2|7|| colspan=2|7.0.1|| colspan=2|7.2||7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/ GNU fordítók (gcc, g++, gfortran)]||4,3||4.1.2 || colspan=2|4.1.2, 4.4.4|| colspan=2|4.4.7|| 4.3.4&lt;br /&gt;
|-&lt;br /&gt;
| Gprof|| colspan=2|2,2|| colspan=2|2,17|| colspan=2|2.20|| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| Intel [http://software.intel.com/en-us/articles/intel-composer-xe/ compilers (icc, ifort)], [http://software.intel.com/en-us/articles/intel-math-kernel-library-documentation/ MKL],  [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/ Linking]  ||colspan=2|12.1.5 (composerxe-2011 Update 11) ||colspan=2|-|| colspan=3|16.0&lt;br /&gt;
|- &lt;br /&gt;
| [http://oprofile.sourceforge.net/ Oprofile] ||  colspan=3|- ||0.9.4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Párhuzamosításhoz felhasználható függvénykönyvtárak'''&lt;br /&gt;
|- &lt;br /&gt;
| LAM-MPI ||colspan=2|- ||colspan=2|7.1.2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| MPICH2 ||colspan=2|1,4||colspan=2|1,2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://openmp.org/ OpenMP]||colspan=2|2.5 (GNU), 3.0 (Intel)||colspan=2|2.5 (GNU), 2.5 (AMD) ||colspan=3|2.5 (GNU), 3.0 (Intel)&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.open-mpi.org/ OpenMPI] ||1.4.2 ||1.3.2 ||colspan=2|1.4.3 || colspan=2|1.8.5||1.6.3&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.csm.ornl.gov/pvm/ PVM] ||colspan=4|3.4.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://videotorium.hu/hu/recordings/details/12291,Overview_and_usage_of_the_SGI_HPC_softwares_on_the_SGI_ICE_and_SGI_UV_supercomputers SGI Perf. Suite] ||colspan=2|Available||colspan=2|-||colspan=2|-||Available&lt;br /&gt;
|- &lt;br /&gt;
| SGI-MPI (MPT) ||colspan=2|2,04||colspan=2|-||colspan=2|-||2.12&lt;br /&gt;
|- &lt;br /&gt;
| PGI Compiler and Tools ||colspan=5|-|| 15.10 || -&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Tudományos számításokhoz felhasználható függvénykönyvtárak'''&lt;br /&gt;
|- &lt;br /&gt;
| Atlas ||colspan=4|3.8.3||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| BLACS ||colspan=4|1.1 (OpenMPI, MPICH2) ||-||3.1.3||-&lt;br /&gt;
|- &lt;br /&gt;
| BLAS ||colspan=2|3.2.2 ||colspan=2|3||colspan=2|-||3&lt;br /&gt;
|- &lt;br /&gt;
| Boost||colspan=2|1,36||colspan=2|1,33||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| FFTW ||colspan=2|3.1.2 ||colspan=2|3.2.2||colspan=2|-||3.3.3&lt;br /&gt;
|- &lt;br /&gt;
| Gromacs ||colspan=2|4.5.4 ||colspan=2|4.5.5||colspan=2|-||4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| GUILE ||colspan=2|1.8.5 ||colspan=2|-||colspan=2|-||1.8.8&lt;br /&gt;
|- &lt;br /&gt;
| HDF5 ||colspan=2|1.8.7||colspan=2|-||colspan=2|1.8.17||-&lt;br /&gt;
|- &lt;br /&gt;
| Lapack ||colspan=2|3.2.2 ||colspan=2|3 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.maplesoft.com/ Maple] ||colspan=2| - ||colspan=2|18||-||2015||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.niif.hu/node/645 Matlab] ||colspan=2|7.13.0 (R2011b)|| colspan=2|-||-||R2015b||-&lt;br /&gt;
|- &lt;br /&gt;
| NumPy ||colspan=2|1,3||colspan=2|1.5.1||colspan=2|-||1.7.0&lt;br /&gt;
|- &lt;br /&gt;
| Octave ||colspan=2|3,4||colspan=2|3.0.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Qt||colspan=2|3.3.8b, 4.6.2||colspan=2|3.3.6 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| R ||colspan=2|2.8.1 ||colspan=2|-||colspan=2|-||3.0.1&lt;br /&gt;
|- &lt;br /&gt;
| Scalapack||colspan=4|1.7.5||-||2.0.2||-&lt;br /&gt;
|- &lt;br /&gt;
| Scilab ||colspan=2|5.3.2||colspan=2|-||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Sun JRE ||colspan=2|1,6||colspan=2|-||colspan=1|-||1.8||1.7&lt;br /&gt;
|- &lt;br /&gt;
| Gaussian||colspan=3|09_REV_C.01||-||-||colspan=2|09_REV_D.01&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Köztesrétegek'''&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.nordugrid.org/arc/ ARC grid köztesréteg] ||colspan=7|4.1.0 (A-REX, ARIS, kliensek))&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Egyéb szoftverek'''&lt;br /&gt;
|- &lt;br /&gt;
| Emacs ||colspan=2|22,3||colspan=2|21,4||-||23.1.1||22.3.1&lt;br /&gt;
|- &lt;br /&gt;
| GNU Plot ||colspan=2|4.2.3 ||colspan=2|4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| ImageMagick ||colspan=2|6.4.3 ||colspan=2|6.2.8||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/About/TigerVNC Turbo VNC]||colspan=4|1,1||colspan=3|2&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.blender.org/ Blender]||colspan=3|2,49||-||colspan=2|2.49||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/ VirtualGL]||colspan=3|2.3.2||-||colspan=2|2.4||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.paraview.org/ Paraview]||colspan=3|3.14.1||-||colspan=3|3.14.1&lt;br /&gt;
|- &lt;br /&gt;
| ffmpeg||colspan=2|-||colspan=2|0.4.9||colspan=3|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	<entry>
		<id>https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3558</id>
		<title>HPC software</title>
		<link rel="alternate" type="text/html" href="https://wiki.niif.hu/index.php?title=HPC_software&amp;diff=3558"/>
				<updated>2016-03-31T09:00:17Z</updated>
		
		<summary type="html">&lt;p&gt;Kzoli(AT)niif.hu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current version of software on specific machines might be higher than described here. We are encouraging all users to install other tools to be used on our servers if service AUP and license restrictions are respected.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!Szoftver komponens&lt;br /&gt;
!Debrecen&lt;br /&gt;
!Pécs&lt;br /&gt;
!Szeged&lt;br /&gt;
!Budapest&lt;br /&gt;
!Budapest2&lt;br /&gt;
!Debrecen2,3 (Leo, Apollo)&lt;br /&gt;
!Miskolc&lt;br /&gt;
|-&lt;br /&gt;
| colspan=8| '''Fejlesztő környezet (fordító, debugger, profiler)'''&lt;br /&gt;
|-&lt;br /&gt;
| [http://developer.amd.com/tools-and-sdks/cpu-development/x86-open64-compiler-suite/ AMD fordítók ((opencc, openf90, openf95))] || colspan=2|-||colspan=2|Available||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| Matematikai könyvtár (AMD) [http://developer.amd.com/tools/cpu-development/amd-core-math-library-acml ACML] ||colspan=2|-||colspan=2|4.2.4||colspan=3|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://sources.redhat.com/gdb/ GDB] || colspan=2|7|| colspan=2|7.0.1|| colspan=2|7.2||7.5&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org/ GNU fordítók (gcc, g++, gfortran)]||4,3||4.1.2 || colspan=2|4.1.2, 4.4.4|| colspan=2|4.4.7|| 4.3.4&lt;br /&gt;
|-&lt;br /&gt;
| Gprof|| colspan=2|2,2|| colspan=2|2,17|| colspan=2|2.20|| 2.23&lt;br /&gt;
|-&lt;br /&gt;
| [http://software.intel.com/en-us/articles/intel-composer-xe/ Intel fordítók (icc, ifort)] ||colspan=2|12.1.5 (composerxe-2011 Update 11) ||colspan=2|-|| colspan=3|16.0&lt;br /&gt;
|-&lt;br /&gt;
| Matematikai könyvtár (Intel): [http://software.intel.com/en-us/articles/intel-math-kernel-library-documentation/ Intel MKL] ||colspan=2|12.1.5 (composerxe-2011 Update 11) ||colspan=2|-|| colspan=3|16.0&lt;br /&gt;
|- &lt;br /&gt;
| [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/ MKL linking] ||colspan=2|12.1.5 (composerxe-2011 Update 11) ||colspan=2|-|| colspan=3|16.0&lt;br /&gt;
|- &lt;br /&gt;
| [http://oprofile.sourceforge.net/ Oprofile] ||  colspan=3|- ||0.9.4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Párhuzamosításhoz felhasználható függvénykönyvtárak'''&lt;br /&gt;
|- &lt;br /&gt;
| LAM-MPI ||colspan=2|- ||colspan=2|7.1.2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| MPICH2 ||colspan=2|1,4||colspan=2|1,2||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://openmp.org/ OpenMP]||colspan=2|2.5 (GNU), 3.0 (Intel)||colspan=2|2.5 (GNU), 2.5 (AMD) ||colspan=3|2.5 (GNU), 3.0 (Intel)&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.open-mpi.org/ OpenMPI] ||1.4.2 ||1.3.2 ||colspan=2|1.4.3 || colspan=2|1.8.5||1.6.3&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.csm.ornl.gov/pvm/ PVM] ||colspan=4|3.4.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://videotorium.hu/hu/recordings/details/12291,Overview_and_usage_of_the_SGI_HPC_softwares_on_the_SGI_ICE_and_SGI_UV_supercomputers SGI Perf. Suite] ||colspan=2|Available||colspan=2|-||colspan=2|-||Available&lt;br /&gt;
|- &lt;br /&gt;
| SGI-MPI (MPT) ||colspan=2|2,04||colspan=2|-||colspan=2|-||2.12&lt;br /&gt;
|- &lt;br /&gt;
| PGI Compiler and Tools ||colspan=5|-|| 15.10 || -&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Tudományos számításokhoz felhasználható függvénykönyvtárak'''&lt;br /&gt;
|- &lt;br /&gt;
| Atlas ||colspan=4|3.8.3||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| BLACS ||colspan=4|1.1 (OpenMPI, MPICH2) ||-||3.1.3||-&lt;br /&gt;
|- &lt;br /&gt;
| BLAS ||colspan=2|3.2.2 ||colspan=2|3||colspan=2|-||3&lt;br /&gt;
|- &lt;br /&gt;
| Boost||colspan=2|1,36||colspan=2|1,33||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| FFTW ||colspan=2|3.1.2 ||colspan=2|3.2.2||colspan=2|-||3.3.3&lt;br /&gt;
|- &lt;br /&gt;
| Gromacs ||colspan=2|4.5.4 ||colspan=2|4.5.5||colspan=2|-||4.6.2&lt;br /&gt;
|- &lt;br /&gt;
| GUILE ||colspan=2|1.8.5 ||colspan=2|-||colspan=2|-||1.8.8&lt;br /&gt;
|- &lt;br /&gt;
| HDF5 ||colspan=2|1.8.7||colspan=2|-||colspan=2|1.8.17||-&lt;br /&gt;
|- &lt;br /&gt;
| Lapack ||colspan=2|3.2.2 ||colspan=2|3 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.maplesoft.com/ Maple] ||colspan=2| - ||colspan=2|18||-||2015||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.niif.hu/node/645 Matlab] ||colspan=2|7.13.0 (R2011b)|| colspan=2|-||-||R2015b||-&lt;br /&gt;
|- &lt;br /&gt;
| NumPy ||colspan=2|1,3||colspan=2|1.5.1||colspan=2|-||1.7.0&lt;br /&gt;
|- &lt;br /&gt;
| Octave ||colspan=2|3,4||colspan=2|3.0.5 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Qt||colspan=2|3.3.8b, 4.6.2||colspan=2|3.3.6 ||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| R ||colspan=2|2.8.1 ||colspan=2|-||colspan=2|-||3.0.1&lt;br /&gt;
|- &lt;br /&gt;
| Scalapack||colspan=4|1.7.5||-||2.0.2||-&lt;br /&gt;
|- &lt;br /&gt;
| Scilab ||colspan=2|5.3.2||colspan=2|-||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| Sun JRE ||colspan=2|1,6||colspan=2|-||colspan=1|-||1.8||1.7&lt;br /&gt;
|- &lt;br /&gt;
| Gaussian||colspan=3|09_REV_C.01||-||-||colspan=2|09_REV_D.01&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Köztesrétegek'''&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.nordugrid.org/arc/ ARC grid köztesréteg] ||colspan=7|4.1.0 (A-REX, ARIS, kliensek))&lt;br /&gt;
|- &lt;br /&gt;
| colspan=8|'''Egyéb szoftverek'''&lt;br /&gt;
|- &lt;br /&gt;
| Emacs ||colspan=2|22,3||colspan=2|21,4||-||23.1.1||22.3.1&lt;br /&gt;
|- &lt;br /&gt;
| GNU Plot ||colspan=2|4.2.3 ||colspan=2|4||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| ImageMagick ||colspan=2|6.4.3 ||colspan=2|6.2.8||colspan=3|-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/About/TigerVNC Turbo VNC]||colspan=4|1,1||colspan=3|2&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.blender.org/ Blender]||colspan=3|2,49||-||colspan=2|2.49||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.virtualgl.org/ VirtualGL]||colspan=3|2.3.2||-||colspan=2|2.4||-&lt;br /&gt;
|- &lt;br /&gt;
| [http://www.paraview.org/ Paraview]||colspan=3|3.14.1||-||colspan=3|3.14.1&lt;br /&gt;
|- &lt;br /&gt;
| ffmpeg||colspan=2|-||colspan=2|0.4.9||colspan=3|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Kzoli(AT)niif.hu</name></author>	</entry>

	</feed>