首页 > 编程语言 >(五)Julia并行算法简介:矩阵乘法

(五)Julia并行算法简介:矩阵乘法

时间:2023-10-16 22:12:41浏览次数:35  
标签:node 并行算法 communication 矩阵 Julia 算法 CPU 乘法

在本章中,我们将开始学习一系列专门讨论几种分布算法的设计、分析和实现的会议。这些算法经过精心挑选,以说明分布式内存方法的算法并行化的不同方面和潜在陷阱。本系列的第一部分研究矩阵乘法。

学习目标

在学习完本章节后,我们应该能够:

  • 在多个处理器上并行执行矩阵乘法
  • 通过复杂度分析和运行代码来研究不同并行化策略的性能
  • 在Julia中实施这些策略
  • 了解粒度对分布式算法效率的影响(grain size)
  • 了解通信开销的概念(communication overhead)

 

Parallel algorithm overview

Goal: Design method for developing efficient parallel algorithms that have little communication overhead, load imbalance and search overhead.

We should be able to apply this method to simple cases.

Introduction

我们假定非常简单的computer model,Distributed-memory machine:

  • All machines are equally fast
  • E.g., identical workstations on a network
  • We use 1 computation per machine and ignore multicores
  • CPU, processor, machine, processing node mean the same

 

5 parallel algorithms of increasing complexity:

  • Matrix multiplication
  • Successive overrelaxation
  • All-pairs shortest paths
  • Linear equations
  • Traveling Salesperson problem

We use Message Passing

SEND (destination, message)

- non-blocking: continue immediately (like a mailbox),信息发送是reliable的,当信息发送出去之后,在未来的某一个时刻一定会发出被接收。

RECEIVE (source, message)

RECEIVE-FROM-ANY (message)

我们使用类似C语法的伪代码,因为实际运行中我们会有很大的array,分区在不同的机器上,所以我们应该可以自己定义array的index。

所有C中的元素都是independent的,因此可以并行计算。

第一种是每个元素的计算都是并行的,我们需要确定每个CPU的input是什么,这被称为data dependency。如果每个CPU都需要整个A和整个B矩阵,那就会做太多的necessary communication。

每个CPU只需要A的一行和B的一列来计算C中的一个元素。

首先我们有一个总体的coordinator来存储所有的initial data,即central computer,这被称为head node。然后我们allocate一些compute node。Head node给所有compute node发送A的一行和B的一列,然后计算出结果后发送回head node。

offload:卸下

我们应该思考一种更好的并行算法,这就引出了第二种算法:

Computation的复杂度变为O(N^2),communication的也变为O(N^2)。

 

标签:node,并行算法,communication,矩阵,Julia,算法,CPU,乘法
From: https://www.cnblogs.com/lbwBH/p/17768497.html

相关文章

  • 高精度乘法
    一、算法描述高精度加减法讨论的是两个大整数之间的运算。而这里高精度乘除法讨论的是一个大整数和一个小整数之间的关系。算法思路:还是模拟小学的乘法列竖式,只不过此时不太一样,原本的列竖式是一位一位的乘,这里需要改变一下思路。这里直接把小整数当成一个数,所乘的数直接......
  • Julia中的异步编程
    在本章中,我们将学习Julia异步编程的基础知识,我们将了解:taskschannelsTasks创建任务从技术上讲,Julia中的任务是symmetricco-routine(对称协同例程)。更通俗地说,task是一项计算工作,可以在将来的某个时刻开始安排,并且可以中断和恢复。要创建任务,我们首先需要创建一个函数来表示......
  • Julia基础知识
    在本章中,我们将学习并行计算所需的Julia基本部分:变量函数数组在Julia中使用jupyter笔记本,运行单元格可以使用shift+enter,也可以使用运行按钮。 运行第一个单元格可以看到,显示了最后一行的值,我们可以用分号抑制输出,尝试执行第二个单元格,可以发现没有输出。单元格的顺......
  • Julia入门
    本次并行计算课程将使用Julia编程语言,与高性能计算HPC相关的课程通常使用C、C++或者Fortran语言,Julia是一种较为新的编程语言,专为科学计算而设计。它将类似python等解释用语言的高级语法与C等编译语言的性能相结合。因此,Julia允许我们使用在教学环境中方便的语法编写高效的并行算......
  • 整数乘法算式
     a,b=map(eval,input().split())#a=int(input())#b=int(input())v=a+bprint(f"{v:.2f}")print('%.2f'%v)       华氏温度Description输入一个华氏温度,输出摄氏温度。公式为:�=59⋅(�−32)c=95​⋅(F−32)。Input一个......
  • 乘法逆元
    推荐视频:模意义下的乘法逆元特点:除以一个数取模等于乘以这个数的逆元取模:a/n%mod==a*n^(mod-2)%mod(费马小定理)1.费马小定理前提:p为质数n的逆元等于n^(p-2)点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineLLlonglongconstintmod=998244353;int......
  • 算法:九九乘法表(JS)
    九九乘法表1functioncreateMultiplicationTable(){2lettable='';//创建一个空字符串用于存储乘法表3for(leti=1;i<=9;i++){//外层循环控制行数,从1到94for(letj=1;j<=i;j++){//内层循环控制每行的列数,从1到当前行数i......
  • Julia的变量和数据类型
    变量Julia作为动态语言,它的变量可以随时被定义为任意类型。变量名命名规则变量名需以字母或者下划线开头变量名区分大小写类名要使用大驼峰命名法函数名和宏名使用全小写修改参数的函数结尾使用叹号!此外还可以使用Unicode字符来命名,这其中就包括各国文字,例如中文、希......
  • 矩阵的乘法运算与css的3d变换(transform)
    theme:qklhk-chocolate引言:你有没好奇过,在一个使用了transform变换的元素上使用window.getComputedStyle(htmlElement)['transform']查询出来的值代表什么?为什么硬件加速要使用transform,以及为什么硬件加速会快?小科普:关于矩阵的乘法 以两个二阶齐次矩阵相乘为例 [......
  • 矩阵成真!Pytorch最新工具mm,3D可视化矩阵乘法、Transformer注意力
    前言 Pytorch团队推出的最新3D可视化最新工具mm,能够将矩阵乘法模拟世界还原。本文转载自新智元仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全教程整理【C......