第一章 基于任务的程序设计

1.了解 并行 并发 交错并发 串行的意思

2.法则

Amdahl 法则 ,通过以下预测多处理器系统的最大理论性能提升(即加速比),这个公式应用于运行在多核处理器上的并行算法:

公式: 最大加速比(倍数)=1/((1-P)+(P/N));

其中:

  P 表示能够完全并行运行的代码比例

  N 表示可用计算单元数(处理器或物理内核数)

缺点:Amdahl法则考虑的只是物理内核数目的变化,并未考虑可以在既有应用程序中添加新功能以充分利用增加的并行处理能。

Gustafson 法则,这个公式通过问题的大小来测量在固定时间内可以执行的工作量:

公式:总工作量(单元数)=S+(N+P)

 其中:

  S 表示一次顺序执行完成的工作单元数

  P 表示能够完全并行运行的代码比例

  N 表示可用计算单元数(处理器或物理内核数)

3.创建成功的基于任务的设计

遵循以下的步骤就可以创建出成功个的基于任务的设计:

  3.1.将每个问题分解为很多子问题,完全不要考虑顺序执行

  3.2.将每个问题想象下面三类中的一类:

    a. 能够以并行的方式进行处理的数据---对数据进行分解以实现并行化,

    b.需要很多任务,而且能够以某种复杂的并行化惊喜处理的数据流---对数据和任务分解以实现并行化。

    c.可以并行运行的任务---对任务进行分解以实现化。

  3.3.将设计组织为能够表达并行化的形式

  3.4.考虑不同子问题连接起来的任务的必要性。尽量可能地避免依赖性

  3.5.在进行任务的时候,心理要想着并发和潜在的并行化。

  3.6.分析并行化的问题的执行计划,考虑当前的多核微处理器和未来的架构。在设计的时候要准备好更高的可扩展性。

  3.7.尽可能减少临界区。

  3.8.尽可能通过基于任务的程序设计实现并行化。

  3.9.调优和迭代。

4.理解多核并行程序的设计原则

  8个原则:

  4.1 按照并行的方式思考

  4.2 使用抽象编程

  4.3 按照任务(事情)编程,而不是按照线程(cpu 内核)编程.

  4.4 设计的时候要考虑关闭并发的情形.

  4.5 避免使用锁 -- 非常重要

  4.6 利用为帮助并发而设计的工具和库

  4.7 使用可扩展的内存分配器

  4.8 设计的时候要考虑随增长的工作负载而扩展。

时间: 2024-08-30 01:04:36

第一章 基于任务的程序设计的相关文章

第一章JAVA的基本程序设计结构

1.1 一个简单的JAVA程序 public class FirstSample { public static void main(String[] args) { System.out.println("Hello World!"); } } Java大小写敏感. 关键字class后面紧跟类名.定义类名字必须以字母开头,后面可以跟字母和数字的任意组合. 不能使用java保留字作为类名. 标准的命名规范: 类名是以大写字母开头的名词.如果名词由多个单词组成,采用驼峰命名法. 1.2

《windows程序设计》第一章,建议想学API的每天看一章

开始 壹佰软件开发小组  整理编译   本书介绍了在Microsoft Windows 98.Microsoft Windows NT 4.0和Windows NT 5.0下程序写作的方法.这些程序用C语言编写并使用原始的Windows Application Programming Interface(API).如在本章稍后所讨论的,这不是写作Windows程序的唯一方法.然而,无论最终您使用什么方式写作程序,了解Windows API都是非常重要的. 正如您可能知道的,Windows 98已

c语言程序设计第一章3

字符数组是C语言中最常用的数组类型.下面我们通过编写一个程序,来说明字符数组以反操作字符数组的函数的用法.该程序读入一组文本行,并把最长的文水行打印出来.该算法的基本框架非常简单: while (还有未处理的行) i f (该行比已处理的最长行还要长) 保存该行 保存该行的长度 打印最长的行 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MAXLENGTH 100//文本的最大长度 4 int getline(char l

c程序设计语言第一章2

练习1.13编写一个程序,打印输入中单词长度的直方图.水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MAXHIST 15//定义直方图的最大值 4 #define MAXWORD 11//定义单词的最大字符数 5 #define IN 1 6 #define OUT 0 7 int main() 8 { 9 int nc;//单词所含的字符数 10 int maxv

读书笔记 - javascript 高级程序设计 - 第一章 简介

第一章 简介   诞生时间 1995 最初用途 客服端验证 第一版标准 注意是标准 1997年 Ecma-262  一个完整的js实现由三部分组成 ECMAScript DOM 文档对象模型 BOM 浏览器对象模型 ECMAScript的宿主环境 web浏览器 Node(服务器js平台) adobe flash js和as的关系 他们都实现了 ECMAScript 五大主流浏览器 IE Firefox Safari Chrome Opera dom介绍 它是针对xml但经过扩展用于html的应用

javascript高级程序设计 第一章--javascript简介

javascript高级程序设计 第一章--javascript简介Netscape开发的javascript最初的目的就是处理由服务器负责的一些输入验证操作,而在js问世之前,必须                    把表单数据发到服务器端用户才能得到反馈.如今的js不再局限于简单的数据验证,而且具备了与浏览器窗口及其内容等所有方面的交互能力,js已经发展成功能全面的面向客户端的编程语言.javascript由Netscape公司开发,原名Livescript,是为了迎合当时的java热,所

Laxcus大数据管理系统(2)- 第一章 基础概述 1.1 基于现状的一些思考

第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴技术和产业需求的推动下,对数据存储和计算要求也日益提高,并且对计算数据的准确性和精度也远高于互联网数据.而在这些现象的背后,当前的数据计算早已经突破MB量级,GB成为常态,TB变得流行,正在向PB迈进的时候,面对如此庞大的数据量,如果管理和使用它们,满足各种计算需求,发现和筛选其中有价值的信息,通常

c程序设计语言第一章5

练习1.20请编写程序d e t a b??将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止的地方.假设制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define TABBLANK 8//tab 增加的尺寸 4 int main() 5 { 6 int c; 7 int nb=0;//记录空格数目 8 int pos=1;//记录当前所在位置 9 whi

Java语言程序设计(基础篇)第一章

第一章 计算机.程序和Java概述 1.1引言 什么是程序设计呢? 程序设计就是创建(或者开发)软件,软件也称为程序. 1.2什么是计算机 计算机是存储和处理数据的电子设备,计算机包括硬件(hardware)和软件(software)两部分.