Intel® Concurrent Collections (CnC) – 一个新的平行开发模式

iOS小技能: HTTPS问题分析汇总:1、NSURLSessionTask finished with error - code: -1005(请求超时)2、Error Code=-999 - request.timeoutInterval = 5.0; + request.timeoutInterval = 30.0; 阅读详情

Intel® Concurrent Collections (CnC) – 一个新的平行开发模式

  开发多核应用程序的用户一般比较头疼的问题是跟线程相关的问题, 比如程序运行的硬件架构, 线程的同步, 调度与分配,负载平衡等。 某个系统领域内的专家(Domain expert)一般都会专注于程序语义的正确性以及程序本身的一些限制, 所以这些并行相关的问题对于Domain expert来说比较困难。而对于并行系统内的专家(Tuning expert)来说, 由于缺乏对某个领域内专业知识的了解,即使他对并行系统非常了解, 往往也很难开发出非常高效的某个专业领域的应用。
  Intel® Concurrent Collections (简称CnC) 是一个全新C++的并行编程模式。在这种编程模式下, 用户可以不用考虑太多的并行系统问题。 如同创建线性程序一样, 用户可以把更多的精力放在程序的整体架构上, 专注于解决专业领域内的问题, 而把Tuning expert要做的事情交给CnC来完成。 这样, Domain expert就可以从并行系统里解放出来, 开发出高效的适用于某个专业领域的并行程序。在CnC这个编程模式下, 如同写线性程序一样, 用户可以专注于各个功能模块, 处理好各个功能模块的输入和输出, 以及这些功能模块的执行先后次序。 这些问题其实就是应用程序本身的流程问题。
  并行的本质是一个处理数据依赖关系(Data Dependence) 和控制依赖关系(Control Dependence)的一个过程。 Data Dependence就是我们经常说的生产者和消费者关系。 一个功能模块生成一些数据提供给其他功能模块。 数据被某个生产者模块产生, 然后被某个消费者模块使用。 Control Dependence 是一个控制与被控制关系。 这个关系涉及到两个因素, 如果(if)和何时(when)。 在线性程序里面, if 和 when 是紧密结合在一起的。 在CnC里面, 我们引入了Tag这个概念。 如果某个控制模块执行完成了, 那么他产生一个Tag, 这样被控制的模块就可以被调度起来。 但是要注意, 这里和线性程序不一样的是, 线性程序里面被控制的模块是马上就开始执行了, 但是在CnC里面,被控制模块是被调度到一个线程池里面, 被控制模块并不见得就是马上开始执行。
  所以在Data Dependence 和Control Dependence 中, 我们需要3个元素来满足这两个关系。 
  Step: Step就是计算, 就是我们的程序功能模块, 对应程序中的某个function。.
  Item: Item是数据, 就是执行某个程序需要的数据以及该程序生成的数据。
  Tag: Tag 用来维护function之间的控制与被控制的关系。

  这3个元素其实也是我们在开发一般程序的时候需要考虑的问题。 根据这3个元素, 我们就可以构造一个程序的流程图(Graph). 这个Graph的实质就是在描述数据依赖关系和控制依赖关系。举个例子来说, 在我们的程序里面我们可以有这样一些元素:
  Item Data: [I1], [I2]
  Step function: (S1), (S2)
  Tag: <T1>, <T2>
  那么我们可以这样描述我们的程序:
  <T1>::(S1) 只有当Tag <T1>准备好的时候, S1才可以被执行
  <T2>::(S2) 只有当Tag <T2>准备好的时候, S2才可以被执行
  [I1]-> (S1) -> [I2], <T2> ->(S2)  
  数据[I1]输入给function (S1), (S1)在执行完后生成数据[I2], 并且生成Tag <T2>。
  实际上, 在这个例子中, 我们就是在用文本的方式来描述我们的程序流程图:
  [I1]-->(S1)-->[I2]-->(S2)
  只是在模块S1和模块S2之间, 我们用T2来控制S1 和S2之间的Control Dependence. 那么S2什么时候开始执行呢? 根据这个关系我们知道, 当S1执行完成生成Tag <T2>后, S2就被调度到线程池。 当数据I2准备好之后, S2就可以开始真正执行了。
  当我们把上述关系用文本的方式记录在一个文件中后, 我们就可以开始CnC编程了。
  下面这个图描述了CnC这种并行编程模式。


 
  用户在定义好文本方式的关系图后, CnC中的Translator会把它转换成一个C++头文件以及一个C++程序提示文件。 在C++程序提示文件里面定义好了系统的框架, 用户需要做的大部分工作就是往这些具体的功能模块里面填写具体的程序代码即可。在程序开发完成后, 编译器会自动链接一个CnC的Runtime库, 生成最终的应用程序。 当然, 这个应用程序是真成的多线程并行应用程序。
  CnC支持各种形式的并行开发,比如Data, Task, 和Pipeline Parallel. 目前CnC同时提供Windows 版和Linux版。 在Windows 版本下, CnC可以嵌入Visual Studio 中, 用户可以在Visual Studio的框架下开发基于CnC的并行程序。
下载和使用CnC或者想要了解更多的关于CnC的信息, 请访问网站: http://software.intel.com/en-us/articles/intel-concurrent-collections-for-cc/ 

【模型之美】3、文本聚类与智能摘要,让AI帮你做个总结 在信息过载时代,文本聚类与摘要技术成为关键工具。本文提出了一种结合OpenAI Embedding与传统机器学习的方法,实现从文本预处理到智能分析的完整流程。技术方案分为三阶段:1)通过Embedding将文本转化为语义向量;2)采用K-Means等算法进行无监督聚类;3)利用大模型生成可解释的标签和摘要。实验证明,该方法能有效提升信息处理效率,如在新闻聚合系统中自动分类10,000篇文章,准确率较传统方法提高15%。方案包含实用代码示例,涵盖文本清洗、向量化、聚类优化等关键技术细节,可应用于对话记忆、舆情 阅读详情

相关推荐

3. Matérn协方差模型与随机偏微分方程

对应的高斯马尔可夫随机场 (GMRF)可以通过使用某种随机偏微分方程(SPDE)明确构造,当由高斯白噪声驱动时,随机偏微分方程的解是具有 Matérn 协方差函数的高斯场(GF)

weixin_40614311的博客 1703

c# Dictionary线程冲突问题解决

错误信息: InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct. dictionary数据类型是非线程安全

Ray 3836

技嘉H61M-DS2, V2.0主板bios驱动

技嘉H61M-DS2主板, VER2.0最新的bios驱动。解压到u盘,启动的时候,按END进入Q-FLASH. 选第一个,要用到的是H开头的文件。

Operations that change non-concurrent collections must have exclusive access.

Operations that change non-concurrent collections must have exclusive access.

songjuntao8的专栏 2476

InvalidOperationException: Operations that change non-concurrent collections must have exclusive acc...

InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collecti...

dengshumi7891的博客 2847

HNUSTOJ 1604:Operations

1604: Operations 时间限制:2 Sec内存限制:128 MB 提交:313解决:97 [提交][状态][讨论版] 题目描述 You can perform the following operations. i=i+1;i=i-1;i=i/2 ifiis even The numberiis integer. Find th...

diuliaoquan1673的博客 214

生成PDF文档之iText

iTextSharp.text.Document:这是iText库中最常用的类,它代表了一个pdf实例。如果你需要从零开始生成一个PDF文件,你需要使用这个Document类。首先创建(new)该实例,然后打开(open)它,并添加(add)内容,最后关闭(close)该实例,即可生成一个pdf文件。 iTextSharp.text.Paragraph:表示一个缩进的文本段落,在段...

dengshumi7891的博客 328

多线程学习笔记

现在手上有一些历史的VB项目,是工控方面PLC控制的. 代码用了很多DoEvent 和时间等待. DoEvent的最大问题的不知道流程跳到哪里去了. MSComm1.InBufferCount = 0 MSComm1.Output = nSendTemp DoEvents ...

dengshumi7891的博客 314

水晶報表入門

一般步驟: 1. 新建一個xsd,把table/view拖进来,会生成一个dataadapter,修改其sql,获得你需要的数据 2.新建一个rpt,数据源选择刚才新建的xsd,把字段拖到合适的位置。 3. 新建一个aspx页面,后台代码 Dim rpt As New RptCustomer Dim da As New DsRptCustom...

dengshumi7891的博客 168

CodePlex 开源项目关注

浏览CodePlex的开源项目,把其中自己觉得有趣的关注的写下来。供以后参考。 Asp.net Web Crop Image Control Asp.net Web Crop Image Control allows developers to build image cropping functionality easily on their projects. Cropper...

dengshumi7891的博客 219

[翻译]在 .NET Core 中的并发编程

原文地址:http://www.dotnetcurry.com/dotnet/1360/concurrent-programming-dotnet-core 今天我们购买的每台电脑都有一个多核心的 CPU,允许它并行执行多个指令。操作系统通过将进程调度到不同的内核来发挥这个结构的优点。然而,还可以通过异步 I/O 操作和并行处理来帮助我们提高单个应用程序...

weixin_33725272的博客 872

Collection and Collections

Collection and Collections Collection interface int size() returns the number of elements in this collection boolean isEmpty() returns true if this collection contains no elements boolean contains(Object o) returns true if this collection contains the spe

unspoken0714的博客 268

C# concurrent programming

Concurrent programming -Asynchronous vs. Multithreaded Code Concurrent programming is a broad term and we should start with it by examining the difference between asynchronous methods and actual mult...

weixin_30532369的博客 181

Threading in C# 5

Part 5: Parallel Programming In this section, we cover the multithreading APIs new to Framework 4.0 for leveraging multicore processors: Parallel LINQ or PLINQ The Parallel class The task p...

afeyfre41671的博客 730

AccuRev开发流程

AccuRev开发流程   本文是根据AccuRev培训资料编译而成,目的是让大家更好了解AccuRev,翻译如有不确处,请见谅。 Understanding AccuRev Concepts(理解AccuRev概念) Understanding the Developer Role(理解开发者角色) Workspaces(工作空间) 4 basic workspaces comman

鹤之淇水 3542

Concurrent Collections 并发集合

java.util.concurrent包 包含了大量Java 集合框架的补充。这些是最容易分类的,通过接口集合提供:    1 BlockingQueue 阻塞队列 定义了一个先进先出的数据结构,当试图添加进一个满的队列或者从一个空的队列中获取时会阻塞或者超时。    2 ConcurrentMap 并发隐射 java.util.Map的子接口定义了有用的原子操作。这些操作移除或替代

luccs624061082的专栏 789
下一篇: 使用Intel编译器解决字节序问题
intel_yang
博客等级 码龄17年 2粉丝 2原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值