基础小白快速入门并行计算------>我们为什么要学习并行计算

什么是并行计算?

随着计算机的不断发展,我们处理的数据不断变多,需要更大得到处理能力、我们希望计算机有着更大更强壮的计算能力,由于cpu的运行能力有限,我们便想到了将多个cpu进行串联计算问题,这也就是我们要讲的并行计算

并行计算的思想:

用多个处理器来协同求解同一问题,将被求解的问题分成若干个成分,各部分均由一个独立的吃立即来进行并行计算

并行计算的含义

     并行计算是相对于串行计算来说的

     并行计算是指同时使用多种计算资源解决问题的过程

     并行计算是提高计算机系统计算速度和处理能力的有效手段

并行计算的研究内容:


并行,并发,分布式:

并发:其实是多个进程在同一段时间内执行这三个均在系统中同时存在多个执行

并行:多个线程在同一时刻,一定要是时刻,才叫并行内执行

分布式:多个进程在多个网络的处理器上执行

为什么要进行并行计算?

气象建模,蛋白质折叠,药物研发,能源研究

数据分析

什么是单核?


在计算机科学中,“单核”指的是单核处理器,即具有单个处理核心的中央处理单元(CPU)。在多核处理器普及之前,大多数计算机都使用单核CPU。
 

什么是多核?

多核处理器:


多核处理器包含两个或更多个独立的处理核心。
每个核心都可以独立地执行程序指令和处理数据,这意味着多核处理器可以同时处理多个任务或线程。
多核处理器在执行多任务、多线程应用程序时具有显著优势,因为它们可以将工作负载分配给不同的核心,从而提高整体性能和效率。
多核处理器更适合现代的多用户、多任务操作系统,以及需要大量计算资源的应用程序,如视频编辑、3D渲染、科学模拟和大数据分析等。


如何进行并行计算?

这就牵扯到了算法

举例:

下面是一个简单的Python代码示例,展示了如何在单个Python进程中使用多线程来实现并行计算。这个例子中,我们创建了一个函数`calculate_square`,它计算一个数的平方,然后我们创建了多个线程来同时计算多个数的平方。
`

 

import threading

# 定义一个函数,用于计算数的平方
def calculate_square(number):
    return number * number

# 创建一个列表,包含一些需要计算平方的数字
numbers = [1, 2, 3, 4, 5]

# 创建一个线程列表,用于存储我们的线程
threads = []

# 创建和启动线程
for number in numbers:
    thread = threading.Thread(target=calculate_square, args=(number,))
    threads.append(thread)
    thread.start()

# 等待所有线程完成
for thread in threads:
    thread.join()

# 输出结果
results = []
for thread in threads:
    result = thread.get_result()  # 假设Thread类有一个get_result方法来获取结果
    results.append(result)

print(results)

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,关于求π的并行实现,我可以提供以下思路: 1. 划分任务:将π的计算任务划分为多个子任务,每个子任务计算一部分π的值。 2. 分配任务:将子任务分配给不同的线程或进程并发执行。 3. 同步结果:等待所有线程或进程执行完毕后,将它们计算出的π的值合并起来得到最终结果。 以下是一种基于Java的并行实现: ``` import java.util.concurrent.*; public class ParallelPi { public static void main(String[] args) throws InterruptedException, ExecutionException { int numThreads = 4; // 设定线程数 int numSteps = 100000000; // 计算π的步数 double step = 1.0 / numSteps; // 步长 ExecutorService executor = Executors.newFixedThreadPool(numThreads); // 创建线程池 Future<Double>[] futures = new Future[numThreads]; // 创建Future数组 for (int i = 0; i < numThreads; i++) { int start = i * numSteps / numThreads; int end = (i + 1) * numSteps / numThreads; Callable<Double> task = new PiCalculator(start, end, step); // 创建任务 futures[i] = executor.submit(task); // 提交任务 } double sum = 0.0; for (int i = 0; i < numThreads; i++) { sum += futures[i].get(); // 合并结果 } double pi = step * sum * 4.0; System.out.println("π ≈ " + pi); executor.shutdown(); // 关闭线程池 } } class PiCalculator implements Callable<Double> { private final int start; private final int end; private final double step; public PiCalculator(int start, int end, double step) { this.start = start; this.end = end; this.step = step; } @Override public Double call() throws Exception { double sum = 0.0; for (int i = start; i < end; i++) { double x = (i + 0.5) * step; sum += 1.0 / (1.0 + x * x); } return sum; } } ``` 以上代码中,我们使用了Java的Executor框架,将π的计算任务划分为多个子任务,并发执行,最后将结果合并得到最终的π值。此外,为了提高计算精度,我们使用了莱布尼茨级数公式计算π的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jing静~

ლ(°◕‵ƹ′◕ლ)让我一键努

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值