Monday, March 9, 2009

Cilk++

Cilk ARTS is a MIT spin-off which develops Cilk++, an enhancement of the Cilk Project.

Cilk++ is similar to OpenMP in that way that you specify the program's concurrency structure with special keywords. The tool chain and the run time thereby turn your sequential program into a highly concurrent one. Cilk ARTS focuses on porting existing software on multi-core systems with least possible knowledge about concurrent programming.

In my opinion the most important part of their tool chain is the "Race Detector". Cilk ARTS claims that it detects any existing data race in the program. This means, if the Race Detector finds no error, the concurrent program is correct if and only if the sequential one is. And the correctness of the latter is already checked with traditional software tests.

I have no idea how the Race Detector works. And I'm afraid they won't tell anybody any details. What they say is that they test if all possible schedulings result in the same values of the data. But how does the Race Detector get all possible threads of execution without automatically "understanding" what the code does?

1 comment:

  1. From Charles E. Leiserson, http://www.cilk.com/

    The scientific basis of the race detector is documented in the following papers:

    Efficient Detection of Determinacy Races in Cilk Programs
    by Mingdong Feng and Charles E. Leiserson
    Proceedings of the Ninth Annual ACM Symposium on Parallel Algorithms and Architectures (SPAA)
    Newport, Rhode Island
    Pages: 1–11
    June 22–25, 1997

    Detecting Data Races in Cilk Programs that Use Locks
    by Guang-Ien Cheng, Mingdong Feng, Charles E. Leiserson, Keith H. Randall, and Andrew F. Stark
    Proceedings of the Tenth Annual ACM Symposium on Parallel Algorithms and Architectures (SPAA ’98)
    Puerto Vallarta, Mexico, 1998.

    Both papers (and other papers on Cilk and race detection) are available on the MIT Supercomputing Technologies Group website: http://supertech.csail.mit.edu/papers.html.

    ReplyDelete