C 使用openmp时没有看到任何加速

C 使用openmp时没有看到任何加速,c,openmp,C,Openmp,我对openmp非常陌生,正在努力理解它的结构 这是我写的一个简单代码。。。(数字的平方) #包括 #包括 #定义大小20000 #定义NUM_线程50 int main(){ int-id; int输出[大小]; omp_设置_num_线程(num_线程); 双启动=omp_get_wtime(); #pragma-omp并行 //{ //id=omp_get_thread_num(); 对于(int i=0;i这很可能是由于您选择了要检查的问题。让我们看看您的并行循环: #pragma om

我对openmp非常陌生,正在努力理解它的结构

这是我写的一个简单代码。。。(数字的平方)

#包括
#包括
#定义大小20000
#定义NUM_线程50
int main(){
int-id;
int输出[大小];
omp_设置_num_线程(num_线程);
双启动=omp_get_wtime();
#pragma-omp并行
//{
//id=omp_get_thread_num();

对于(int i=0;i这很可能是由于您选择了要检查的问题。让我们看看您的并行循环:

#pragma omp parallel for
for (int i=0; i<SIZE;i++){
    id = omp_get_thread_num();
    output[i] = i*i;
}
#pragma omp parallel for

对于(inti=0;要开始学习,请删除
omp\u set\u num\u threads(num\u threads);
行(除非CPU上有50个内核)。此外,每个线程可能没有足够的工作来证明启动线程的开销。请尝试研究该方法。如果使用动态调度,它将自动为您决定程序的最佳线程配置,给定可用的硬件。@AviGinsburg,但即使一个线程比2个线程快,也比3个线程快。@AviGinsburg阅读..我有16核机器..我可以通过什么最简单的例子来理解并行构造?你每个线程的工作量很小(一个乘法*大小/线程)。在每次迭代中添加更多工作,以尝试改进。或者,您可以增加
大小
,但在任何情况下,编译器在不使用OMP时可能会比在使用OMP时更好地优化这样一个简单的示例。这也可能是性能问题的根源。
#pragma omp parallel for
for (int i=0; i<SIZE;i++){
    id = omp_get_thread_num();
    output[i] = i*i;
}