Software Optimization for Improving Student Motivation in a Computer ...

3 downloads 5145 Views 150KB Size Report
computer architecture, particularly assembly-level machine or- ganization. This activity applies a pedagogical method suitable for computer architecture courses.
IEEE TRANSACTIONS ON EDUCATION, VOL. 50, NO. 4, NOVEMBER 2007

373

Software Optimization for Improving Student Motivation in a Computer Architecture Course Mancia Anguita and F. Javier Fernández-Baldomero

Abstract—This paper presents a learning activity designed to improve student motivation towards learning certain topics in computer architecture, particularly assembly-level machine organization. This activity applies a pedagogical method suitable for computer architecture courses. The method improves motivation by allowing students to verify by themselves, on real platforms, that they can apply their architecture knowledge to improve software performance and also by showing them the improvements achieved in complete applications. The activity is compared to other such activities based on different motivation and learning techniques. Index Terms—Assembly-level machine organization, computer architecture, intrinsic and extrinsic motivation, software optimization, undergraduate curricula.

I. INTRODUCTION

A

motivated student is more likely to be a successful learner. Motivation may vary in degree (amount) and in orientation (kind) [1]. Orientation depends on the reasons or goals that give rise to an action. Educational and psychological researchers distinguish between intrinsic and extrinsic motivation based on orientation [1], [2]. Intrinsic motivation leads one to perform a task because it is interesting, curious or enjoyable, and extrinsic motivation leads one to do something because it involves a desirable outcome. A student can be both intrinsically and extrinsically motivated to perform a task. Typically, students who are intrinsically motivated to learn do not require incentives; intrinsic motivation enables them to learn more effectively and more thoroughly. But not everyone is intrinsically motivated towards the same subjects or tasks, nor does everything motivate everyone to the same extent [1]; therefore, it is important to stimulate extrinsic motivation. Nevertheless, some extrinsic motivations represent impoverished types of motivation. Self-determination theory defines several levels of extrinsic motivation, taking into account the extent to which the motivation for one’s behavior emanates from oneself (which affects the quality of the motivation). These levels are 1) external regulation, which is the classical definition of extrinsic motivation, in which regulation comes from outside the individual, and where behavior is modified to satisfy external demand

Manuscript received May 12, 2006; revised July 5, 2007. This work was supported in part by EU Grant DRIVSCO (IST-016276-2). The authors are with the Department of Computer Architecture and Technology, University of Granada, 18071 Granada, Spain (e-mail: manguita@atc. ugr.es). Digital Object Identifier 10.1109/TE.2007.906603

or to obtain an externally imposed reward; 2) introjected, in which regulation becomes internal but is still quite controlling; in this case the control external pressure is replaced with an internal pressure that leads someone to do something in order to avoid anxiety or to attain ego-enhancements or pride; 3) identified, in which internal regulation is based on the utility of the behavior; and 4) integrated, in which internal regulation is based on what the individual thinks is valuable and important to the self. This last level is not as fully internalized as intrinsic motivation. A more internal regulation (i.e., an extrinsic motivation of higher quality) is associated with better performance [3], higher quality learning [4], and lower dropout rate [5]. Various studies, such as [6]–[8], have described a significant correlation between university students’ opinions about task utility and their academic performances. Some of these studies also show that students’ positive opinions about task utility tend to be correlated with intrinsic motivation rather than extrinsic motivation. This paper presents a learning activity designed to improve motivation towards learning computer architecture (AR1) subjects, mainly assembly-level machine organization topics, by showing students that these subjects are also useful for programmers of general-purpose processors. The intention of this pedagogical proposition is that students should realize that they will be able to apply these subjects to the improvement of software performance if, in the future, they become programmers of general-purpose computers or embedded systems. The activity is based on a method that can be applied to other AR topics. Both the method and activity are beneficial as 1) they engender higher quality motivation than other approaches, such as those based on competitions or tangible rewards, because the students are shown the utility of the topics and 2) they take into account society’s demand that students should be taught how and when the topics studied can best be put to use. The remainder of this paper is organized as follows: Section II justifies the use of AR knowledge to improve software performance; Section III deals with the educational context of the activity; Section IV presents the proposed activity and method, comparing them with others based on different motivation orientations, or based on simulators instead of real platforms, and also comparing them with other approaches involving real platforms and programming; Section V presents the student evaluation of the learning activity; and in Section VI, the paper ends with some conclusions. 1Here, computer architecture refers to the topics included in the Computer Architecture and Organization (AR) unit of the IEEE/Association for Computing Machinery (ACM) Computer Science Curricula 2001 [9].

0018-9359/$25.00 © 2007 IEEE

374

IEEE TRANSACTIONS ON EDUCATION, VOL. 50, NO. 4, NOVEMBER 2007

II. SOFTWARE OPTIMIZATION JUSTIFICATION The execution time of an application program depends on the computer (particularly on the processor’s architecture, clock frequency, and on its memory architecture), on the computational complexity of the algorithms used in the program, on the compiler, and on the programmer’s skills, particularly his/her skill in exploiting the architecture. Some applications can reach the necessary levels of performance (execution time or output quality) in a particular computer or processor if the programmer knows how to exploit the architecture. For example, [10] and [11] show that programmers can attain a good performance level for audio and video coding applications in a general-purpose computer by taking advantage of the architecture features. Programmers can exploit an architecture feature of which the compiler or operating system (OS) might not be aware and which it might not exploit positively all of the time. Furthermore, the use of architecture features can result in higher software performance, using less hardware, and at lower cost. This results in a reduction of system size, power consumption and price, which particularly (but not exclusively) benefits embedded systems, especially if they are portable products. III. EDUCATIONAL CONTEXT The IEEE/ACM Computer Science Curricula 2001 (CC2001) [9] lists AR as one of the disciplines that should appear in the curriculum of computer science and computer engineering. CC2001 considers the following to be core AR subjects: digital logic and digital systems (AR1); machine-level representation of data (AR2), assembly-level machine organization (AR3); memory system organization and architecture (AR4); interfacing and communication (AR5); functional organization (AR6); and multiprocessing and alternative architectures (AR7). The mandatory courses in the five-year computer science curriculum in Spain cover all of the above core material plus the subject AR8 (performance enhancements). The first three years cover units AR1, AR2, AR3, AR4, AR5, and AR6 and the last two years include AR7 and AR8. The learning activity described here is designed for a course in the second year (first-half) called computer structure (CSt). This course covers unit AR3 together with an introduction to some aspects of AR4 (memory hierarchy) and AR6 (instruction pipelining). The proposed activity includes showing CSt students the results of curriculum projects designed to optimize applications. CC2001 recommends that curricula include a project allowing students to bring together the skills and concepts they have learned during their undergraduate courses. In the computer science curriculum in Spain, the curriculum project is embarked upon during the students’ fifth year. The academic departments propose projects which can be undertaken either by a group of students or individually. IV. LEARNING ACTIVITY The objectives of the proposed learning activity are to show CSt students the usefulness of CSt topics in improving software performance, thus enhancing their motivation towards learning

not only CSt topics but also other topics related to AR. The activity applies a general method that can be used in other AR courses. The method is intended to prove to students that they can improve software performance (optimize code) by applying topics studied in AR courses. The demonstration will be more convincing for students if they perceive that complete applications can be improved, and even more so if they achieve these improvements by themselves. These two features are essential because the degree to which students are convinced affects the quality of their extrinsic motivation. But in an introductory or intermediate AR course, such as CSt, students do not yet have the background to program a complete application and, additionally, they cannot apply the knowledge and skills gained in all the curriculum (both software and hardware) courses. Moreover, programming a complete application can take a long time. To overcome these last three problems and to promote the two features mentioned above, the method includes: 1) a codeoptimization laboratory suitable for the topics studied in the course and also for the knowledge gained by the students in previous courses; and 2) a code-optimization lecture at the beginning of the course that shows the students the optimization results achieved in complete applications by using the AR topics studied in the curriculum, particularly the results obtained by fifth-year students in their curriculum project. The laboratory will allow students to prove to themselves that they can apply course topics to optimize programs. Furthermore, it will also allow the students to observe that some of the characteristics of the architecture studied can be perceived in real platforms. The lecture is intended to motivate students to learn the course topics at the beginning of the course, when they still do not have enough knowledge to work in the optimization laboratory. It is also designed to allow the students to compare different optimization alternatives, including those based on AR topics not scheduled in the course. There are other possible ways to improve motivation towards studying CSt or a computer science course, such as proposing programming games [12], [13], student competitions [12] or giving rewards for increasing course marks, but these alternatives by themselves neither encourage students to apply CSt topics in a future job, nor show them their real usefulness. Moreover, some researchers have shown that tangible rewards or competition pressure can reduce intrinsic motivation because students experience them as controllers of their behavior. More information and references concerning this controversy can be found in [14]–[16]. For interested readers, some pros and cons of using games to illustrate computer science subjects are reported in [17]. Some publications propose architecture simulators to help students understand the topics included in AR lectures. Software simulators have several advantages over a real platform [18]: they are more flexible, and their graphical presentation and animations help students understand computer design characteristics and functioning. In the curriculum in which the learning activity described here takes place, AR courses also use simulation software to illustrate computer architecture topics, for example, mpsim32 (for simulating pipeline processing), WinDLX (for superscalar processing), and Xcache (for memory hierarchy).

ANGUITA AND FERNÁNDEZ-BALDOMERO: SOFTWARE OPTIMIZATION FOR IMPROVING STUDENT MOTIVATION

375

Fig. 1. C-program used to test the limiter code.

Nevertheless, real platforms are also used to illustrate AR concepts; for example, some processor implementation characteristics can be perceived by analyzing or comparing the execution times of pieces of code (e.g., some characteristics related to memory hierarchy or pipeline processing), and low-level debugger software can help students to understand and learn assembly-level machine organization. One additional advantage to learning about low-level debuggers is that they allow programmers to decrease error-detection time in high-level programs because they show precisely which machine code is being executed and which data are being used. Some works in the literature have also suggested that AR topics could be taught by programming real problems in real systems [19], [20]. The experience proposed in [19] demonstrates the usefulness of some AR topics by programming pieces of code exclusively in high-level language; for learning assembler, [19] focuses on reading the assembly language generated by the compiler, instead of programming in assembler. If students use this approach exclusively, they never learn those machine instructions not generated by the compiler or how to make good use, especially for improving performance, of those instructions of which the compiler does not take advantage. The approach described in [20] proposes the teaching of assembler by programming tasks that high-level languages cannot perform, such as some pieces of code for OS or debuggers. In CSt practical laboratories the students also learn assembler by programming tasks that high-level languages cannot perform, in this case for getting computer information via the instruction cpuid and for getting the timestamp counter via the instruction rdtsc. Moreover, in a course teaching AR8 topics, the students also see the usefulness of AR topics by programming exclusively with high-level language. In the propositions described in [19] and [20], students cannot perceive that by programming some pieces of code in assembler, a programmer can improve performance in applications. In the activity presented here, the students learn to improve performance by programming in assembler within high-level programs. Moreover, they see the performance levels achieved in complete and real applications (not

just in isolated pieces of code), optimizing both with and without assembler. The next subsections present the optimization laboratory designed for the CSt course and the projects used to motivate the students at the beginning of the course. A. CSt Optimization Laboratory Overview CSt covers assembly-level machine organization (AR3) and an introduction to processor pipeline and memory hierarchy. It comprises 45 lecture hours and 30 laboratory hours. In the CSt optimization laboratory, students verify that by using CSt knowledge they can improve program execution time and/or functionality. They write very simple codes, suited to the programming skills that they already possess. Students perform the laboratory in Linux by using gcc/g++ as compiler and ddd for debugging. By using assembly language (and consequently their AR3 knowledge) in high-level programs, programmers can exploit processor instructions that compilers do not use at every suitable point of a code, or do not use at all, thus improving execution times or taking advantage of a particular functionality. Programmers can use these instructions in their high-level code by programming libraries in assembler, using inline assembler, using intrinsics (if the compiler has intrinsics for the desired instructions) and, indirectly, by using library functions that include these instructions if they can find a library with functions suitable for the application. Intrinsics provide access to assembler instruction functionality using C/C++ style coding instead of assembly language, but they usually give lower performance. Programmers can improve performance by using, for example, prefetch, single-instruction multiple-data (SIMD) (multimedia extensions), string, conditional move (cmov), or setcc instructions. They can also use assembler instructions to access some functionality; the xchg instruction, for example, is useful for implementing synchronization primitives and rdtsc provides the 64-b timestamp counter. Currently, students verify the utility of cmov instructions for improving performance on instruction-level-parallelism micro-

376

IEEE TRANSACTIONS ON EDUCATION, VOL. 50, NO. 4, NOVEMBER 2007

Fig. 2. Results (average of four executions) from (a) the “limit” example for Pentium IV and (b) the “init” example for Pentium M. The code has been compiled with - 2 and -msse options. The -msse option tries to generate SIMD and cmov instructions.

O

architectures such as pipelined processors. They do so via one example that limits the components of an integer list to a numerical range. Fig. 1 shows the C-program used to evaluate the code based on cmov instructions. The code based on high-level instructions appears as a comment after the assembler instructions by which they were replaced. Students compare the processor cycles used with cmov instructions to those obtained with the conditional jump instructions that the compiler generates to implement the two high-level if-then sentences of this example. Compilers include optimization options that can take advantage of cmov instructions, but programmers can exploit this instruction to a higher degree than compilers, as, for instance, in the example described above. Students create graphics such as those in Fig. 2 to facilitate the comparison and analysis of their results. Fig. 2(a) shows the cycles per component used by a Pentium IV for various input list sizes in both the code based on cmov instructions (labeled ASM in the figure) and that based on if-then sentences (C) together with the speedup (right y-axis). Students also verify that they can improve performance by using x86 string instructions when copying between lists or initializing a list to a specific value. Programmers can also use SIMD instructions to improve performance for list operations. Fig. 2(b) shows the improvement obtained in a Pentium M by using rep stos for initializing a list. The figure shows the results for two codes (labeled C and C-Ca) based on the loop: num list value; and two codes for (ASM and ASM-Ca) which, instead of the above loop, use the following asm sentence: asm (“cld

\n\t” // up direction

“rep stosl

\n\t” // repeat store of 32-b data

::“D”(vector),“c”(num),“a”(value):“memory”); // , .

,

In the C-Ca and ASM-Ca test codes, the list is placed in the L2 cache before executing the code for initializing the list. The hardware prefetcher in the Pentium M and Pentium IV monitors data access patterns and prefetches data automatically into the L2 cache, but does not prefetch across 4KB boundaries. The list is stored starting from a memory address multiple of 4 KB, by using memalign instead of malloc for vector memory reservation. There is a greater memory access penalization in a Pentium IV because it has a deeper pipeline. In C and ASM

versions, especially for list sizes of 4, 8, and 16 KB, the main memory access penalization partially masks the improvement of the string instructions [see speedup in Fig. 2(b)]. The results of this laboratory show students that they can benefit from using assembler at some points in their high-level programs. Additionally, these results familiarize students with other CSt topics, such as memory hierarchy and processor pipeline. For instance, they witness pipeline performance degradation when the pipeline flushes due to mispredicted branches (as when limiting the list components), or stalls due to data access penalization when a cache fault occurs (as when setting the list components to a specific value). By comparing Pentium IV and Pentium M results, especially for the same example, the students can see the influence of the number of processor pipeline stages in the penalization time for mispredicted branches and cache misses. These results also make them realize the need for the memory hierarchy to reduce the performance gap between memory accesses and the processor, and of the usefulness of hardware prefetching in reducing the cache fault number. The laboratory PCs are based on the Pentium IV processor, but so that students can obtain results from different processor microarchitectures they are allowed to work in the laboratory with their notebooks, most of which are based currently on the Pentium M. The results obtained from the different processors are discussed in the laboratory classes with the students. Thus, each student only needs to run the examples in one processor, although some prefer to run them in several. Students complete this laboratory in just six work hours, meaning that it was added without removing either of the two existing laboratories on the course. Currently, these assembler optimization exercises are the final laboratory that the students participate in. An additional hour (optimization lecture) completes the learning activity during which the students see the results of curriculum projects that optimize code. B. Projects Shown in the Optimization Lecture Fifth-year students undertake a project related to subjects studied in the five-year curriculum (Section II). Some of the curriculum projects encourage the students to optimize a complete application by using the topics studied in the curriculum AR courses. These projects deal firstly with the programming of the application by the students, and subsequently with its optimization. The proposed method suggests that teachers should show the results of these projects to students in AR courses to improve their motivation. In the learning activity described here, the results are shown to students at the beginning of the CSt course in order to motivate them to learn CSt topics when they still do not have enough knowledge to work in the optimization laboratory. Student motivation is further improved by the fact that the results are obtained for a real and complete application. During the first phase, the students program the application by using methods learned and knowledge acquired in both their hardware and software curriculum courses. The students themselves decide the methods and knowledge to be applied. During the second phase, they improve the first source code version by applying architecture topics learned in

ANGUITA AND FERNÁNDEZ-BALDOMERO: SOFTWARE OPTIMIZATION FOR IMPROVING STUDENT MOTIVATION

TABLE I EFFECTS OF THE OPTIMIZATION LECTURE

their curriculum courses. Each project has a tutor to resolve the students’ difficulties, and he/she guides them to remember and identify the AR topics to be applied. During this phase the students first obtain a second source code version by improving performance without using assembler. (They take advantage of other AR topics and apply strength reduction, loop unrolling, loop peeling, memory access optimization, etc.) They then obtain a third version from the second one by using assembler for increasing performance. The improvement is confined to the slowest pieces of code and to cases where the compiler (or OS) does not at those pieces use the architecture features that can improve performance. The assembler code generated by the compiler may help the students to discover the unexploited architecture features. These two source versions allow the students to compare the optimization levels reached with and without assembler. They can also compare both the general/loop and processor-specific optimizations carried out by the programmer with those done by the compiler (the compiler optimization options are tested). Currently, the improvements obtained for JPEG, MPEG, and MP3 decoders are shown to CSt students. For example, they see that the execution of the second MPEG version compiled with the Intel compiler (using the O2 optimization switch) takes 51.3% less time than the first, and that the third version, which uses assembler in some pieces of code, takes 48.8% less time than the second and 75% less than the first version. Students of the CSt course learn from these results that programmers can also optimize an application by using the CSt topics and that programmers can optimize to a higher degree than can the compiler. V. STUDENT SURVEY CSt students’ opinions of this activity were collected in the laboratory through two anonymous questionnaires: the first to evaluate the optimization lecture (Table I) and the second the laboratory (Table II). Although curriculum courses require the students’ presence, class attendance is not obligatory. The questionnaire was filled in by all students attending the laboratory class on the scheduled day; their teachers did not inform them beforehand that they were going to fill in a questionnaire. The questionnaires were completed in the laboratory mainly because the activity was designed to be held in a classroom setting, obviously making it more difficult to motivate students who do not attend any class. The questionnaires included quantitative ratings as well as a qualitative explanation of the ratings. Students rated the two quantitative questions on a scale of 1 to 5: 1 (strongly disagree), 2 (disagree), 3 (no opinion), 4 (agree), 5 (strongly agree). The qualitative question was: “Explain the responses to Questions 1

377

TABLE II EFFECTS OF THE OPTIMIZATION LABORATORY

and 2.” The answers to this question were intended to allow the evaluator to understand the quantitative responses. The first questionnaire was filled in at the beginning of the course after the optimization lecture. Table I sets out the quantitative responses of the first questionnaire. Forty-nine students attended the lecture, of whom all but one had a higher opinion of the usefulness of CSt topics after the lecture, which contributed to an improvement in the quality of their motivation (Section I). The student who selected “no opinion” stated in the qualitative part that he was not interested in programming because he preferred hardware development. Thirty-seven of the 49 students felt their motivation to study CSt had increased; no one checked 1 and only three checked 2. Some of the students who did not check 4 or 5 (showing that their motivation had not increased) stated in the qualitative part of the questionnaire either that they were already motivated or that they thought the course topics would be very difficult for them. The second questionnaire evaluated the effect of the laboratory included in the activity and was filled in during the last laboratory class of the course (Table II). Thirty-five students attended the last class. All the students attending the last class stated that the optimization laboratory had improved their opinion about the utility of CSt topics. Furthermore, 23 students stated that the laboratory had increased their motivation to study other AR courses; the other students selected “no opinion.” As the CSt course had almost finished, the second questionnaire asked about their motivation to study other AR courses; there were no negative responses. The number of students who filled in the second questionnaire was lower because the attendance of two of the four CSt laboratory groups on the last day of class was below average. This was due to the fact that the students of these groups had two exams after the CSt laboratory class, while the students in the other groups did not have a similar problem. The influence of the number of questionnaires filled in upon the results was also studied. In the second questionnaire, the mean scores shown in Table II are below those of the two groups with lower attendance and above those of the groups with around average attendance. But all in all, the results were positive for all the laboratory groups, being above 4.3 for the first question and 3.55 for the second one in all the groups. According to the student register, when there was low class attendance, the students who did attend were those with the highest overall attendance rates, that is, those who had participated most in the learning activities. As the results show, the motivation of these students improved to a greater degree. In the first test, the differences among groups are less significant.

378

IEEE TRANSACTIONS ON EDUCATION, VOL. 50, NO. 4, NOVEMBER 2007

The good results of the second questionnaire show that the optimization laboratory improved upon the motivation that the students felt after the optimization lecture and when finishing the other course laboratories. So the optimization laboratory is a positive addition to the previous course design. The students remarked in the qualitative responses to both questionnaires that it was very positive to see a real use for the topics studied in lectures. Some emphasized in the second questionnaire the importance of verifying such usefulness by themselves. VI. CONCLUSION The proposed method and activity are designed to improve student motivation for topics studied in computer architecture courses by showing them that they can use these topics to optimize code in their prospective careers and that some of the architecture characteristics studied can be observed by executing programs on real platforms. The method and activity include a lecture at the beginning of the course to show students the optimization results obtained by fifth-year students in the curriculum project in complete applications, together with an optimization laboratory suitable for the topics studied in the course. The proposed method can be applied in introductory, intermediate or advanced architecture courses. The particular learning activity described here is designed for a course in the second year covering mainly assembly-level machine organization. The student survey shows that the activity improves the orientation (quality) and degree (quantity) of motivation of the students who attend the laboratory classes. Self-determination theory and other motivation theories consider orientation to be more important than degree. The activity improves orientation by showing students the utility of CSt topics for increasing performance. As a result of improvement in their motivation the students can now do more work in the same time and face more difficult exams. The short time required for the learning activity (seven hours) means that it can be included in the previous course design without making significant changes or removing other learning and motivation techniques. Moreover, its cost is low because CSt students only use PCs and free software.

[2] S. M. Glynn, L. P. Aultman, and A. M. Owens, “Motivation to learn in general education programs,” J. Gen. Educ., vol. 54, no. 2, pp. 150–170, 2005. [3] M. Miserandino, “Children who do well in school: Individual differences in perceived competence and autonomy in above-average children,” J. Educ. Psych., vol. 88, pp. 203–214, 1996. [4] W. S. Grolnick and R. M. Ryan, “Autonomy in children’s learning: An experimental and individual difference investigation,” J. Pers. Social Psych., vol. 52, no. 5, pp. 890–898, 1987. [5] R. J. Vallerand and R. Bissonnette, “Intrinsic, extrinsic and amotivational styles as predictors of behavior: A prospective study,” J. Pers., vol. 60, no. 3, pp. 599–620, Sep. 1992. [6] P. R. Pintrich, D. A. Smith, T. García, and W. J. Mckeachie, “Reliability and predictive validity of the Motivated Strategies for Learning Questionnaire (MSLQ),” Educ. Psych. Meas., vol. 53, no. 3, pp. 801–813, 1993. [7] S. Bergin, R. Reilly, and D. Traynor, “Examining the role of self-regulated learning on introductory programming performance,” in Proc. Int. Workshop Computing Education Research, Seattle, WA, Oct. 2005, pp. 81–86. [8] M. Watson, M. McSorley, C. Foxcroft, and A. Watson, “Exploring the motivation orientation and learning strategies of first year university learners,” in Tertiary Education and Management. Dordrecht, The Netherlands: Springer Netherlands, 2004, pp. 193–207. [9] Joint Task Force on Computing Curricula, Computing Curricula 2001: Computer Science, IEEE Computer Society and ACM, Dec. 2001. [10] M. Anguita and J. M. Martínez-Lechado, “MP3 optimization exploiting processor architecture and using better algorithms,” IEEE Micro, vol. 25, no. 3, pp. 81–92, May 2005. [11] V. Lappalainen, T. D. Hämäläinen, and P. Liuha, “Overview of research efforts on media ISA extensions and their usage in video coding,” IEEE Trans. Circuits Syst. Video Technol., vol. 12, no. 8, pp. 660–670, Aug. 2002. [12] R. Lawrence, “Teaching data structures using competitive games,” IEEE Trans. Educ., vol. 47, no. 4, pp. 459–466, Nov. 2004. [13] M. Overmars, “Teaching computer science through game design,” IEEE Comput., vol. 37, no. 4, pp. 81–83, Apr. 2004. [14] E. L. Deci, R. Koestner, and R. M. Ryan, “Extrinsic rewards and intrinsic motivation in education: Reconsidered once again,” Rev. Educ. Res., vol. 71, no. 1, pp. 1–27, Spring, 2001. [15] E. L. Deci, R. Koestner, and R. M. Ryan, “A meta-analytic review of experiments examining the effects of extrinsic rewards on intrinsic motivation,” Psych. Bul., vol. 125, no. 6, pp. 627–668, Nov. 1999. [16] J. Reeve and E. L. Deci, “Elements of the competitive situation that affect intrinsic motivation,” Pers. Social Psych. Bul., vol. 22, pp. 24–33, 1996. [17] H. M. Walker, “Classroom issues: Do computer games have a role in the computing classroom?,” ACM SIGCSE Bul., vol. 35, no. 4, pp. 18–20, 2003. [18] J. Djordjevic, B. Nikolic, and A. Milenkovic, “Flexible Web-based educational system for teaching computer architecture and organization,” IEEE Trans. Educ., vol. 48, no. 2, pp. 264–273, May 2005. [19] R. E. Bryant and D. R. O’Hallaron, “Introducing computer systems from a programmer’s perspective,” in Proc. 32nd Tech. Symp. Computer Science Education, Charlotte, NC, 2001, pp. 90–94. [20] K. Imamura, “Assembly language is more than a teaching tool,” J. Comput. Sci. Col., vol. 20, no. 2, pp. 49–54, Dec. 2004.

ACKNOWLEDGMENT The authors would like to thank the editors and reviewers for their helpful comments and revision. The authors are also grateful to colleagues E. Ros, J. Ortega, and J. González for their support. REFERENCES [1] R. M. Ryan and E. L. Deci, “Intrinsic and extrinsic motivations: Classic definitions and new directions,” Contemp. Educ. Psych., vol. 25, no. 1, pp. 54–56, Jan. 2000.

Mancia Anguita received the Ph.D. degree in computer science from the University of Granada, Granada, Spain. She is a Professor in the Department of Computer Architecture and Technology, University of Granada. Her research interests include code optimization, parallel processing, and parallel file system.

F. Javier Fernández-Baldomero received the Ph.D. degree in computer science from the University of Granada, Granada, Spain. He is a Professor in the Department of Computer Architecture and Technology, University of Granada. His research interests include parallel processing and high-level programming environments and tools.