1. A computer-implemented method of automatically generating an embedded system on the basis of an original computer program, which embedded system provides a parallelized hardware and software implementation of the original computer program, which parallelized implementation satisfies one or more predetermined criteria regarding hardware constraints of the embedded system, characterized by a step of analyzing the original computer program, comprising a step of compiling the original computer program into an executable to obtain data flow graphs with static data dependencies and a step of executing the executable using test data to provide dynamic data dependencies as communication patterns between load and store operations of the original computer program, and a step of transforming the original computer program into an intermediary computer program that exhibits multi-threaded parallelism with inter-thread communication, which comprises identifying at least one dynamic data dependency that crosses a thread boundary which dependency comprises a communication pattern that observes ordering relations between loads and stores and converting said dynamic data dependency into a buffered communication channel with read/write access.