11
SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ WWW.THEDELPHIGEEK.COM, @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG Intro music: Nothing is Permanent by Deathmøle, http://deathmole.bandcamp.com

SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

Embed Size (px)

Citation preview

Page 1: SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY

PRIMOŽ GABRIJELČIČ

WWW.THEDELPHIGEEK.COM, @THEDELPHIGEEK, SKYPE: GABR42

HTTP://PRIMOZ.GABRIJELCIC.ORG

Intro music: Nothing is Permanent by Deathmøle, http://deathmole.bandcamp.com

Page 2: SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

PARALLEL PROGRAMMINGTHE ART OF DOING MULTIPLE

THINGS AT THE SAME TIME

Page 3: SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

WHY?

CPUs are not getting any faster

They just contain more and more parallel cores

Page 4: SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

WHEN?

Slow background process

Background communication

Executing synchronous API

Multicore data processing

Multiple clients

Page 5: SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

THREAD VS. TASK

Task is part of code that has to be executed Thread is the execution environment

.NET – Task Parallel Library Delphi – Parallel Programming Library (XE7) Delphi – OmniThreadLibrary (2007)

Page 6: SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

PATTERN APPROACH

Working with building blocks

.NET – foreach, Dataflow

C# – async

Delphi PPL (XE7) – Future, For, Join

Delphi OTL (2009) – Async, Future, Join, For, Pipeline …

Page 7: SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

ASYNC/AWAIT DEMO

Page 8: SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

JUST SAY NO!

Never, never, never access UI from a background thread!

NEVER!

Page 9: SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

ASYNC/AWAIT

Async(some_code // executed in a background thread

).Await(other_code // executed in a main thread

)

Page 10: SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

PARALLEL PATTERNS

Async/Await Async Future ForEach / For Join Parallel task Pipeline Background worker Fork/Join Map

Page 11: SIMPLE PARALLEL PROGRAMMING WITH PATTERNS AND OMNITHREADLIBRARY PRIMOŽ GABRIJELČIČ , @THEDELPHIGEEK, SKYPE: GABR42 HTTP://PRIMOZ.GABRIJELCIC.ORG

PROJECT STATUS

http://www.omnithreadlibrary.com

Google+ community OmniThreadLibrary

StackOverflow [omnithreadlibrary]

http://www.thedelphigeek.com

http://primoz.gabrijelcic.org

Twitter: @thedelphigeekSkype: gabr42