@article{valero21, title = {A learning experience toward the understanding of abstraction-level interactions in parallel applications}, journal = {Journal of Parallel and Distributed Computing}, volume = {156}, pages = {38-52}, year = {2021}, issn = {0743-7315}, doi = {https://doi.org/10.1016/j.jpdc.2021.05.008}, url = {https://www.sciencedirect.com/science/article/pii/S0743731521001131}, author = {Alejandro Valero and Rubén Gran-Tejero and Darío Suárez-Gracia and Emanuel A. Georgescu and Joaquín Ezpeleta and Pedro Álvarez and Adolfo Muñoz and Luis M. Ramos and Pablo Ibáñez}, keywords = {Ray tracing, Task queue, Semaphore, Futex, Assembly instructions}, abstract = {In the curriculum of a Computer Engineering program, concepts like parallelism, concurrency, consistency, or atomicity are usually addressed in separate courses due to their thoroughness and extension. Isolating such concepts in courses helps students not only to focus on specific aspects, but also to experience the reality of working with modern computer systems, where those concepts are often detached in different abstraction levels. However, due to such an isolation, it exists a risk of inducing to the students an absence of interactions between these concepts, and, by extension, between the different abstraction levels of a system. This paper proposes a learning experience showcasing the interactions between abstraction levels addressed in laboratory sessions of different courses. The driving example is a parallel ray tracer. In the different courses, students implement and assemble components of this application from the algorithmic level of the tracer to the assembly instructions required to guarantee atomicity. Each lab focuses on a single abstraction level, but shows students the interactions with the rest of the levels. Technical results and student learning outcomes through the analysis of surveys validate the proposed experience and confirm the students learning improvement with a more integrated view of the system.} }