19
edits
Changes
→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;
/* Create a Timer t */
t.stop();
t.clear();
'''List:''' the list type can be imported using the following statement:
var new_list: list(int) = 1..5;
writeln(new_list);
'''Output: [1, 2, 3, 4, 5]'''
for i in 6..10 do {
writeln(new_list);
'''Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]'''
/* parSafe needs to be set to true if the list is going to be used in parallel */
writeln(new_list2);
'''Output: [0, 1, 2, 3, 4, 5]'''
'''sort():''' used to sort the list in ascending order.
'''insert(index, value):''' used to insert the value at the specified index.
=== Numerical Libraries Comparison to OpenMP == // Chapel is short and concise. // OpenMP code for(i =0 ; i<niter; i++) { start_time(); #pragma omp parallel for for(…) {} } 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 = Pros and Cons steady_clock::now(); #pragma omp parallel { int tid = omp_get_thread_num(); int nt = omp_get_num_threads(); printf("Hello from task %d of Using The Chapel =%d \n", tid, not); } te =steady_clock::now(); reportTime("Integration", te - ts); }
== temp =Cons===* lack of a native Windows version.* Adoption, hard to gain user compare to another parallel programming platform.* User base is very small. * It certainly will not be used in the IT industry for the near future(or ever) unless you are opening your own company and decided to try Chapel.* a small number of contributors to this open-source project. Much less support and update compare to other IT giants.* Projects based on Chapel is very little.* It's more for research projects than products. * 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