flame/blis — pull request #8 by tlrmchlsmth (2014-05-13 17:50:57+00:00)
Title: Add multithreading to most level-3 operations

Our paper "Anatomy of High-Performance Many-Threaded Matrix Multiplication" identified 5 loops around the micro-kernel as opportunities for parallelization. This pull request enables parallelism for 4 of those loops and extends to the rest of the level-3 operations except for TRSM.

Below chart describes those loops. Right now the only way to control the amount of parallelism is with environment variables, but we hope to add a nice threading API in the future. The total number of threads is equal to the product of the number of threads used for each loop. The 4th loop is not currently enabled as it requires a reduction because each iteration of the loop updates the same block of C.

| Loop around micro-kernel | Environment variable | Direction | Notes |
| ----------- | ----------- | ----------- | ----------- |
| 1st loop | BLIS_IR_NT | M |
| 2nd loop | BLIS_JR_NT | N |
| 3rd loop | BLIS_IC_NT | M |
| 4th loop | None | K | Not enabled |
| 5th loop | BLIS_JC_NT | N |