5、深入探索OpenCL:共享虚拟内存与弱一致性原子操作

深入探索OpenCL:共享虚拟内存与弱一致性原子操作

1. 工作窃取与原子操作的性能优势

在特定情况下,工作窃取实现比其他实现更快。当工作项数量为32(采用工作窃取)或64(不采用工作窃取)时,工作窃取实现比Winterstein等人的实现快1.5倍。虽然原子操作本身成本较高,但它们能让工作项相互同步,在运行时平衡工作负载,从而提升应用程序的整体性能。

2. 共享虚拟内存(SVM)
2.1 为何需要SVM

在OpenCL 1.x中,主机和设备通信需显式地将数据从主机内存复制到设备内存,这会导致地址无法保留,不利于使用基于指针的数据结构。而OpenCL 2.0引入的SVM特性,提供了一个主机和所有设备都可访问的单一内存地址空间的假象。基于指针的数据结构可以在主机和设备之间无缝共享,只需显式传输数据结构的地址。这不仅减轻了异构编程的负担,还能显著提高速度,因为设备可以按需实时获取所需数据。并且,在适当的同步机制下,主机和设备可以同时修改SVM中的数据结构,进一步提高计算的并行度。

2.2 在CPU/FPGA系统中实现SVM

在异构CPU/FPGA系统中提供SVM需要实现以下三个功能:
- 虚拟地址到物理地址的转换 :CPU通常使用虚拟地址,因此在解引用主机地址空间的指针之前,必须将其转换为物理地址。这种映射关系存储在CPU的页表中。为了使主机上数据结构中使用的指针在传输到FPGA后仍然有意义,FPGA在每次SVM访问之前必须执行相同的虚拟到物理地址转换。可以通过允许FPGA直接访问主机内存中的页表来实现这一功能,例如在基于ARM的SoC中,可以通过ARM的加速器一致

先展示下效果 https://pan.quark.cn/s/a4b39357ea24 遗传算法 - 简书 遗传算法的理论是根据达尔文进化论而设计出来的算法: 人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因。 遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。 进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解 依据某些适应性条件测算这些候选解的适应度 根据适应度保留某些候选解,放弃其他候选解 对保留的候选解进行某些操作,生成新的候选解 遗传算法流程 遗传算法的一般步骤 my_fitness函数 评估每条染色体所对应个体的适应度 升序排列适应度评估值,选出 前 parent_number 个 个体作为 待选 parent 种群(适应度函数的值越小越好) 从 待选 parent 种群 中随机选择 2 个个体作为父方和母方。 抽取父母双方的染色体,进行交叉,产生 2 个子代。 (交叉概率) 对子代(parent + 生成的 child)的染色体进行变异。 (变异概率) 重复3,4,5步骤,直到新种群(parentnumber + childnumber)的产生。 循环以上步骤直至找到满意的解。 名词解释 交叉概率:两个个体进行交配的概率。 例如,交配概率为0.8,则80%的“夫妻”会生育后代。 变异概率:所有的基因中发生变异的占总体的比例。 GA函数 适应度函数 适应度函数由解决的问题决定。 举一个平方和的例子。 简单的平方和问题 求函数的最小值,其中每个变量的取值区间都是 [-1, ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值