小编cog*_*ita的帖子

在我的情况下,为什么多线程比顺序编程慢?

我是多线程的新手,并尝试通过一个简单的程序来学习它,它将n加1并返回总和.在连续的情况下,对n = 1e5和2e5 main调用该sumFrom1函数两次; 在多线程情况下,使用两个线程创建,pthread_create并在单独的线程中计算两个和.多线程版本比顺序版本慢得多(参见下面的结果).我在12-CPU平台上运行它,线程之间没有通信.

多线程:

Thread 1 returns: 0 
Thread 2 returns: 0 
sum of 1..10000: 50005000
sum of 1..20000: 200010000
time: 156 seconds
Run Code Online (Sandbox Code Playgroud)

顺序:

sum of 1..10000: 50005000
sum of 1..20000: 200010000
time: 56 seconds
Run Code Online (Sandbox Code Playgroud)

当我在编译中添加-O2时,多线程版本(9s)的时间小于顺序版本(11s)的时间,但不如我预期的那么多.我总是可以打开-O2标志,但我对未经优化的情况下多线程的低速感到好奇.它应该比顺序版慢吗?如果没有,我该怎么做才能让它更快?

代码:

#include <stdio.h>
#include <pthread.h>
#include <time.h>

typedef struct my_struct
{
  int n;                                                                                                                                                              
  int sum;                                                                                                                                                            
}my_struct_t;                                                                                                                                                         

void *sumFrom1(void* sit)                                                                                                                                              
{                                                                                                                                                                     
  my_struct_t* local_sit = (my_struct_t*) sit;                                                                                                                          
  int i;                                                                                                                                                              
  int nsim = 500000;  // Loops …
Run Code Online (Sandbox Code Playgroud)

c performance multithreading gcc pthreads

6
推荐指数
1
解决办法
1719
查看次数

在R中复制矩阵的行

假设我有一个矩阵m和一个正整数向量v,我想要做的是得到一个新的矩阵,m_new并且m(比如说m[i, ])的每一行都被复制了v[i]几次m_new.例如:

m = matrix(1:6, nrow = 3)
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
v = c(3, 1, 2)
Run Code Online (Sandbox Code Playgroud)

m_new应该是:

     [,1] [,2]
[1,]    1    4  # m[1, ] is replicated by
[2,]    1    4  # v[1] = 3
[3,]    1    4  # times
[4,]    2    5   
[5,]    3    6  
[6,]    3    6  
Run Code Online (Sandbox Code Playgroud)

一个for循环将使它适用于小案例: …

r matrix

3
推荐指数
1
解决办法
8668
查看次数

标签 统计

c ×1

gcc ×1

matrix ×1

multithreading ×1

performance ×1

pthreads ×1

r ×1