You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求示例:将Intel/GCC Cilk Plus归约器移植到OpenCilk 2.1

OpenCilk 2.1 移植示例:替换GCC Cilk Plus reducer_list

OpenCilk 2.1 没有内置对应GCC Cilk Plus的reducer_list或op_list_append组件,需要手动基于cilk_reducer自定义支持列表追加的归约器。以下是原代码的移植版本:

#include <cilk/cilk.h>
#include <list>
#include <iostream>

// 自定义列表归约器:支持并行追加元素并合并列表
struct list_reducer {
    // 归约器的视图:保存本地列表
    std::list<char> view;

    // 合并操作:将另一个视图的列表追加到当前视图
    void combine(list_reducer& other) {
        view.splice(view.end(), other.view);
    }

    // 提供push_back接口,和原代码逻辑对齐
    void push_back(char ch) {
        view.push_back(ch);
    }
};

// 用cilk_reducer关键字声明归约器类型
CILK_CXX_REDUCER(list_reducer, list_reducer, list_reducer::combine)

void reducer_list_test() {
    using namespace std;

    // 初始化自定义归约器
    cilk::reducer<list_reducer> letters_reducer;

    // 并行构建列表
    cilk_for (char ch = 'a'; ch <= 'z'; ++ch) {
        // simulated_work(); // 保留原模拟工作函数,需自行实现
        (*letters_reducer).push_back(ch);
    }

    // 获取归约结果并输出
    const list<char>& letters = letters_reducer->view;
    cout << "Letters from custom reducer:";
    for (char c : letters) {
        cout << " " << c;
    }
    cout << endl;
}

关键差异说明

  • OpenCilk要求自定义归约器,通过CILK_CXX_REDUCER宏声明视图类型、构造方式和合并逻辑
  • 原代码中letters_reducer->push_back()改为(*letters_reducer).push_back(),因为OpenCilk的reducer迭代器直接访问视图对象
  • 最终结果直接从归约器的view成员获取,替代原get_value()方法

内容的提问来源于stack exchange,提问作者npras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:47:12