мы пытаемся запустить два экземпляра cblas_dgemm параллельно. Если общее количество потоков равно 16, мы бы хотели, чтобы каждый экземпляр работал с использованием 8 потоков. В настоящее время мы используем такую структуру:
#pragma omp parallel num_threads(2)
{
if (omp_get_thread_num() == 0){
cblas_dgemm(...);
}else {
cblas_dgemm(...);
}
}
Вот вопрос:
На верхнем уровне есть два потока OpenMP, каждый из которых активен внутри одного из блоков if / else. Теперь мы ожидаем, что эти потоки будут вызывать функции cblas_dgemm параллельно, а внутри этих функций cblas_dgemm мы ожидаем появления новых потоков.
Чтобы установить количество потоков, внутренних для каждого cblas_dgemm, мы устанавливаем соответствующую переменную окружения: setenv OPENBLAS_NUM_THREADS 8
Тем не менее, это не похоже на работу. Если мы измеряем время выполнения для каждого из параллельных вызовов, значения времени выполнения равны, но они равны времени выполнения отдельного вызова cblas_dgemm, когда вложенный параллелизм не используется и переменная среды OPENBLAS_NUM_THREADS установлена в 1.
Что не так? и как мы можем иметь желаемое поведение?
Есть ли способ узнать количество потоков внутри функции cblas_dgemm?
Большое спасибо за ваше время и помощь