Changes

Jump to: navigation, search

GPU621/The Chapel Programming Language

2,077 bytes added, 18:22, 4 December 2020
Library Utilities
# [mailto:xweng11@myseneca.ca?subject=GPU621 Xi Weng]
# [mailto:hbhuang2@myseneca.ca?subject=GPU621 Ivan Huang]
# [mailto:yli593@myseneca.ca?subject=GPU621 Yu (Jackie) Li]
# [mailto:xweng11@myseneca.ca;hbhuang2@myseneca.ca;yli593@myseneca.ca?subject=GPU621 eMail All]
=== Locality ===
 
The built-in type locale is used to represent locales in Chapel. When a task is trying to access a variable within the same locale, the cost is less compared to accessing a variable from another locale.
'''numLocales:''' a built-in variable which returns the number of locales for the current program as an integer.
use Time;
config const quiet: bool = false;
/* Create a Timer t */
t.stop();
If !quiet then { /* return time in milliseconds that was recorded by the timer */ writeln(t.elapsed(TimeUnits.milliseconds)); }
t.clear();
'''List:''' the list type can be imported using the following statement:
private use List; config const quiet: bool = false;
var new_list: list(int) = 1..5;
'''insert(index, value):''' used to insert the value at the specified index.
==Comparison to OpenMP = Numerical Libraries = // Chapel is short and concise.  // OpenMP code for(i =0 ; i<niter; i++) { start_time(); #pragma omp parallel for for(…) {} } stop_time();   // Chapel code for i in 1..niter { start_time(); forall .. {} } stop_time(); }  //Hello World OpenMP #include <iostream> #include <omp.h> #include <chrono> using namespace std::chrono; // report system time void reportTime(const char* msg, steady_clock::duration span) { auto ms =duration_cast<milliseconds>(span); std::cout << msg << " - took - " << ms.count() << " milliseconds" << std::endl; } int main() { steady_clock::time_point ts, te; ts = steady_clock::now(); #pragma omp parallel { int tid = omp_get_thread_num(); int nt = omp_get_num_threads(); printf("Hello from task %d of %d \n", tid, not); } te = steady_clock::now(); reportTime("Integration", te - ts); }
//Hello World Chapel use Time; var t: Timer; //const numTasks =here.numPUs(); const numTasks = Code Comparesion to MPI & OpenMP ==8; t.start(); coforall tid in 1..numTasks do writef("Hello from task %n of %n \n", tid, numTasks); t.stop(); writeln(t.elapsed(TimeUnits.milliseconds));
== Pros and Cons of Using The Chapel ==
===Pros===
* GitHub open-source.
* similarly readable/writable as Python.
* the compiler is getting faster and producing faster code. Comparable to OpenMP/MPI.
* there are lots of examples, tutorials and documentation available.
* a global namespace supporting direct access to local or remote variables.
* data parallelism & task parallelism.
* friendly community.
* the package is easy to install, but not as easy as other tools like OpenMP/MPI.
* there’s no central place where other people could look for your work if you wanted to have it as an external package.
* users have no much reason to start trying the language, given better options like C++ & OpenMP/MPI.
= References =
* The Chapel Overview Talk Video: https://youtu.be/ko11tLuchvg
* The Chapel Overview Talk Slide: https://chapel-lang.org/presentations/ChapelForHPCKM-presented.pdf
* Comparative Performance and Optimization of Chapel: https://chapel-lang.org/CHIUW/2017/kayraklioglu-slides.pdf
* The Parallel Research Kernels: https://www.nas.nasa.gov/assets/pdf/ams/2016/AMS_20161013_VanDerWijngaart.pdf
19
edits

Navigation menu