´ñ±Û : 7 °³
Çѱ¹ µ¨ÆÄÀÌ µ¿È£È¸ µ¨¸¶´ç
»çÀÌ»çÀÌ
(¹®È£»ó)
 
XE7Àΰ¡ºÎÅÍ Áö¿øÇϴ Parallel Programming Library (PPL)¿¡ °ü¶õ Ã¥À̱º¿ä. Ã·¿¡´Â º´·ÄÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ÀÌÇظ¦, ³ªÁß¿£ µ¨ÆÄÀÌ ¶óÀ̺귯¸®(Threading.pas)¿Í OMNI ¿ÀǼҽº¿¡ ´ëÇؼ­ ¼³¸íµµ ÀÖ°í.
º´·ÄÇÁ·Î±×·¡¹Ö¿¡ °ü½ÉÀÖÀ¸¸é ¸Å¿ì ÁÁÀºÃ¥À̰ڳ׿ä.
¿µ¾î°¡ µþ¸°´Ù´Â°Ô ¾Æ½±³×¿ä ¤Ð¤Ð 
2019-05-13 ¿ÀÈÄ 8:00:20
coding
(±Ç¼øÈ£)
 
GPU ÀÌ¿ëÇÑ º´·Ä󸮰¡ ¾Æ´Ñ, ¾²·¹µå ÀÌ¿ëÇÑ PPLÀº ÇÑ°è°¡ ÀÖ´Ù´Â.

C#µµ ±í°Ô µé¾î°¡¸é ÆĽºÄ® º¸´Ù °øºÎÇؾߠÇÒ°Ô ´õ ¸¹¾Æ¿ä.

ȸ»ç¿¡¼­ C# ¾²°í Àִٸ頾²·¹µå ÀÌ¿ëÇÑ ÆĽºÄ® PPL¿¡ °ü½É °®´Â °Í
º¸´Ù´Â C# ¿ÉƼ¸¶ÀÌ¡¿¡ ´ëÇؼ­ ±íÀÌÀÖ°Ô °øºÎÇϴ°Ô. ¤»¤» 
2019-05-14 ¿ÀÀü 11:59:53
ÈÄ·¹ÀÌÅ©¾çÆÄ
(À¯Á¾È­)
 
@»çÀÌ»çÀÌ Àú´Â Çش砺о߸¦ Àß ¸ô¶ó¼­ Çϴ ¸»À̱â´Â ÇÕ´Ï´Ù¸¸.. µ¨ÆÄÀ̷Πº´·Ä¿¬»ê ÇÁ·Î±×·¡¹ÖÀ» ÇؾßÇÒ ÀϵéÀÌ ²Ï ÀÖ³ª¿ä? ¶Ç´Â ±×¿¡ µû¸£´Â ¿ä±¸µîÀÌ ÀÖ³ª °©Àڱ⠱ñÝÇϳ׿ä.

´ëºÎºÐÀº MPI ¸¦ ÀÌ¿ëÇؼ­ c ¶Ç´Â fortran À¸·Î multicore/cluster ¿¬»êÀ» ÁøÇàÇÒÅÙµ¥.. ±×·± °æ¿ì¶ó¸é µ¨ÆÄÀ̴ UI Á¤µµ¿Ü¿¡´Â c ·Î ÀÛ¾÷µÈ ºÎºÐÀ» ºÒ·¯´Ù ¾²´Â Á¤µµ¿©µµ ÃæºÐÇÏÁö ¾ÊÀ»±î ½Í±â´Â Çؼ­¿ä. 
2019-05-17 ¿ÀÈÄ 1:14:28
???????
(¹®È£»ó)
 
@?????
???? ????????? ???¨¨????? ???? ???????.

?????? ????????? ??????? PPL????‚ö???? ??????? ????????
??????? 
 - ???????? ?????? ??????? ??? ????????? ??o?????
 - ???? ?????? ??????? Return???? ??????? ??o?????

????? ??Äî?? PPL ????‚ö???? ?????? ???? ????.
??? ????? ???? ??????? ?????????.

??????? ??? ???? ?•U 2???¨¨? "??????"?? alert????

var
  LWork1, LWork2, LWork3: TProc;
  LTask: ITask;
begin
  LWork1:= procedure begin Sleep(1000) end;
  LWork2:= procedure begin Sleep(2000) end;
  LWork3:= procedure begin end;
  LTask:= TParallel.Join([LWork1, LWork2, LWork3]);
  LTask.Wait;

  ShowMessage('??????');
end;


????? ??? ???? 5???? ?????? ???? ????? showmessage????
procedure TForm2.Button2Click(Sender: TObject);
var
  LRun: TProc;
begin
  LRun:= procedure
  var
    LList: TList<ITask>;
    LNewFutureAndStarter: TFunc<TFunc<Integer>,IFuture<Integer>>;

    LFuture: IFuture<Integer>;
    LMaxValue: Integer;
  begin
    LList:= TList<ITask>.Create;
    // fure???? ?? ???? ???????
    LNewFutureAndStarter:= function(AWorker: TFunc<Integer>):IFuture<Integer>
    begin
      Result:= TTask.Future<Integer>(AWorker);
      Result.Start;
      LList.Add(Result);
    end;

    // 5???? ???? ???? ?? ????
    for var i:=1 to 5 do begin
      LNewFutureAndStarter(function:Integer
      begin
        Result:= Random(1000);

        Sleep(i*1000);
      end);
    end;



    // ??? ?????????? ???
    TTask.WaitForAll(LList.ToArray);

    LMaxValue:= 0;
    for var i in LList do begin
      LFuture:= IFuture<Integer>(i);
      LMaxValue:= Max(LMaxValue, LFuture.Value);
    end;

    LList.Free;

    // showmessage
    TThread.Synchronize(nil, procedure
    begin
      ShowMessage(LMaxValue.ToString);
    end);
  end;

  TThread.CreateAnonymousThread(LRun).Start;
end; 
2019-05-17 ¿ÀÈÄ 6:49:30
»çÀÌ»çÀÌ
(¹®È£»ó)
 
@À¯Á¾È­
Àúµµ ¾÷¹«¼º°Ý»ó º´·Ä¿¬»êÇÒ °æ¿ì´Â ¾ø½À´Ï´Ù.

ÇÏÁö¸¸ µ¨ÆÄÀÌ¿¡¼­ Á¦°øÇϴ PPL¶óÀ̺귯¸®´Â ¾µ¸¸ÇÑ°Ô ¸¹´õ±º¿ä
¿¹¸¦µé¾î 
 - ¿©·¯°³ÀÇ ¾²·¹µå°¡ ½ÇÇà½ÃÄÑ ¸ðµÎ ³¡³ª°í³ª¼­ ÈÄó¸®ÇÒ¶§
 - ¿©·¯ ¾²·¹µå¸¦ ½ÇÇà½ÃÄÑ Return°ªÀ» ÃëÇÕÇؼ­ ÈÄó¸®ÇÒ¶§

ÀÌ·¯ÇÑ °æ¿ì¿¡µµ PPL ¶óÀ̺귯¸®´Â µµ¿òÀÌ ¸¹ÀÌ µË´Ï´Ù.
Äڵ堸îÁٷΠÀ§ÀÇ ÄÉÀ̽º°¡ °¡´ÉÇϰŵç¿ä.

¿¹¸¦µé¾î ¾Æ·¡ ÄÚµå´Â ´ë·« 2ÃÊÈÄ¿¡ "ÀÛ¾÷¿Ï·á"°¡ alertµË´Ï´Ù

var
  LWork1, LWork2, LWork3: TProc;
  LTask: ITask;
begin
  LWork1:= procedure begin Sleep(1000) end;
  LWork2:= procedure begin Sleep(2000) end;
  LWork3:= procedure begin end;
  LTask:= TParallel.Join([LWork1, LWork2, LWork3]);
  LTask.Wait;

  ShowMessage('ÀÛ¾÷¿Ï·á');
end;


±×¸®°í ¾Æ·¡ ÄÚµå´Â 5°³ÀǠŸ½ºÅ©Áß °¡Àå Å«°ªÀ» showmessageÇÕ´Ï´Ù
procedure TForm2.Button2Click(Sender: TObject);
var
  LRun: TProc;
begin
  LRun:= procedure
  var
    LList: TList<ITask>;
    LNewFutureAndStarter: TFunc<TFunc<Integer>,IFuture<Integer>>;

    LFuture: IFuture<Integer>;
    LMaxValue: Integer;
  begin
    LList:= TList<ITask>.Create;
    // fure»ý¼º ¹× ½ÇÇà Á¤ÀÇÇÔ¼ö
    LNewFutureAndStarter:= function(AWorker: TFunc<Integer>):IFuture<Integer>
    begin
      Result:= TTask.Future<Integer>(AWorker);
      Result.Start;
      LList.Add(Result);
    end;

    // 5°³ÀǠŸ½ºÅ© »ý¼º ¹× ½ÇÇà
    for var i:=1 to 5 do begin
      LNewFutureAndStarter(function:Integer
      begin
        Result:= Random(1000);

        Sleep(i*1000);
      end);
    end;



    // ¸ðµÎ Á¾·áµÉ¶§±îÁö ´ë±â
    TTask.WaitForAll(LList.ToArray);

    LMaxValue:= 0;
    for var i in LList do begin
      LFuture:= IFuture<Integer>(i);
      LMaxValue:= Max(LMaxValue, LFuture.Value);
    end;

    LList.Free;

    // showmessage
    TThread.Synchronize(nil, procedure
    begin
      ShowMessage(LMaxValue.ToString);
    end);
  end;

  TThread.CreateAnonymousThread(LRun).Start;
end; 
2019-05-17 ¿ÀÈÄ 6:50:05
»çÀÌ»çÀÌ
(¹®È£»ó)
 
°£´ÜÇÑ Äڵ常À¸·Î ¹ø°Å·Ó´ø º´·ÄÀÛ¾÷ÀÌ 
°£´ÜÇÏ°Ô ÇØ°áµÇ¾ú½À´Ï´Ù.

ÀÌ°Å Çϳª¸¸À¸·Î XE7ÀÌ»óÀ¸·Î ¹öÀü¾÷ÇÒ ÀÌÀ¯°¡ Àִ°͠°°½À´Ï´Ù.
¾Æ´Ô Omni¶óÀ̺귯¸®¸¦ »ç¿ëÇϼŵµ µÉ°Í °°³×¿ä 
2019-05-17 ¿ÀÈÄ 6:52:34
ÈÄ·¹ÀÌÅ©¾çÆÄ
(À¯Á¾È­)
 
@»çÀÌ»çÀÌ ¾ÆÇÏ.... Çϱä.. º´·Ä󸮶ó´Â°Ô ±»ÀÌ ¸Ó½Å with ¸Ó½Å À¸·Î »ý°¢ÇÒ ÇÊ¿ä´Â ¾ø´Â°Å³×¿ä. ¿¹Á¦·Î º¸¿©ÁֽŠÄÚµå·Î ÃæºÐÈ÷ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ»µí ÇÕ´Ï´Ù. »ý°¢º¸´Ù ¹ø°Å·Î¿òÀÌ ÁÙ¾îµå³×¿ä ¤¾¤¾¤¾ 
2019-06-13 ¿ÀÀü 10:50:19