小编Max*_*sov的帖子

std :: sort比自定义OpenMP并行排序算法快得多

我一直在使用OpenMP测试并行排序。我实现了比没有OpenMP快3倍的奇偶排序算法。但是,std :: sort仍然要快得多:seq-100s,并行-20s,std :: sort-0.05s

我尝试将#pragma omp并行移动到i-cycle,但效果更糟,并且没有对向量进行排序

for (int i = 0; i < 100000; i++) {
        #pragma omp parallel for
        for (int j = (i % 2) ? 0 : 1; j < 100000 - 1; j += 2) {
            if (vec_[j] > vec_[j + 1]) {
                std::swap(vec_[j], vec_[j + 1]);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

TBH,我期望并行奇偶排序是最快的,但现在我想知道-我做错什么了吗,或者只是std :: sort如此有效?

c++ parallel-processing openmp

0
推荐指数
1
解决办法
354
查看次数

崩溃时释放分配的指针的正确方法

想象一下,在C程序中导致段错误是常见的(也是错误的)。我是否应该知道在运行时分配的“仍然可达”指针?

我用谷歌搜索了Valgrind关于仍然可以到达的指针的观点(也阅读了其他相关的stackoverflow主题),我了解到基本上这不是一个大问题,我不必担心。但是我愿意。在C ++中,可以使用释放析构函数对其进行某种修复,该析构函数将始终根据标准进行调用。


void lose_definetly() {
  int * array = calloc(4,sizeof(int));
  array[3] = 1232;
}

void proper_free() {
  int * array = calloc(4,sizeof(int));
  array[3] = 1232;
  free(array);
}

void cause_segfault() {
  int * array = calloc(4,sizeof(int));
  array[-1232142144] = 1232;
  free(array);
}

int main() {
  lose_definetly();
  proper_free();
  cause_segfault();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序输出预期为段错误:

Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

Valgrind关于泄漏的报告:

==134==    definitely lost: 16 bytes in 1 blocks
==134==    indirectly lost: 0 bytes in 0 blocks
==134==      possibly lost: 0 bytes in 0 blocks …
Run Code Online (Sandbox Code Playgroud)

c c++

-1
推荐指数
1
解决办法
104
查看次数

标签 统计

c++ ×2

c ×1

openmp ×1

parallel-processing ×1