| [1] |
D. Hovemeyer, W. Pugh, and J. Spacco.
Atomic instructions in java, 2002. [ bib | .html | .pdf ] Atomic instructions atomically access and update one or more memory locations. Because they do not incur the overhead of lock acquisition or suspend the executing thread during contention, they may allow higher levels of concurrency on multiprocessors than lock-based synchronization. Wait-free data structures are an important application of atomic instructions, and extend these performance benefits to higher level abstractions such as queues. In type-unsafe languages such as C, atomic instructions can be expressed in terms of operations on mem- ory addresses. However, type-safe languages such as Java do not allow manipulation of arbitrary memory locations. Adding support for atomic instructions to Java is an interesting but important challenge. In this paper we consider several ways to support atomic instructions in Java. Each technique has advantages and disadvantages. We propose idiom recognition as the technique we feel has the best combination of expressiveness and simplicity. We describe techniques for recognizing in- stances of atomic operation idioms in the compiler of a Java Virtual Machine, and converting such instances into code utilizing atomic ma- chine instructions. In addition, we describe a runtime technique which ensures that the semantics of multithreaded Java[11] are preserved when atomic instructions and blocking synchronization are used in the same program. Finally, we present benchmark results showing that for concur- rent queues, a wait-free algorithm implemented using atomic compare- and-swap instructions yields better scalability on a large multiprocessor than a queue implemented with lock-based synchronization. |
| [2] |
William Pugh and Jaime Spacco.
Mpjava: High-performance message passing in java using java.nio.
In Lawrence Rauchwerger, editor, LCPC, volume 2958 of
Lecture Notes in Computer Science, pages 323-339. Springer, 2003. [ bib | .pdf ] We explore advances in Java Virtual Machine (JVM) tech- nology along with new high performance I/O libraries in Java 1.4, and find that Java is increasingly an attractive platform for scientific cluster- based message passing codes. We report that these new technologies allow a pure Java implementa- tion of a cluster communication library that performs competitively with standard C-based MPI implementations. |
| [3] |
Konstantin Berlin, Jun Huan, Mary Jacob, Garima Kochhar, Jan Prins, William
Pugh, P. Sadayappan, Jaime Spacco, and Chau-Wen Tseng.
Evaluating the impact of programming language features on the
performance of parallel applications on cluster architectures.
In Lawrence Rauchwerger, editor, LCPC, volume 2958 of
Lecture Notes in Computer Science, pages 194-208, 2003. [ bib | .pdf ] We evaluate the impact of programming language features on the performance of parallel applications on modern parallel architectures, particularly for the demanding case of sparse integer codes. We compare a number of programming languages (Pthreads, OpenMP, MPI, UPC, Global Arrays) on both shared and distributed-memory architectures. We find that language features can make parallel programs easier to write, but cannot hide the underlying communication costs for the target parallel architecture. Powerful compiler analysis and optimization can help reduce software overhead, but features such as fine-grain remote accesses are inherently expensive on clusters. To avoid large reductions in performance, language features must avoid interfering with compiler optimizations for local computations. |
| [4] |
Polyvios Pratikakis, Jaime Spacco, and Michael Hicks.
Transparent proxies for java futures.
In OOPSLA '04: Proceedings of the 19th annual ACM SIGPLAN
conference on Object-oriented programming, systems, languages, and
applications, pages 206-223, New York, NY, USA, 2004. ACM Press. [ bib | .pdf ] A proxy object is a surrogate or placeholder that controls access to another target object. Proxies can be used to sup- port distributed programming, lazy or parallel evaluation, access control, and other simple forms of behavioral reflec- tion. However, wrapper proxies (like futures or suspensions for yet-to-be-computed results) can require significant code changes to be used in statically-typed languages, while prox- ies more generally can inadvertently violate assumptions of transparency, resulting in subtle bugs. To solve these problems, we have designed and imple- mented a simple framework for proxy programming that employs a static analysis based on qualifier inference, but with additional novelties. Code for using wrapper proxies is automatically introduced via a classfile-to-classfile trans- formation, and potential violations of transparency are sig- naled to the programmer. We have formalized our analysis and proven it sound. Our framework has a variety of appli- cations, including support for asynchronous method calls re- turning futures. Experimental results demonstrate the bene- fits of our framework: programmers are relieved of managing and/or checking proxy usage, analysis times are reasonably fast, overheads introduced by added dynamic checks are neg- ligible, and performance improvements can be significant. For example, changing two lines in a simple RMI-based peer- to-peer application and then using our framework resulted in a large performance gain. |
| [5] |
Bill Pugh and Jaime Spacco.
Rubis revisited: why j2ee benchmarking is hard.
In OOPSLA '04: Companion to the 19th annual ACM SIGPLAN
conference on Object-oriented programming systems, languages, and
applications, pages 204-205, New York, NY, USA, 2004. ACM Press. [ bib | .pdf ] We have replicated the experiments of Cecchet et al. de- tailed in Performance and Scalability of EJB Applications at OOPSLA '02. We report on our experiences configuring, deploying and tuning Enterprise software. We found a num- ber of configuration problems that suggest that some of the conclusions of the original work were wrong. |
| [6] |
Jaime Spacco, David Hovemeyer, and William Pugh.
An eclipse-based course project snapshot and submission system.
In 3rd Eclipse Technology Exchange Workshop (eTX), Vancouver,
BC, October 24, 2004. [ bib | .pdf ] Much research has been done on techniques to teach students how to program. However, it is usually difficult to quantify exactly how students work. Instructors typically only see students' work when they submit their projects or come to office hours. Another common problem in introductory programming courses is that student code is only subjected to rigorous testing once it has been submitted. Both of these problems can be viewed as a lack of feedback between students and instructors. |
| [7] |
Jaime Spacco, Jaymie Strecker, David Hovemeyer, and William Pugh.
Software repository mining with Marmoset: An automated programming
project snapshot and testing system.
In Proceedings of the Mining Software Repositories Workshop (MSR
2005), St. Louis, Missouri, USA, May 2005. [ bib | .pdf ] Most computer science educators hold strong opinions about the ``right'' approach to teaching introductory level programming. Unfortunately, we have comparatively little hard evidence about the effectiveness of these various approaches because we generally lack the infrastructure to obtain sufficiently detailed data about novices' programming habits. |
| [8] |
David Hovemeyer, Jaime Spacco, and Bill Pugh.
Evaluating and tuning a static analysis to find null pointer bugs.
Lisbon, Portugal, September 5-6, 2005. ACM. [ bib | .pdf ] Using static analysis to detect memory access errors, such as null pointer dereferences, is not a new problem. However, much of the previous work has used rather sophisticated analysis techniques in order to detect such errors. |
| [9] |
Jaime Spacco, David Hovemeyer, and Bill Pugh.
Tracking defect warnings across versions.
In MSR 2006: Proceedings of the 3rd annual workshop on Mining
Software Repositories, 2006. [ bib | .pdf ] Various static analysis tools will analyze a software artifact in order to identify potential defects, such as misused APIs, race conditions and deadlocks, and security vulnerabilities. For a number of reasons, it is important to be able to track the occurrence of each potential defect over multiple versions of a software artifact under study: in other words, to determine when warnings reported in multiple versions of the software all correspond the same underlying issue. One motivation for this capability is to remember decisions about code that has been reviewed and found to be safe despite the occurrence of a warning. Another motivation is constructing warning deltas between versions, showing which warnings are new, which have persisted, and which have disappeared. This allows reviewers to focus their efforts on inspecting new warnings. Finally, tracking warnings through a series of software versions reveals where potential defects are introduced and fixed, and how long they persist, exposing interesting trends and patterns. |
| [10] |
Jaime Spacco, David Hovemeyer, William Pugh, Jeff Hollingsworth, Nelson
Padua-Perez, and Fawzi Emad.
Experiences with marmoset: Designing and using an advanced submission
and testing system for programming courses.
In ITiCSE '06: Proceedings of the 11th annual conference on
Innovation and technology in computer science education. ACM Press, 2006. [ bib | .pdf ] Two important questions regarding automated submission and testing systems are: What kind of feedback should we give students as they work on their programming assignments, and how can we study in more detail the programming assignment development process of novices? |
| [11] |
Jaime Spacco, David Hovemeyer, Bill Pugh, Jeff Hollingsworth, Nelson
Padua-Perez, and Fawzi Emad.
Experiences with marmoset.
Technical report, 2006. [ bib | .pdf ] Many project submission and testing systems have been de- veloped. These systems can be beneficial for both students and instructors: students benefit from having automatic feedback on which parts of their projects work correctly and which parts still need work, while instructors benefit from real-time feedback on the progress of individual students and the class as a whole. A limitation of traditional project submission and test- ing systems is that they only track the project versions that students explicitly submit; what students are doing between submissions remains shrouded in mystery. Based on expe- rience, we know that many students who hit a stumbling block resort to unproductive trial-and-error programming. As instructors, we would like to know what these stumbling blocks are. To help understand how students work, we developed Mar- moset, a project submission, testing, and snapshot system. The system has two novel features. First, it employs a token-based incentive system to encourage students to start work early and to think critically about their work. Second, Marmoset can be configured to use CVS to transparently capture a project snapshot every time students save a file. The detailed development history thus captured offers a fine- grained view of each student's progress. In this paper, we describe initial experiences with Mar- moset, from the perspectives of both instructors and stu- dents. We also describe some initial research results from analyzing the student snapshot database. |
| [12] |
Jaime Spacco, Titus Winters, and Tom Payne.
Inferring use cases from unit testing.
In AAAI Workshop on Educational Data Mining, New York, NY, USA,
July 2006. ACM Press. [ bib | .pdf ] |
This file has been generated by bibtex2html 1.76