Тут я бы не советовал связываться с OpenMP. Оно для низкоуровневой оптимизации алгоритмов, и требует весьма немалой осторожности в работе.
Так что тут проще всего - делить процесс на треды, и пользовать общую память, мутексы и кондишены. Другой вариант - если общая память окажется необязательным требованием - воспользоваться PVM3 или MPI, и тогда такое решение будет масштабироваться как на SMP, так и на кластер. Можно и совместить - если выбранная реализация MPI будет поддерживать многопоточность.