Lab Rules

These rules apply to every portion. They are also included in the directed portion before you change code.

  • Put implementation changes and private headers under src/. Leave the supplied files in include/ and app/, and the Makefile, unchanged; those files are not part of your implementation submission.
  • Preserve the program’s results, input checks, and error handling. Matching the SVG drawing alone is insufficient; make benchmark also compares the data used to construct it. Support all valid inputs and parameters, without hardcoded benchmark answers.
  • Use the supplied build settings for every comparison. The course LLM policy applies to all portions; submitting AI-produced code is not allowed.

The directed exercise limits changes to Gaussian blur’s coordinate and address calculations. The open-ended portion allows broader changes. The details below are a reference when you need them.

Implementation Requirements

The supplied interfaces in include/ describe the functions and data structures that the rest of the program expects. Preserve those interfaces. The Program Guide’s description of the result explains the returned data; consult the relevant stages as you work on them.

Match all detected pixels, connections, original and simplified paths, including their ordering and IDs. An ID identifies an entry in an array; changing the order can change which pixel a path refers to even when its drawing looks the same. Keep input validation and failure handling intact.

The grader compiles the C files under src/ against the supplied public headers and build settings. Changes to include/, app/, or the Makefile are not used by the grader. Adding private headers and C files under src/ is allowed.

Build Settings and Restrictions

The supplied Makefile uses:

CC = gcc
CFLAGS = -std=c11 -O2 -g -Wall -Wextra -Wpedantic -mcpu=neoverse-v1 -pthread -fopenmp
CPPFLAGS = -Iinclude -Iapp
LDLIBS = -lm

Do not override these settings. The open-ended portion and competition allow SIMD instructions and source-level compiler attributes, subject to the implementation requirements above.