首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

与std::execution::par_unseq的std::for_each不是在GCC上工作,而是与MSVC一起工作。

std::execution::par_unseq是C++17中引入的一个执行策略,用于并行执行for_each算法。然而,由于不同编译器的实现可能存在差异,导致在GCC上无法正常工作,但在MSVC上可以正常工作。

std::for_each是一个算法函数,用于对指定范围内的元素应用指定的操作。它接受一个执行策略作为参数,以确定如何执行操作。std::execution::par_unseq是一种并行执行策略,表示可以以并行和非顺序的方式执行操作。

GCC是GNU编译器集合的一部分,而MSVC是微软的C++编译器。由于不同编译器的实现可能存在差异,因此在使用C++标准库时可能会出现一些兼容性问题。在这种情况下,std::execution::par_unseq在GCC上可能无法正常工作,但在MSVC上可以正常工作。

为了解决这个问题,可以考虑以下几点:

  1. 确认使用的编译器和版本。确保使用的是支持C++17标准的编译器,并且已经更新到最新版本。
  2. 尝试使用其他执行策略。除了std::execution::par_unseq,C++标准库还提供了其他执行策略,如std::execution::seq(顺序执行)和std::execution::par(并行执行)。尝试使用其他执行策略,看是否可以在GCC上正常工作。
  3. 自定义并行执行策略。如果标准库提供的执行策略无法满足需求,可以考虑自定义并行执行策略。这需要深入了解并行编程和线程库的知识,并根据具体情况进行实现。

总之,std::execution::par_unseq在GCC上无法正常工作,而在MSVC上可以正常工作。为了解决这个问题,可以尝试使用其他执行策略或自定义执行策略。具体选择取决于编译器和应用需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Modern C++中 STL 算法执行策略

引言 C++提供了一系列通用算法,这些算法可以各种容器(如vector、list、array等)以及其他可迭代数据结构一起使用。...这些算法涵盖了从基本操作(如复制、查找、替换)到更复杂操作(如排序、合并、堆操作)等多个方面。这些算法都接受迭代器作为参数,这使得它们可以各种容器和可迭代对象一起使用。...不同平台,上述例子性能对比可能如下: std::execution::seq: 单核处理器上表现最佳,但在多核处理器可能不是最快,因为它不会利用多核优势。...std::execution::par_unseq: 结合了并行和向量化,可能在支持SIMD硬件提供最佳性能。但是,如果排序算法本身不适合向量化,这种策略可能不会带来额外性能优势。...多核处理器,如果你算法可以有效地分割工作负载,那么并行执行通常能提供性能提升。

17210
  • 【C++篇】解密 STL 动态之魂:全面掌握 C++ vector 高效优雅

    本篇文章将带你深入理解 C++ vector 内部工作原理高级用法,从基本构造遍历,到迭代器失效问题深入剖析,再到不同场景下优化策略。...通过全面、详细讲解,我们将一步步揭开 vector 技术细节,让你在掌握 vector 基本使用基础,更好地应对复杂开发需求。...不同编译器(如 GCCMSVC)对迭代器失效处理方式不同。...GCC 某些情况下可能会宽容处理失效迭代器,程序不会立即崩溃,但输出结果不确定;MSVC 则会直接抛出错误并导致程序崩溃。...编译器差异:不同编译器(如 GCCMSVC)对迭代器失效处理方式不同,开发跨平台程序时应尤为注意。

    19610

    令人沮丧C++性能调试

    从事游戏开发的人往往直言不讳地说 C++ 抽象他们工作格格不入,而且他们有充分理由——游戏是实时模拟,即使调试版本中也需要可玩性和响应性——想象一下 20FPS 左右帧率下调试虚拟现实游戏导致眩晕情形...#include int main(){ return std::move(0);} C++ 程序员应该知道 std::move(0) 语义 static_cast<int...情况比想象更糟 std::move 不是一个孤立例子——禁用优化情况下,任何语义是强制转换函数最终都会生成一个无用 call 指令。...强制转换实用函数并不是唯一一种没有优化就表现得很糟糕抽象类别——对于概念轻量级类型,如 std::vector::iterator,没有人希望调试时进入 iterator::operator*...Clang 接受了这个标志,但它与 -O1 完全相同——LLVM 维护者从未实现过恰当调试优化级别。MSVC 没有 -Og 相对应东西,而大多数游戏开发者使用 MSVC 作为他们主要编译器!

    98920

    并发编程(从C++11到C++17)

    本文源码在下面两个环境中经过测试,环境准备方法如下。 MacOS Mac,我使用brew工具安装gcc以及tbb库。...互斥体锁 mutex 开发并发系统目的主要是为了提升性能:将任务分散到多个线程,然后不同处理器同时执行。...从上面可以看到,无论是生产者还是消费者,当它们工作条件不满足时,它们并不是直接报错返回,而是停下来等待,直到条件满足。 下面我们就借助于条件变量,再次改造之前银行转账系统。...execution::par execution::parallel_policy C++17 指示并行算法执行可以并行化 execution::par_unseq execution::parallel_unsequenced_policy...5.输出本次测试所使用时间。6.第二次调用使用std::execution::par参数。7.第三次调用使用std::execution::par_unseq参数。

    749130

    两万字长文,史上最全 C++ 年度总结!

    而 11 月重启线下聚会或许也能表明委员会工作将会重新走入正轨。本节将会提及一些过去一年中标准方面相对比较重大或较为有意思改动。由于笔者能力兴趣原因,可能会有遗漏,望大家见谅。...如果一切顺利的话,今年春天发布 CMake 3.26 中将包含对 MSVCGCC 以及 Clang 三大编译器支持。 Bazel。...也就是说一个不实现 Coroutine Elision 编译器也是完全符合标准要求,例如对于上面相同例子[8]: GCCMSVC 都无法将其优化到 Clang 相同水准。...而这点是无可指责,因为 Coroutine Elision 并不是标准一部分,现在看起来基本是 Clang/LLVM 扩展。GCC MSVC 并没有实现这个特性义务。... Lazy 假设下,std::execution 设计实现可以获得很多收益。首当其冲就是对数据竞争避免。如果任务创建是立即地,激进地执行,那么后继任务创建就要考虑数据竞争情况。

    1.7K30

    Windows10中Visual Studio2017中使用boost1.69.0

    Boost是由C++标准委员会部分成员所设立Boost社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器数据结构、并发编程、函数式编程等。...目前已经更新到了1.72.0版本,官网下载地址为:https://www.boost.org/users/history/version_1_72_0.html,由于我之前自己Windows10系统安装是...由于我自己Windows10系统同时安装了VS2013和VS2017,我下载了3个版本,如下图所示: ?...lib库解压到同一目录下了,分别对应lib32-msvc-12.0、lib32-msvc-14.1、 、lib64-msvc-14.1 VS2017中使用boost1.69.0 例如,我把编译好后...::istream_iterator in; std::for_each( in(std::cin), in(), std::cout << (_1 * 3) << "\n");

    4.3K31

    硬核!C++并发编程(C++11到C++17)

    本文源码在下面两个环境中经过测试,环境准备方法如下。 MacOS Mac,我使用brew工具安装gcc以及tbb库。...,通过下面的命令安装gcc-9。...互斥体锁 mutex 开发并发系统目的主要是为了提升性能:将任务分散到多个线程,然后不同处理器同时执行。...从上面可以看到,无论是生产者还是消费者,当它们工作条件不满足时,它们并不是直接报错返回,而是停下来等待,直到条件满足。 下面我们就借助于条件变量,再次改造之前银行转账系统。...输出本次测试所使用时间。 第二次调用使用std::execution::par参数。 第三次调用使用std::execution::par_unseq参数。

    1.3K40

    《C++并发编程实战》读书笔记(6):高级线程管理、并行算法函数、测试除错

    第9章 高级线程管理 9.1 线程池 大多数程序中并不方便给每个任务分配单独线程,但仍可通过线程池来充分利用可调配并发算力:将可同时执行任务提交到线程池,放入任务队列中等待,工作线程循环地领取并执行任务...借助thread_localinterrupt_flag来辅助实现,通过interrupt成员函数来设置中断,并借此实现可中断条件变量/future等待。...中断线程实际应用中常见场景是运行程序前开启后台任务,程序运行完退出时中断后台任务。...---- 第10章 并行算法函数 C++17向标准库加入了并行算法函数,原有函数参数列表前新增了执行策略参数。...其中seq代表顺序策略,令算法函数发起调用线程执行全部操作,没有内存次序限制;par代表并行策略,内部操作可能在发起调用线程也可能另外创建线程执行,涉及变量绝不能引发数据竞争;par_unseq

    32320

    解读C++即将迎来重大更新(一):C++20四大新特性

    简单来说,全新 GCC、Clang 和 EDG 编译器能提供对核心语言最佳支持。此外,MSVC 和 Apple Clang 编译器也支持许多 C++20 特性。 ? C++20 核心语言特征。...GCC 在库方面的支持最好,接下来是 Clang 和 MSVC 编译器。 ? C++20 库特征。 上面的截图仅展示了对应表格前面一部分,可以看出这些编译器表现并不是非常令人满意。...原因如下: 模板要求是接口一部分; 类模板中函数重载或特殊化可以基于概念进行; 因为编译器能够比较模板参数要求实际模板参数,所以能得到更好报错信息。 但是,这还不是全部。...你可以使用预定义概念,也可以定义你自己概念; auto 和概念用法统一到了一起。你可以不使用 auto,而是使用概念; 如果一个函数声明使用了一个概念,那么它会自动变成一个函数模板。...下面这段代码语义 gcd 算法等效: template requires Integral() T gcd(T a, T b){ if( b == 0 ) return

    1.5K20

    Module partitions和符号交叉引用(声明和实现分离)

    以前C++为了解决循环依赖问题,经常会把类或者函数声明写前面,实现写后面。然后中间代码就可以实现内部模块内聚而互相引用。...但是 derived::visit(derived*) 多态override了 base::visit(derived*) 。...但是实际这里 base.ixx 里 class derived 和 derived.ixx 里 class derived 不是同一个类。因为他们是处于不同模块内,作用域和可见性也都不同。...GCC GCC 11以上才初步支持 Module 。我本地下了个snapshotGCCgcc version 11.0.1 20210321 (experimental) (GCC) )。...id=99769 ,等解决了大致就是下面这样命令: g++ -fmodules-ts -std=c++20 -x c++ -c foo-types.ixx -o foo-types.o g++ -fmodules-ts

    1.6K20

    C++ 动态新闻推送 第41期

    coroutine (四):数据类型then c++ execution coroutine (五):异步 没啥说,代码走读 3 Ways To Parse Command Line Arguments...作者想到了一个绕过办法,你猜猜是不是mmap 代码实现 主要是避免搬迁,mmap基础上进行扩展/缩小空间,作者性能测试表示,大量内存场景下,比vector要好,小对象不如 A note on...,gcc__cust msvc_Cpos大同小异 Fast CSV processing with SIMD 作者实现了一版csvquote ,简单一测比原版快20倍,用上了SIMD 感兴趣可以看看实现...,且绝对意义全剧唯一单例,缺点,你这么写没人愿意改,可能很难合入 Modernizing your code with C++20 sonarsource他们是做静态检查分析 快速把代码改成c++...这个后面会合入llvm 但是没有和gcc LTO比较 Add a Developer Console to your C++ Game in 20 Lines of Code 给自己游戏加一个控制台

    38430

    C++并发编程(C++11到C++17)

    本文源码在下面两个环境中经过测试,环境准备方法如下。 MacOS Mac,我使用brew工具安装gcc以及tbb库。...,通过下面的命令安装gcc-9。...互斥体锁 mutex 开发并发系统目的主要是为了提升性能:将任务分散到多个线程,然后不同处理器同时执行。...从上面可以看到,无论是生产者还是消费者,当它们工作条件不满足时,它们并不是直接报错返回,而是停下来等待,直到条件满足。 下面我们就借助于条件变量,再次改造之前银行转账系统。...输出本次测试所使用时间。 第二次调用使用std::execution::par参数。 第三次调用使用std::execution::par_unseq参数。

    1.4K51

    C++ ABI总结

    事实距离现在,这已经有比较长时间;而写这篇文章目的,一方面可以给其他想了解这个话题的人一点思路,权当抛砖引玉;另一方面更想大家做以探讨,以防止对此概念产生误解而不自知,希望大家可以指正这篇文章错误...当然,这不意味着不同C编译器产生object file可以一起link。...特别地,Clang好像有一些选项可以尽量(但不完全)兼容MSVCABI;见clang.llvm.org/docs/MSV。不知道GCC/MSVC有没有兼容其他ABI选项?...MSVC使用是STL(这里不是C++98STL之意,但微软就起这个名字也没什么办法),具体到文件就是msvcprtd。每个主要版本都会具有新ABI,来尽快更新C++新特性。...比较有名是5.1中std::string和std::listABI改变了(为了适应C++11关于COW规定),造成新编译器中链接之前代码会运行崩溃(我觉得这是很多公司维持gcc版本4.9重要原因

    78900

    近期cmake-toolset一些适配问题

    新增对 gRPC 交叉编译支持并不是说原来版本不支持。而是原来版本里 cmake-toolset 交叉编译场景下只编译库,不编译宿主平台 gRPC 代码生成插件。...GCC/Clang STL BUG 适配 gRPC 过程中,我还碰到了一个GCC和ClangBUG。...我只GCC碰到了,但是按 stackoverflow 相关问题说法Clang也是有问题。我本地Clang版本都比较高,高版本Clang是没有这个问题。...目前 cmake-toolset 里也有一份这个Patch。 总结 近期对 cmake-toolset 改造主要就上面这些了。对一些依赖库升级过程中,碰到不是特别典型问题我就不一一列举了。...后面可能陆陆续续也会碰到更多问题,欢迎大家一起交流改进。

    90440

    C++11(14) 简易推荐小记~

    之前了解过一些C++新标准内容,觉得很不错,在此写篇小记,简易推荐一下~   容器内元素操作是个很普通需求,工作中应是屡见不鲜,这里假设有个list容器,存储是一系列int,表达意思就算作是年龄吧...(常量)引用来传递,效率应该不错,访问容器元素使用了迭代器,模式很经典呀~   不过仔细再看,那几个迭代器声明还是略显冗长了一些,list容器初始化也不是那么简明,更大一个问题是,代码没啥通用性...,没有冗长迭代器声明,没有累赘初始化过程,通用性也不错,容器换做vector,代码一样工作~   那么问题来了:上面的代码还能更简洁吗?   ...,add捕获子句中并不是而是 &add_one,什么意思呢?...只有一个小小细节,就是我们add函数体中使用了std::begin(container)和std::end(container),而没有直接调用 container.begin() 和 container.end

    38820
    领券