问题描述
#pragma omp for schedule(dynamic)
for(std::size_t i = 0 ; i < myArray.size() ; i++)
{
//some code here
}
换句话说,这个循环默认使用动态调度。但是,如果用户指定 OMP_SCHEDULE 环境变量,我希望能够使用 OMP_SCHEDULE 中指定的任何策略覆盖动态策略。如何才能做到这一点?换句话说,如果未指定 OMP_SCHEDULE,我想默认使用动态计划。我的理解是在上面的代码中,因为我指定了 schedule(dynamic) 它将忽略 OMP_SCHEDULE 中指定的任何策略,这是正确的吗?谢谢
解决方法
要获得您想要的东西,您可能需要进行一些人工干预。在初始化期间,我会按照这个一般顺序添加一些代码:
function SearchingChallenge(str) {
let onlyLetters = /^[a-zA-Z]+$/;
if (str.length > 4 && str.length < 25) {
if (onlyLetters.test(str.charAt(0))) {
return true;
} else {
return false;
}
} else {
return false;
}
}
console.log(SearchingChallenge('Hello World!'));
console.log(SearchingChallenge('!dlroW olleH'));
console.log(SearchingChallenge('u__adced_123'));
然后对于您的循环,在 #include <omp.h>
std::string scheduling = getenv("OMP_SCHEDULE");
// If the user didn't specify anything,set the default we want.
if (scheduling.empty())
omp_set_schedule(omp_sched_dynamic,-1);
中指定 schedule(runtime)
调度策略,因此它将使用由 #pragma
环境变量或我们上面设置的内容:
OMP_SCHEDULE
为块大小传递 -1 会告诉运行时选择其默认值。根据情况,显式设置不同的值可能会提高性能(但 -1 应该相当于不指定块大小,就像您在 #pragma omp for schedule(runtime)
for(std::size_t i = 0 ; i < myArray.size() ; i++)
{
//some code here
}
中所做的那样)。