精华内容
下载资源
问答
  • 并行处理是一条语句

    2020-02-28 14:26:54
    前些时间用了一次并行处理,发现还是挺好用的,效率提高了不少,今天另外一个任务,也采用了并行处理,代码(vs2015 MFC工程)的写法如下: int m_tdcCount = 4; int m_threadIndex; void ATaskThread() { ...

    前些时间用了一次并行处理,发现还是挺好用的,效率提高了不少,今天另外一个任务,也采用了并行处理,代码(vs2015 MFC工程)的写法如下:

    
    int m_tdcCount = 4;
    int m_threadIndex;
    
    void ATaskThread()
    {
    	CString strText;
    	DWORD dwId;
    	int threadIndex;
    	{
    		autounlock();
    		threadIndex = m_threadIndex++;
    		dwId = GetCurrentThreadId();
    		strText.Format(TEXT("第%d个线程的ID号:%d = 0x%x.\n"), threadIndex, dwId, dwId);
    		OutputDebugString(strText);
    	}
        Sleep(5000);    // test only
    
        ... // 任务中的其它打印
        ... // my task process
    
        {
            autounlock();
            m_tdcCount--;
        }
    }
    
    void startMyTask()
    {
        CString strText;
        m_tdcCount = 4;
        m_threadIndex = 0;
    
    	strText.Format(TEXT("即将启动的处理线程数:%d.\n"), m_tdcCount);
    	OutputDebugString(strText);
    
    #pragma omp parallel num_threads(m_tdcCount)
    	ATaskThread();
    
    	// 等待结束,其实这里应该不需要,因为实际上是前面的任务结束后才会到这里来
    	OutputDebugString(TEXT("开始等待所有任务线程结束...\n"));
    	while (m_tdcCount > 0)
    		Sleep(100);
        
        ... // 收尾工作
    }
    

    入口为 startMyTask(),其中采用并行建立了4个实际的任务处理线程ATaskThread()。过程中,采用全局变量m_tdcCount对任务的生命期进行控制:在建立线程之前设置为4,即4个线程,一个任务线程一旦完成自己的任务,就对该变量减1,所以当该变量减到0时,就表明了全部任务的结束。但实际调试过程中和想像的有点出入,于是就在任务线程中添加了一个 Sleep(5000),使线程等待足够长的时间,预期的打印:

    即将启动的处理线程数:4.
    第0个线程的ID号:67376 = 0x10730.
    第1个线程的ID号:69524 = 0x10f94.
    第2个线程的ID号:68112 = 0x10a10.
    第3个线程的ID号:67736 = 0x10898.
    开始等待所有任务线程结束...
    <任务中的其它打印>

    或者是“开始等待所有任务线程结束...”可能往前提但位于第一行的后面,这样都算正常,比如下面的也是正常的:

    即将启动的处理线程数:4.
    第0个线程的ID号:67376 = 0x10730.
    开始等待所有任务线程结束...
    第1个线程的ID号:69524 = 0x10f94.
    第2个线程的ID号:68112 = 0x10a10.
    第3个线程的ID号:67736 = 0x10898.
    <任务中的其它打印>

    因为任务线程中有个Sleep(5000),所以任务中的打印肯定应该排在"开始等待所有任务线程结束..."一行之后,但实际上打印却是如下示的样子:

    即将启动的处理线程数:4.
    第0个线程的ID号:67376 = 0x10730.
    第1个线程的ID号:69524 = 0x10f94.
    第2个线程的ID号:68112 = 0x10a10.
    第3个线程的ID号:67736 = 0x10898.
    <任务中的其它打印>
    开始等待所有任务线程结束...

    即所有的任务都运行完了才到调用ATaskThread()之后的地方。这样看,用起来就方便了,不需要控制并行任务线程,把它当作一个普通的函数调用即可,不用害怕其后的语句和线程任务同时运行。

     

    展开全文
  • 在生信分析中,经常会遇到不同的重复和处理,这样的分析过程有时是非常费时且占用资源并不是很多的,可以同时在后台运行以节约时间,这是并行处理的意义。除了需要并行处理,循环迭代来遍历整个文件夹的需要分析的...

    在生信分析中,经常会遇到不同的重复和处理,这样的分析过程有时是非常费时且占用资源并不是很多的,可以同时在后台运行以节约时间,这是并行处理的意义。除了需要并行处理,循环迭代来遍历整个文件夹的需要分析的数据也是非常消耗精力和时间的,按照宁可花费机器一分钟绝不浪费程序员一秒钟的精神,我决定开始探索并行循环处理的应用。

     

    首先摆在我面前的是tab分割的按行分布的不同的采样策略,这样一个文件我们要进行分析的话就需要每次都迭代一下,这样非常费事,所以我们决定按行来拆分这样的文件,用到了split命令,见另述。拆分过后每个文件都是一行,这样对我们迭代就有利了。

     

    并行处理用到了一个非常简单的形式,如下面的代码:

    复制代码
    #!/bin/bash
    start=`date +%s` #定义脚本运行的开始时间
     
    for ((i=1;i<=1000;i++))
    do
    {
            sleep 1  #sleep 1用来模仿执行一条命令需要花费的时间(可以用真实命令来代替)
            echo 'success'$i; 
     }&              #用{}把循环体括起来,后加一个&符号,代表每次循环都把命令放入后台运行
                     #一旦放入后台,就意味着{}里面的命令交给操作系统的一个线程处理了
                     #循环了1000次,就有1000个&把任务放入后台,操作系统会并发1000个线程来处理
                     #这些任务         
    done    
    wait             #wait命令的意思是,等待(wait命令)上面的命令(放入后台的)都执行完毕了再
                     #往下执行。
                     #在这里写wait是因为,一条命令一旦被放入后台后,这条任务就交给了操作系统
                     #shell脚本会继续往下运行(也就是说:shell脚本里面一旦碰到&符号就只管把它
                     #前面的命令放入后台就算完成任务了,具体执行交给操作系统去做,脚本会继续
                     #往下执行),所以要在这个位置加上wait命令,等待操作系统执行完所有后台命令
    end=`date +%s`  #定义脚本运行的结束时间
     
    echo "TIME:`expr $end - $start`"
    复制代码
    重点在于在循环结构里引入{}和&来并发执行这些for循环的语句,从而达到并行计算的目的。

    以上代码引自:https://blog.csdn.net/dubendi/article/details/78931979

    展开全文
  • 并行处理

    2012-08-31 14:53:34
    并行处理 发表日期:2007-03-28作者:[转贴] 出处: -  要编写一个好的游戏,必需使用到并行机制。并行机制要涉及到一个重要的语句,那就是While语句。你可能不禁会问...
    并行处理
    发表日期:2007-03-28作者:[转贴] 出处:

    -

      要编写一个好的游戏,必需使用到并行机制。并行机制要涉及到一个重要的语句,那就是While语句。你可能不禁会问:那不就是循环吗?对,并行机制就是要利用循环,即游戏循环(Game Loop)。实际上,所有程序并行的本质就是循环,连Windows也不例外。Windows号称多任务操作系统,实际上,在一个时间内CPU只能执行一条指令。所谓多任务,不过是并行的假象而已。在一个循环中分别执行各程序的一条语句,由于执行完该循环速度极快,于是看起来好象是多个任务同时工作一样。还有...,哎,不用费口舌了。相信你对并行有了一个初步应像,这就可以了,让我们继续。
      不是有一种for循环吗,为什么不用它呢?对,for循环也可以。只要可以构成死循环的语句都可以。死循环呀,听起来有点可怕。其实解决死循环简单的很,用break语句,再不行用goto语句,一切死循环都轻松搞定。现在就让我们来练一下兵:

    main()
    {
    int key;
    while(1)
    {
    if(kbhit())
    {
    key=getch();
    if(key==0) { getch();continue; }
    if(key==27) break;
    if(key==13) printf("\n");/*支持回车*/
    if(key==8&&wherex()>0)
    {
    gotoxy(wherex()-1,wherey());/*支持退格*/
    putch(' ');
    }
    printf("%c",key);/*输出字符*/
    }
    }
    }

    上面就是一个典型的文本编辑器界面,现在让我们来修改一下该程序,在屏幕右上角做一个计时器和一个计算击键次数的计数器,该计时器与计数器与文本编辑互不干扰,达到并行的效果。

    main()
    {
    int key,x,y,n=0;
    clrscr();
    while(1)
    {
    if(kbhit())
    {
    key=getch();
    if(key==0) {getch();continue;}
    if(key==27) break;
    if(key==13) printf("\n");/*支持回车*/
    if(key==8&&wherex()>0)
    {
    gotoxy(wherex()-1,wherey());/*支持退格*/
    putch(' ');
    gotoxy(wherex()-1,wherey());
    continue;
    }
    printf("%c",key);/*输出字符*/
    n++;/*计数*/
    }
    x=wherex();y=wherey();
    gotoxy(55,1);
    printf(" %d sec,keydown times %d ",clock()/18,n);/*记时,显示*/
    gotoxy(x,y);
    }
    }


    现在我们实现了简单的并行机制。然而,该循环有个缺点:太耗CPU,如果不按下任何键,CPU也会不停地刷新计数与记时器。于是我们引入了周期的概念,使一个周期只执行一次语句,这样即节省CPU,使用要求执行速度不同的并行语句也容易控制。程序入下:

    /*并行结构*/
    #define delay_time 4; /*定义的周期长度*/
    main()
    {
    long now_time=0,old_time,time_count=0;
    char done=0; /*使用done标志使每一个周期只执行一次指令*/
    clrscr();
    old_time=clock();
    while(!kbhit())
    {
    now_time=clock();
    if(now_time-old_time<delay_time)
    {
    if(!done)
    {
    puts("计算!"); /*该语句可替换为自己需要并行的语句块*/
    done=1;
    }
    }
    else
    {
    old_time=now_time;done=0;
    }
    }
    }

    如果上面的puts语句换成两个沿对角线移动小球的语句,不就可以实现两个小球同时运动了吗?在程序中动态地调整delay_time的值,还可以确定小球移动的快慢。这只是一个提示,只要遵循该结构,还可以实现好多有趣的效果,读者可以自己去研究。

    展开全文
  • C语言设计并行处理

    千次阅读 2014-12-02 14:18:49
    并行机制要涉及到一个重要的语句,那就是While语句。你可能不禁会问:那不就是循环吗?对,并行机制就是要利用循环,即游戏循环(Game Loop)。实际上,所有程序并行的本质就是循环,连Windows也不例外。Windows号称...
    要编写一个好的游戏,必需使用到并行机制。并行机制要涉及到一个重要的语句,那就是While语句。你可能不禁会问:那不就是循环吗?对,并行机制就是要利用循环,即游戏循环(Game Loop)。实际上,所有程序并行的本质就是循环,连Windows也不例外。Windows号称多任务操作系统,实际上,在一个时间内CPU只能执行一条指令。所谓多任务,不过是并行的假象而已。在一个循环中分别执行各程序的一条语句,由于执行完该循环速度极快,于是看起来好象是多个任务同时工作一样。还有...,哎,不用费口舌了。相信你对并行有了一个初步应像,这就可以了,让我们继续。
      不是有一种for循环吗,为什么不用它呢?对,for循环也可以。只要可以构成死循环的语句都可以。死循环呀,听起来有点可怕。其实解决死循环简单的很,用break语句,再不行用goto语句,一切死循环都轻松搞定。现在就让我们来练一下兵:

    main()
    { int key;
     while(1)
     {if(kbhit())
      {key=getch();
      if(key==0){getch();continue;}
      if(key==27)break;
      if(key==13)printf("\n");/*支持回车*/
      if(key==8&&wherex()>0)
      {gotoxy(wherex()-1,wherey());/*支持退格*/
       putch(' ');
      }
      printf("%c",key);/*输出字符*/
      }
     }
    }


    上面就是一个典型的文本编辑器界面,现在让我们来修改一下该程序,在屏幕右上角做一个计时器和一个计算击键次数的计数器,该计时器与计数器与文本编辑互不干扰,达到并行的效果。

    main()
    { int key,x,y,n=0;
     clrscr();
     while(1)
     {if(kbhit())
      {key=getch();
      if(key==0){getch();continue;}
      if(key==27)break;
      if(key==13)printf("\n");/*支持回车*/
      if(key==8&&wherex()>0)
      {gotoxy(wherex()-1,wherey());/*支持退格*/
       putch(' ');
       gotoxy(wherex()-1,wherey());
       continue; 
      }
      printf("%c",key);/*输出字符*/
      n++;/*计数*/
      }
      x=wherex();y=wherey();
      gotoxy(55,1);
      printf(" %d sec,keydown times %d ",clock()/18,n);/*记时,显示*/
      gotoxy(x,y);
     }
    }

    现在我们实现了简单的并行机制。然而,该循环有个缺点:太耗CPU,假如不按下任何键,CPU也会不停地刷新计数与记时器。于是我们引入了周期的概念,使一个周期只执行一次语句,这样即节省CPU,使用要求执行速度不同的并行语句也轻易控制。程序入下:

    /*并行结构*/
    #define delay_time 4; /*定义的周期长度*/
    main()
    { long now_time=0,old_time,time_count=0;
     char done=0; /*使用done标志使每一个周期只执行一次指令*/
     clrscr();
     old_time=clock();
     while(!kbhit())
     {now_time=clock();
      if(now_time-old_time<delay_time)
      {if(!done)
      {puts("计算!"); /*该语句可替换为自己需要并行的语句块*/
       done=1;
      }
      }
      else
      {old_time=now_time;done=0;}
     }
    }

    假如上面的puts语句换成两个沿对角线移动小球的语句,不就可以实现两个小球同时运动了吗?在程序中动态地调整delay_time的值,还可以确定小球移动的快慢。这只是一个提示,只要遵循该结构,还可以实现好多有趣的效果,读者可以自己去研究

    展开全文
  • Parallel Processing 当执行一个 sql 语句时 , 缺省是用一个 cpu 来连续执行 , 不管有多少个...
  • MATLAB 并行处理 黄色 车牌检测

    千次阅读 2017-09-18 21:00:04
    MATLAB并行处理黄色车牌检测:从一堆车牌之中检测出黄色的车牌并将其复制到另外一个文件夹中。 这里面我为了加快算法的执行速度,将显示图片的语句注释掉了,在调试的时候取消注释,就可以直观的看到图片的处理过程...
  • verilog中关于并行处理的心得

    千次阅读 2016-08-02 14:34:06
    作为初学者,对硬件语言的并行和顺行处理搞不清楚,我也为此也费了不少功夫,解释起来也很简单,并行就是同时进行,顺行就是顺序进行,可是真要用起来,不花点功夫是不会用的。 先看个简单的,网上别人举得例子,...
  • OpenMP 并行处理测试

    2015-07-21 19:49:00
    OpenMP 并行处理测试 #pragmaomp parallelfor这条语句是用来指定后面的for循环语句变成并行执行的,将for循环里的语句变成并行执行后效率会不会提高呢?还是测试一 下吧,测试的时候,循环最好大一些,增加计算量...
  • 你是否有过这样的经历:自己写的功能耗时比较长,导致...说到优化,对于 WEB 程序来说,我们接触最多的应该是 “数据库层面“ 的优化,也就是 SQL 语句优化。一般能用到的优化方式有减少操作的数据量、避免复杂查...
  • 0 引 言 Yarn默认调度器为Capacity Scheduler(容量调度器),且默认只有一个队列——default。如果队列中执行第一个任务资源不够,就不会再执行...执行该语句,hive会初始化一个Spark Session,用以执行hive on spar
  • select语句是一种仅能用于通道发送和接收操作的专用语句 一条select语句的执行,会选择其中某一个分支执行。 select语句与switch语句类型,但选择分支的方法不同。 每个分支以关键字case开始。 每个case后只能是...
  • 1,确保创建索引 $HADOOP_HOME/bin/hadoopjar$HADOOP_HOME/lib/hadoop-lzo-0.4.10.jar ... 2 如果在hive中新建外部表的语句为 CREATE EXTERNAL TABLE fo...
  • 1,确保创建索引 $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/lib/hadoop-lzo-0.4.10.jar ... 2 如果在hive中新建外部表的语句为 CREATE EXTERNAL
  • 问题描述: ...ORA-12841: 无法变更事务处理中的会话并行 DML 状态   解决: 1、查找dml lock的锁的sid SQL> select session_id, owner,name,MODE_HELD fromsys.dba_dml_locks;   SESSION_ID
  • ORA-14411 该 DDL 不能与其他 DDL 并行运行处理办法 存在问题:在oracle数据库中执行alter table 添加字段操作时,一直卡住 在oracle数据库中执行alter table语句时,返回的是ORA-14411:该DDL不能与其他DDL...
  • 在事务性语句执行过程中,服务器将会进行额外的处理,在服务器执行时多个事务是并行执行的,为了把他们的记录在一起,需要引入事务缓存的概念。在事务完成被提交的时候一同刷新到二进制日志。对于非事务性语句处理...
  • Oracle 并行操作

    万次阅读 2016-04-22 12:22:53
    这 时提升性能的另一种方法就应运而生,也就是并行处理——同时利用多个 CPU进行工作。正统的理论界认为,企业的数据库有两种类型,OLTP 和 OLAP,前者用于业务处理,其 特点是大量的运行时间很短的事务型
  • linuxCPU: 8个Oracle Database: 10.2.0.3.0 接到开发组的一个调优请求,任务是对一张海量表 CS2_CT_MVMT(近 2亿多记录,表大小 ...42G),数据处理语句如下: UPDATE CS2_CT_MVMT CT SET CT.LAST_MOD_D
  • oracle 并行parallel

    千次阅读 2018-01-08 15:43:16
    一、并行(parallel) 当一个sql返回的结果集非常大时,可以开启并行机制。...并行处理的注意点:1、并行查询可以在查询语句,子查询语句中使用,但是不可以使用在一个远程引用的对象上(如DBLink)。 para
  • 在事务性语句执行过程中,服务器将会进行额外的处理,在服务器执行时多个事务是并行执行的,为了把他们的记录在一起,需要引入事务缓存的概念。在事务完成被提交的时候一同刷新到二进制日志。对于非事务性语句处理...
  • Oracle 并行查询

    万次阅读 2016-03-31 15:31:39
    所谓并行执行,是指能够将一个大型串行任务(任何DML,一般的DDL)物理的划分为叫多个小的部分,这些较小的部分可以同时得到处理。 何时使用并行执行: 1、必须有一个非常大的任务 2、必须有充足的资源(CPU,I...
  • 2 、依据上文找到 sid ,查询锁住的 sql 语句 SQL> select b.sql_text from v$session a,v$sqlarea b where a.sql_hash_value=b.hash_value and a.sid='126'; SQL_TEXT --------------------------------...
  • 为此,GaussDB(DWS)开发了并行计算技术,在语句执行时可以充分利用硬件资源进行并行加速,提高执行的吞吐率。本文将详细介绍GaussDB(DWS)并行计算技术的原理,以及其在performance信息中的展示,帮
  • oracle 并行学习 (四)

    2010-05-25 13:10:30
    并行DDL语句   并行DDL语句支持表和索引。下面是有代表性的可以被并行化的操作:   CREATE TABLE AS SELECT (CTAS) 语句...通常,那些可以利用并行处理的DDL语句可以通过提供PARALLEL子句来指定是否使用并行处...
  • 恰当合理、有选择的对一些SQL语句进行并行处理,可以有针对性的提升系统一些关键业务场景的执行效率。但是,另一方面,如果使用并行过多过滥,甚至处处并行,那么可能引起服务器整体过载的现象。 那么,我们如何...
  • 赋值语句与条件语句

    2021-01-18 22:35:52
    一、阻塞赋值 阻塞赋值与C语言中赋值方法和分析方法一模一样...if语句对表达式的值做判断时,若为0、x或z则按假处理;若为1则为真。 case语句位宽必须相等,‘bx表示32位; casez表示比较时不考虑高阻值; casex表示不
  • process语句

    2015-10-24 23:36:58
    processprocess可以被用来初始化信号和对于敏感信号做出反应对于一个Architecture之中的子模块和语句块之间都是并行处理的,但是在process之中的语句是顺序处理的1.初始化信号process begin a ; v ; ... wait; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 433
精华内容 173
关键字:

并行处理语句