1 / 16

Multicore Computing Using Erlang

Art Gittleman California State University Long Beach artg@csulb.edu. Multicore Computing Using Erlang. Motivation. David Patterson – 2006 article The number of processors per chip is expected to double every two years

lave
Télécharger la présentation

Multicore Computing Using Erlang

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Art Gittleman California State University Long Beach artg@csulb.edu Multicore ComputingUsing Erlang

  2. Motivation • David Patterson – 2006 article • The number of processors per chip is expected to double every two years • Educating faculty to train students in concurrency is not a trivial problem

  3. Using Multiple Processors • Most languages • Shared memory – must protect against • simultaneous modification • Erlang • Asynchronous message passing • Create processes • Scheduler uses available processors

  4. Erlang • Functional programming language • Developed at Ericsson -1993 • Open Source, runs on Windows, Linux, Mac • Applications • Amazon SimpleDB • Facebook chat (70 million+ users)

  5. Teaching Erlang • Survey of Programming Languages • Five week module on functional programming • Used machines with two cores • Basic Erlang and some concurrency • Advanced Programming Languages • Ten-week unit • Used Beowulf cluster, 30 processors

  6. Erlang Intro • Binding variables • Uses pattern matching • X = 4. binds X to 4 • Y = X + 2. binds Y to 6 • X = 3. error – X bound to 4 • Z + 1 = Y. binds Z to 5

  7. Data Structures • Tuples – fixed size • X = {hat, cat, fat}. • {A, cat, fat} = X. binds A to hat • Lists – variable size • L = [3, 4, 5, 6]. • [X | Y] = L. binds X to 3, Y to [4,5,6]

  8. Functions • Recursive definition • -module(append). • -export([append/2]). • append([ ] , L) → L; • append([H | T], L) → [H | append(T, L).

  9. Concurrency Primitives • Create a process • Pid = spawn(Fun) % Fun executes • % in new process • Send a process a message • Pid ! Message • Receive a message • receive … end

  10. -module(times2). -export([run/1]). times2() -> % executed in a process receive {From, X} -> From ! 2*X, % send back ans times2() end. run(Num) → % run(10) returns 20 Pid = spawn(fun times2/0), % create Pid ! {self(), Num}, % send receive Result -> Result end.

  11. Three Assignments • 1. Write three recursive functions • Generate a list of squares of random numbers • Sum two lists, element by element • Count the number of items < 1 in a list • 2. Estimate pi. Send number of random trials to a process that computes pi and returns result. • 3. Estimate pi using four processes. Speedup shown with two-core machines

  12. Higher-Order Functions • Map • L = [1,2,3,4]. • lists:map(fun(X) → 2*X end, L). • % returns [2,4,6,8] • List-comprehension • [2*X || X ← L].

  13. Ten most frequent words • From Adam Turoff, Haskell article • Used text of Emma by Jane Austen • Develop simple functions to find the ten most frequent words • Read text as list, split into sublists of equal words, create sublists of [freq, word] pairs, reverse sort, return top ten. • Many functions such as 'sort' are provided.

  14. Strassen Matrix Multiplication • Recursive, more efficient than standard method • NxN matrix requires 7 N/2xN/2 multiplications • Used seven machines on a Beowulf cluster. Compare 14 processors to 1. Time in seconds • 256x256 512x512 1024x102414 | 1.5 10.0 65.7 • 1 | 14.4 102.5 720.1

  15. Conclusions • Erlang was easy to use for concurrency. • The programmer spawns processes and the scheduler uses available processors either on the same machine or distributed. • Erlang fits well in a programing languages course.

More Related