线程与进程(C)
我制作了3个不同版本的程序。这个程序将矩阵相乘线程与进程(C),c,linux,multithreading,time,process,C,Linux,Multithreading,Time,Process,我制作了3个不同版本的程序。这个程序将矩阵相乘 第一个版本按顺序执行 第二个将第一个矩阵除以2,并创建两个进程来相乘 第三个版本与(2)相同,但使用线程 我用非常大的矩阵来测试这个,我有两个CPU 我用“时间”来测试时间: 1. real: 5.6s / user: 5.2s / sys: 0.4s 2. real: 2.9s / user: 2.5s / sys: 0.4s 3. real: 2.7s / user: 4.2s / sys: 1.0s “实时”正是我所期待的。但是,我有两
1. real: 5.6s / user: 5.2s / sys: 0.4s
2. real: 2.9s / user: 2.5s / sys: 0.4s
3. real: 2.7s / user: 4.2s / sys: 1.0s
“实时”正是我所期待的。但是,我有两个问题:
显然,您的
time
命令版本理解多核处理器上的线程。每个线程(在自己的核心上运行)需要2.1个用户秒和0.5个sys秒,这将为您提供2.6个实秒。同样的事情在第二个版本中不会发生,因为time
没有考虑第二个进程。“知道进程创建比线程创建要长…”-创建时间非常短。这不是一个因素。如何重新组合(2)和(3)中单独乘法的结果?您只是在适当地测量打印结果的I/O时间吗?我在(2)中使用了pipe(),在(3)中使用了一个全局矩阵数组(这对两个线程都是全局的)。此外,没有I/O。我有一个函数可以随机化矩阵。我只需设置每个矩阵的行数,程序就会生成它们。显然,您的time
命令版本理解多核处理器上的线程。每个线程(在自己的核心上运行)需要2.1个用户秒和0.5个sys秒,这将为您提供2.6个实秒。同样的事情在第二个版本中不会发生,因为time
没有考虑第二个进程。“知道进程创建比线程创建要长…”-创建时间非常短。这不是一个因素。如何重新组合(2)和(3)中单独乘法的结果?您只是在适当地测量打印结果的I/O时间吗?我在(2)中使用了pipe(),在(3)中使用了一个全局矩阵数组(这对两个线程都是全局的)。此外,没有I/O。我有一个函数可以随机化矩阵。我只需设置每个矩阵的行数,程序就会生成它们。也没有输出,只是乘法运算。