Computational system
It is a cluster composed by four nodes:
jupiter is a node with 2 hexa-core Intel Xeon E5-2620, 2.00 GHz, 32 GB of shared-memory. It has 6 GPUs, which will not be used. It is used for the OpenMP problems.
marte and mercurio are AMD Phenom II X6 1075T (hexa-core), 3 GHz, 8 GB (marte) and 15 GB (mercurio), private L1 and L2 caches of 64 KB and 512 KB, and L3 of 6 MB shared by all the cores, with GPUs which will not be used. They are used for the MPI+OpenMP problems.
saturno comprises 4 hexa-cores and one GPU Tesla K20c (Kepler architecture), with 4800 Mbytes of global memory and 2496 CUDA cores (13 Streaming Multiprocessors and 192 Streaming Processors). It is used for the CUDA problems.
They are connected through fast-ethernet.
The compilers and environments used in the contest are: gcc v 4.6.3, OpenMP v 2.0, OpenMPI v 1.6.4.
Contest system
Mooshak is used for the contest. The access is through the contest web-page (luna.inf.um.es). Each team will have one account for all the members of the team.
After entering the selected test, there are available five options:
-A problem can be selected and viewed. The problem to be solved is provided together with:
The scheme mooshak uses for input/output and for time account and speed-up calculation. This file is not modified.
A file with the sequential solution provided by the organization. The contestants should modify the function which solve the problem, parallelizing it to obtain the maximum speed-up with respect to the sequential version. Speed-up can be obtained through parallelization or optimization of the sequential version.
An example of input file, similar in problem size and number of problems to that with which the problem is evaluated.
-The file where the contestants have written their solutions should be selected and submitted.
-Questions can be sent to the organizers with the Ask option.
-The Help option gives general information on Mooshak (it is not of utility for our contest).
-And Logout.
The Submissions, Ranking, and Questions can be viewed.
The contest
Some problems should be solved with OpenMP on jupiter, others with MPI and/or OpenMP in marte and/or mercurio, and others with CUDA in saturno.
The number of nodes and cores and the problem type is indicated with comments at the beginning of the file sec.cpp (or sec.cu for CUDA programs). The problem we are working with is indicated in the comments and by selecting the corresponding problem when file sec.cpp is sent to the evaluation system.
The comments at the beginning of sec.cpp must be in the correct format. There are 4 variables:
CPP_CONTEST: Name of the contest (2015).
CPP_PROBLEM: Name of the problem. It must not to be modified.
CPP_LANG: C+OPENMP for OpenMP problems, C+OPENMP+MPI for MPI+OpenMP problems, and CUDA for CUDA problems.
CPP_PROCESSES_PER_NODE: Number of processes per node.
CPP_PROCESSES_PER_NODE is modified to indicate the resources to be used:
-in OPENMP problems, “jupiter 1” must be indicated. All the cores of jupiter can be used. The number of threads should be indicated in the code (sec.cpp), for example with omp_set_num_threads.
-in MPI+OPENMP problems the number of processes to be started in marte and mercurio is indicated. For example, “marte 2 mercurio 3” indicates 2 MPI processes in marte and 3 in mercurio. All the cores in marte and mercurio can be used, and each process can start slave OpenMP threads.
-in CUDA problems, saturno is used, which is indicated with “saturno 1”.
Scoring
The score awarded will be calculated on the basis of the speed-up achieved with respect to the sequential solution given by the organizing committee.
A problem will be awarded zero when no correct solution is obtained or when the speed-up is lower than one.
The inputs used for testing will not give large execution times (between 10 and 50 seconds).
For each problem the score is the minimum of a value MSP (MSP=10 for each problem in the 2015 contest) and the maximum speed-up obtained by all the teams minus 1. For each problem and team the score will be calculated by linear interpolation of the maximum speed-up obtained by the team minus 1 and the maximum score obtained for the problem:
Let p=1,2...P be the P problems and t=1,2,...T the T teams. S(p,t) is the speed-up of team t on problem p (each submission after the tenth one will be penalized by minus 1), and the speed-up for problem p is S(p)=max_t=1,2,...T S(p,t), and the maximum score for problem p is V(p)=min {MSP,S(p)-1}. Through linear interpolation, the score of team t for problem p is V(p,t)=V(p)*(S(p,t)-1)/(S(p)-1). (All values are considered greater than or equal to zero).