The most efficient way to spawn multiple tasks at once is to use task_list. It's how you would usually spawn several child tasks at once. You should be able to figure out exactly how to do that from the the documentation and header files.
There are some restrictions however, enforced by assertions. In particular, every task in a task list should be of the same depth.Also please be aware that parent-child relation is set at the moment you allocate atask object, not at the moment you spawn it.
AndI agree with your concerns about performance being affected.In fact, in this case performance would be affected by design; you want to spawn a lot of tasks at once, and they all will reside in the same pool (of the current thread) so stealingis serialized. And if all tasks are allocated as children of the same parent, the parent's reference counter will be a hot spot that every task updates.
Generally with TBB, it is preferrable to spawn new tasks as soon as they are ready and safe to execute, and spawn more child tasks from those to build a task tree. If you need to collect the data first, and then start processing per some condition, I would suggest to collect the data in a vector (or concurrent_vector), and when the moment comes, start parallel_for loop over the elements of the vector.