»çÀÌ»çÀÌ (¹®È£»ó)
|
|
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
|
|
|