TL; DR Вы не можете изменить количество потоков в параллельной области.
Помните, что это пул потоков, которые разветвляются в начале параллельной области.Внутри они даже не синхронизированы (если вы не говорите им тоже), поэтому OpenMP нужно будет завершить некоторые из них в неизвестной позиции - очевидно, плохая идея.
Ваш #pragma omp single делает следующий раздел кодавыполняться одним потоком, поэтому нет необходимости устанавливать его через omp_set_num_threads. НО он не меняет ваш пул, он просто советует компилятору запланировать следующий раздел в одном потоке, а остальные игнорируют его.
Чтобы показать это поведение, например, в университетских целях, я бы предложилраспечатать только идентификатор потока в параллельной и отдельной части.Таким образом, вы уже можете сказать, работает он или нет.