CSE 260 Project ideas

This list will grow, so check frequently

Many core scalability
The Triton Petascale Data Analysis Facility is a collection of 32-way servers that are well provisioned with memory (up to 512GB). Carry out a significant implementation of a single application or an application suite. Discuss limitations to scalability along with performance tradeoffs and performance programming techniques needed to deliver high performance. Carry out detailed performance studies. You may have a favorite application, or you may find one on the internet. You may use any serial code that you find, but you may not use existing parallel code, regardless of how parallelized. Your codes may be implemented in OpenMP or pthreads. This project can be done by many teams as the possibilities for applications or application suites are endless.
 

Scalable message passing implementation
This is the same as the previous option, except on distributed non-shared memory with MPI. You may use the Triton Cluster or Lincoln (Intel Xeon portion only, rather than the Tesla GPUs). An interesting option is to construct a "multi-tier" implementation that combines message passing with threads (either with OpenMP or pthreads); this more involved project is suitable for a team of 3.

GPU implementation
This is the same as the previous two options, except using the GPU. At the moment I have access to nVidia GPUs only, but if you have access to another variety (e.g. ATI), that is also an option. If you use the nVIDIA GPU, you will program in CUDA. I am also interested in comparing CUDA implementations against applications written with PGI’s "accelerator mode" dialect. Another option is to implement a hybrid CUDA-MPI variant, similar to the previous option but with CUDA (or the PGI "accelerator mode" dialect) instead of OpenMP/pthreads. This ambitious project may be more suitable for a 3 person team than a 2 person team. If you are interested, see me early on. It would also be possible to have multiple teams coordinate their efforts, see me about the details.
 

Parallel Java
Parallel Java is an interface and middleware for parallel programming in Java. You may download a free copy at the PJ Website. Install the software on the Triton resource and implement some scalable applications. There are various options, and there is plenty of interesting work for more than one team. PJ supports both shared memory and message passing. Compare performance of PJ applications against MPI, pthreads, or OpenMP. Run on 32 cores on shared memory, or at least 512 cores with message passing. You could also implement a multi-tier variant (discussed previously) that utilizes both shared memory and message passing.
 

Matching Send/Receive Problem (Cluster)
As we know, the message passing model employs two-sided communication, in which each message there is an explicit sender and recipient. Thus, for each send there must be a matching receive, and vice versa. However, it is not possible to perform this analysis statically; the problem is undecidable. In this project, you'll write a run time support package to enable you to run an MPI program and to generate a report of dynamically executed, matched send/receive pairs, including their arguments, and identifying call sites.
 

Applications
Here is a growing list of applications and application suites
  • Wavelet compression (A web page for wavelet resources is posted at http://www.cs.ucsd.edu/~baden/Doc/Wavelets.html)
  • 2d or 3d multigrid. (See Jim Demmel's Notes on Multigrid for the details about the algorithm). As an option you could compare performance and scalability with that of an an FFT solver.
  • PARSEC is a collection of threaded benchmarks. You may implement these on the GPU, or on distributed memory. Scalable implementation are possible for variants that don’t scale beyond 8 cores.
  • HPC Challenge benchmarks
  • DIMACS Challenge benchmarks
  • NAS Parallel Benchmarks. There are many implementations available. You would need to start with the serial variants, or make significant inroads into improving scalability. A more likely option Another is to implement the application on a GPU.
  • Unstructured, 3D adaptive subsampling for data compression. This algorithm is described in the following paper An Adaptive Sub-Sampling Method for in-memory Compression of Scientific Data, by D. Unat, T. Hromadka III, S. B. Baden, Data Compression Conf., Snowbird, UT, March 2009.
  • Multiresolution image enhancements for microscopic data. I have a preference for using the GPU. See me about the details.

  • Suggestions for places to look for applications


    Maintained by baden @ ucsd.
    edu   [Wed Sep 23 19:06:15 PDT 2009]