Benchmarks

JPEG - Write BMP Header

DFG
/* File size */
headersize = 14 + 40 + cmap_entries * 4; /* Header and colormap */
bfSize = headersize + (INT32) dest->row_width * (INT32) cinfo->output_height;

/* Set unused fields of header to 0 */
MEMZERO(bmpfileheader, SIZEOF(bmpfileheader));
MEMZERO(bmpinfoheader, SIZEOF(bmpinfoheader));

/* Fill the file header */
bmpfileheader[0] = 0x42;      /* first 2 bytes are ASCII 'B', 'M' */
bmpfileheader[1] = 0x4D;
PUT_4B(bmpfileheader, 2, bfSize); /* bfSize */
/* we leave bfReserved1 & bfReserved2 = 0 */
PUT_4B(bmpfileheader, 10, headersize); /* bfOffBits */

/* Fill the info header (Microsoft calls this a BITMAPINFOHEADER) */
PUT_2B(bmpinfoheader, 0, 40); /* biSize */
PUT_4B(bmpinfoheader, 4, cinfo->output_width); /* biWidth */
PUT_4B(bmpinfoheader, 8, cinfo->output_height); /* biHeight */
PUT_2B(bmpinfoheader, 12, 1); /* biPlanes - must be 1 */
PUT_2B(bmpinfoheader, 14, bits_per_pixel); /* biBitCount */
Number of nodes 106
Number of edges 88
Avg. edges per node 0.83
Critical Path Length 7
Parallelism (nodes/critical path) 15.14
DOT File
Full C Function
JPEG Application

The main reason the write_bmp_header function was chosen for the benchmark was the incredibly high level of paralellism that can be acheived in the function. With 106 nodes and 88 edges, the depth is never more than 7. This means that the function can be completed quickly with a large area or will take a lot of time with a small area, making it a good choice for scheduling algorithms.