В общем случае не должно быть проблем с созданием нового потока из запущенного потока.
Как вы предполагаете, это не лучшее решение, потому что создание / удаление потоков часто не дешево и чем больше у вас потоков, тем больше у вас переключений контекста, что является или может быть также ухудшением производительности.
Таким образом, вы можете создать пул потоков, который определил количество потоков, и позволить потокам пула потоков работать над чтением данных с диска и выполнять вычисления. Вы бы избежали массового создания и уничтожения потоков.
Если вы также часто создаете / уничтожаете потоки, вызывающие функции GPU, вы можете создать два пула потоков, один для потоков, вызывающих функции GPU, и один пул потоков для чтения с диска и вычислений.