Checkpoint Report:
ISPC Performance Monitor
Jin Seop Kim (jinseopk@andrew.cmu.edu) and Dong Bae Jun (djun@andrew.cmu.edu)
Main Project Page

Work Completed So Far
From mid March, we brainstormed ideas for the final project, and we decided to create an ISPC Performance Monitor that will inform the programmer each instances' running time, cache hit/miss ratio, and the IPC. The user will be able to know divergence issues if they arise. During the first week, we first tried running example programs using the Intel Performance Counter Monitor to get familiar with it. As we expected, the Intel Performance Counter Monitor was able to provide the cache hit/miss ratio and IPC information for a piece of code. Then, to provide advice to users on divergence issues, we explored the ISPC source code and tried various configurations. We tried ISPC options such as --emit-c++, --target=generic-4, and --instrument. However, we realized that we need a more complete understanding of the ISPC parallel execution model to comprehend the results. Therefore, we spent the next week studying ISPC more in depth. We wanted to get a sense of how the resulting data could be delivered more effectively, and so we prototyped a basic visualization tool. Seeing the graphical result, we were concerned about how we will advise on the performance issues in a practical way, and we decided to consider this further.

Deliverables and Goals
Even though it took a while to have a good understanding of divergence issues and ISPC internals, we are still aiming to achieve the initial goals. We are going to develop a performance monitor tool that will obtain useful statistics of an ISPC program, and we will provide a visualization tool that effectively conveys the information and gives helpful advice in improving performance. We will present a demo, showing our products' application to different ISPC program examples, monitoring their execution, and reporting useful information and advice.

Concerns
One concern is that we are still not entirely sure how we are going to detect divergence issues and to provide proper advice on addressing them. Another thing to be noted is the approach we should choose for offering an interface of our product. We are comparing two options to use. First, we can make a separate library to call our functions so that the user can decide manually where to take measurements; second, we can add a new option to the existing ISPC and handle monitoring process automatically. We feel the second option is much more desirable, and we are going to try our best to achieve it.

We only have one computer with AVX support, and it would be greatly helpful if we could have access to another machine with AVX support.