Hi,
My program calls a function and it receives two files name that are build in for command. Its goal is read a number of mol2 files and create pdbqt files. Therefore, I create a loop in which each file mol2 file name is created pdbqt file. My part of the code is below:
#pragma omp parallel shared(m,mol2_size) private(path_file_mol2, path_file_pdbqt, file_pdbqt, base_file_name) { path_file_mol2 = (char*)malloc(sizeof(char)*MAX_PATH_FILE_NAME); path_file_pdbqt = (char*)malloc(sizeof(char)*MAX_PATH_FILE_NAME); file_pdbqt = (char*)malloc(sizeof(char)*MAX_FILE_NAME); base_file_name = (char*)malloc(sizeof(char)*MAX_FILE_NAME); #pragma omp for for (m = 0; m < mol2_size; m++){ //Obtaing base file name. This is file name without its extension set_base_file_name(base_file_name, all_mol2_files[m].file_name, ex_mol2); strcpy(file_pdbqt, base_file_name); add_ext_file_name(file_pdbqt, ex_pdbqt); //mol2 file strcpy(path_file_mol2, param->path_mol2); strcat(path_file_mol2, all_mol2_files[m].file_name); //pdbqt files strcpy(path_file_pdbqt, param->path_compounds); strcat(path_file_pdbqt, file_pdbqt); call_prepare_ligand(param, path_file_mol2, path_file_pdbqt); } free(base_file_name); free(file_pdbqt); free(path_file_pdbqt); free(path_file_mol2); }
I can not understand why my code is working fine when threads number is equal than number of files. In my test, I have 4 mol2 files. When I execute my program with mpirun -np 4 /home/faccioli/workspace/drugdesign/virtualscreening/build/./prepare_ligand config.conf it works fine: 4 pdbq files are created. However, when I execute mpirun -np 2 /home/faccioli/workspace/drugdesign/virtualscreening/build/./prepare_ligand config.conf 2 pdbqt files are created.
I attached my entire code.
I appreciate any help.
Best regards,