1. A method for parallelization of program code, the method comprising: analyzing source code having both a serial variant and a parallel variant defining two different variants of the source code to identify pairs of corresponding code blocks that provide functionally identical results but come from the two different variants, for each identified pair of code blocks: transferring each of the two different variants to a language-independent, abstract syntactic form to define abstracted functionally identical serial and parallel code blocks, storing the abstracted functionally identical serial and parallel code blocks together in a respective pattern in a semantic pattern database, performing a manual classification of the respective pattern according to human-selected categories or an automatic classification based on mapping to the human-selected categories, as determined based on machine learning, thereby forming a database of code block categories, and transferring a new code block to be investigated to the abstract syntactic form, comparing each new code block with the semantic pattern database of abstracted serial code blocks to identify a best fit with an existing pair of code blocks, and automatically selecting a category for the new code block from the human-selected categories based on the category of the identified best fit.