I created a Makefile.optimus that has to be linked inside the src
both *.c files were altered in order to fit my laptop's GPU
Moved commands around for better readability

For the sake of readability, the 0-ing of host variables was
clustered with the corresponding reduction "for" loop.
Hiding my personal makefile from you

Added an extra line at the .gitignore file in order to hide my
Makefile.optimus file.
Merge branch 'master' into data_transfer

just synching my branch to the upstream -> origin -> master
Merge branch 'master' of https://github.com/LJMD-OpenCL/ljmd-opencl
Merge remote-tracking branch 'upstream/master'

Placed comments and moved 2 lines for the sake of clarity

Conflicts:
	src/ljmd-cl.c
Undoing some edits in order to synchronize

removed the hard-coded personalization made in order to adapt the
code to my hardware
Merge remote-tracking branch 'upstream/master'
Merge remote-tracking branch 'upstream/master'
Merge remote-tracking branch 'upstream/master'
Merge branch 'master' of https://github.com/LJMD-OpenCL/ljmd-opencl
Makefile option for NVIDIA Optimus technologies

also included comments to label each one of the 8 relevant
parts inside the main MD loop
Put 6 between 2 and 3

The 6-th part (downloading the positions from the device to the
host) can be placed just after the verlet_first kernel (2), right
before the force kernel (3), since the positions will not be needed
anymore at the device until the next MD time step.
Placed part 7 of the code between parts 3 and 4

Since part 7 only needs the semi-reduced potential energy, which
is readily available after the force kernel (3), we can move this
part in order to overlap calculation with data transfer.
Moved the output part (1) to the end of the loop

Now that the Enqueed read and write calls (6 and 7) are interwined with the
compute kernel, the output function was move to the end of the code in order
to allow overlap between the host and devices subtasks.
Error-handling if statements substituted by function calls

All the "if( status != CL_SUCCESS )" that returned "N - ERROR!!!" messages
in each part were substituted by function calls to

CheckSuccess(status,N);

for modularization/clarity (questionable).
Inserted if-clauses to prevent unnecessary kernels from being enqueued

Since we only need to print the ouput (positions and energies) every "nprint"
steps, the parts 6 (download positions from device to host), 7 (download
potential energy from device to host), 5 (calculating kinetic energy
from the velocities) and 8 (downloading the kinetic energy from device
to host) only need to be performed in the step before it is printed.

Therefore, this parts were all encapsulated inside if-statements like

if ((sys.nfi % nprint) == nprint-1)

in order to prevent them from being executed when they are not
necessary.
Moved the reductions of sys.epot and sys.ekin to part 1 (output)

Since the potential and kinetic energy is only needed inside the output
part, the reductions of the tmp_epot[i] and tmp_ekin[i] buffers were
moved from the parts in which they were downloaded from the device
(parts 7 and 8, respectively) to part 1 (where the ouput is actually
printed).
Added a placeholder to point the location of the barrier

The current code has the correct ordering of kernel calls that will
allow further optimization by overlaping the compute load on the device
and on the host with the data trasfer between them.

However, there are no performance benefits right now, since all
Read and Write calls are still in blocking mode.
Now "make clean" also deletes include/opencl_kernels_as_string.h