Parallelize this section of code using omp // TODO: parallelize the computations for each gene. for (int gene_index = 0; gene_index < genes.num_genes; ++gene_index) { // Compute this gene's TF int* gene_TF = (int*)calloc(NUM_TETRANUCS, sizeof(int)); process_tetranucs(genes, gene_TF, gene_index); // Add this gene's TF to the running total TF for (int t = 0; t < NUM_TETRANUCS; ++t) TF[t] += gene_TF[t]; free(gene_TF); } // 2) Get the averages of each TF (as a double!) double* average_TF = (double*)malloc(NUM_TETRANUCS * sizeof(double)); for (int t = 0; t < NUM_TETRANUCS; ++t) average_TF[t] = (double)TF[t] / (double)genes.num_genes; a) omp critical b) omp atomic c) omp lock NOTE: Do not use any other kind of parallelization technique beside omp.