HackerTube
HomeLongsLikedHistoryWatch laterCategoriesPlaylistsSettings

Four Solutions to a Trivial Problem - Guy Steele Jr.

Google TechTalks4 HN recommenders · recommended in 4 months, 2017-2023
YouTube
36K views · 10 years ago · talk · evergreen

Guy Steele presents a small geometric problem and compares four computational approaches: a classic sequential solution and three parallel-friendly ones. Each is illustrated pictorially and with working code, weighing total work against time to solution.

HN points to it as a clear lesson that algebraic properties like associativity unlock parallelism, applicable in any language.

Algorithms & data structuresFunctional programming#parallelism#associativity#functionalprogramming#guysteele#algorithms

7 comments from Hacker News

@MathMonkeyMan2023 · in “Coroutines for Go”

Guy Steele Jr. worked on a language called "Fortress." There are a few good talks that he gives: - (toy problem) ▶ this video - (parallelism) link - (languages) link

RecommendsView on HN
@heleninboodler2022 · in “Someone is pretending to be me”

This type of interviewing style is bullshit. It means the interviewer knows a better solution that is "clever" and expects you to either have the same cleverness epiphany on the spot or to have studied this question. Neither is actually very useful as a hiring criterion. Guy Steele gave an incredibly interesting guest talk[1] at google about four different ways to solve this exact problem, and the fact that it's an interesting enough topic for an hour long google talk should probably be a clue that you shouldn't be expected to invent the best solution on the whiteboard in 40 minutes. [1] ▶ this video

RecommendsView on HN
@raphlinus2022 · in “Mastering Dyalog APL (2009) [pdf]”

I think APL has a lot to teach us about parallel (specifically GPU) programming. I've rewatched a few talks with Aaron Hsu and listened to his arraycast podcast[1]. In researching an upcoming blog post on monoids, I tried implementing the problem in Guy Steele's "Four Solutions to a Trivial Problem" talk[2] in APL (actually I tried GNU APL for this, because I didn't need anything fancy). This is what I came up with: +/((⌽⌈\⌽a)⌊⌈\a)-a That in turn should be fully parallelizable and run fast on the GPU, as it's based on a couple scan (generalized prefix sum) operations. There's a considerable amount of DNA from APL in modern compiler-based machine learning frameworks, mostly by way of numpy. Dr. Hsu makes a good case that APL has quite a bit of power which is considerably diluted in later spins such as numpy. I'm especially fond of the power (⍣) operator[3], which represents parallel iteration and I think can often be translated to a per-thread while or for loop in a compute shader. I don't believe numpy has anything quite like that (but feel free to correct me!). [1]: link [2]: ▶ this video [3]: link

CitesView on HN
@tkf2020 · in “A quick introduction to data parallelism in Julia”

Hi, the author here. One of the hidden messages of the introduction is: watch Guy Steele's talks [1][2][3] if you are interested in data parallelism! These talks are not Julia-specific and the idea is applicable and very useful in any languages. My libraries are heavily inspired by these talks. Of course, if you haven't used Julia yet, it'd be great if (data) parallelism gives you an excuse to try it out! It has a fantastic foundation for composable multi-threaded parallelism [4]. [1] How to Think about Parallel Programming: Not! link [2] Four Solutions to a Trivial Problem ▶ this video [3] Organizing Functional Code for Parallel Execution; or, foldl and foldr Considered Slightly Harmful link [4] Announcing composable multi-threaded parallelism in Julia link

Strongly recommendsView on HN
@platz2019 · in “Why are monoidal categories interesting?”

associativity is the key to parallelism Four Solutions to a Trivial Problem - Guy Steele Jr. ▶ this video (using a monoid-cached tree)

CitesView on HN
@platz2018 · in “Organizing Functional Code for Parallel Execution (2009) [video]”

I enjoyed this talk along the same lines by Guy Steele, regarding not necessarily forcing a sequential solution to a non-sequential problem: Four Solutions to a Trivial Problem - Guy Steele Jr.: ▶ this video Look for steps that are commutative and/or associative in the problem to exploit parallelism.

RecommendsView on HN
@EdwardCoffin2017 · in “Abstract Algebra (2016) [pdf]”

Guy Steele [1] sometimes mentions it. He gave an interesting Google Tech Talk called Four Solutions to a Trivial Problem [2], and at 1:59 [3] he said: Also, algebraic properties are important. I've got a background in applied algebra, and I think that has informed my programming. And I think that making programmers aware of algebraic properties of their code, and communicating some of those properties to the compiler, may be worthwhile. The language Fortress [4], which he was one of the language designers of, allowed one to explicitly provide the compiler with such information - you could say that a certain operation was distributive or associative for instance, and the compiler could then do some refactorings and optimizations taking this knowledge into account. [1] link . [2] ▶ this video [3] ▶ this video [4] link

CitesView on HN
Invited Talk - Guy Steele1:07:22

Invited Talk - Guy Steele

ClojureTV
39K views • 9 years ago
"How to Think about Parallel Programming: Not!" - Guy L. Steele Jr. (Strange Loop 2010)1:09:38

"How to Think about Parallel Programming: Not!" - Guy L. Steele Jr. (Strange Loop 2010)

Strange Loop Conference
9K views • 5 years ago
Simon Peyton Jones: Data Parallel Haskell1:19:57

Simon Peyton Jones: Data Parallel Haskell

nuACM
28K views • 16 years ago
Let's #TalkConcurrency Panel Discussion with Sir Tony Hoare, Joe Armstrong, and Carl Hewitt1:06:45

Let's #TalkConcurrency Panel Discussion with Sir Tony Hoare, Joe Armstrong, and Carl Hewitt

Erlang Solutions
13K views • 7 years ago
The Simple Essence of Automatic Differentiation - Conal Elliott1:30:45

The Simple Essence of Automatic Differentiation - Conal Elliott

Microsoft Research
17K views • 8 years ago
Solid Ground // Saša Jurić35:15

Solid Ground // Saša Jurić

EMPEX Conference
14K views • 9 years ago
2017 ACM PPoPP Keynote: It's Time for a New Old Language1:12:12

2017 ACM PPoPP Keynote: It's Time for a New Old Language

Guy Steele
7K views • 9 years ago
Lecture 1B | MIT 6.001 Structure and Interpretation, 198658:22

Lecture 1B | MIT 6.001 Structure and Interpretation, 1986

MIT OpenCourseWare
116K views • 17 years ago
Succinct Data Structures1:26:11

Succinct Data Structures

Edward Kmett
9K views • 12 years ago
Ruby Conf 12 - Y Not- Adventures in Functional Programming by Jim Weirich53:22

Ruby Conf 12 - Y Not- Adventures in Functional Programming by Jim Weirich

Confreaks
65K views • 13 years ago
Brian Beckman: Don't fear the Monad1:07:10

Brian Beckman: Don't fear the Monad

jasonofthel33t
415K views • 13 years ago
Lecture 1A: Overview and Introduction to Lisp1:12:56

Lecture 1A: Overview and Introduction to Lisp

MIT OpenCourseWare
420K views • 7 years ago
Lambda Calculus - Fundamentals of Lambda Calculus & Functional Programming in JavaScript1:02:15

Lambda Calculus - Fundamentals of Lambda Calculus & Functional Programming in JavaScript

Fullstack Academy
227K views • 9 years ago
The Functional Programmer's Toolkit - Scott Wlaschin1:05:51

The Functional Programmer's Toolkit - Scott Wlaschin

NDC Conferences
79K views • 7 years ago
Ruby Manor 3 - Programming with Nothing by Tom Stuart40:50

Ruby Manor 3 - Programming with Nothing by Tom Stuart

Confreaks
13K views • 13 years ago
Lecture 7A: Metacircular Evaluator, Part 11:24:38

Lecture 7A: Metacircular Evaluator, Part 1

MIT OpenCourseWare
32K views • 7 years ago
Lecture 1A | MIT 6.001 Structure and Interpretation, 19861:12:56

Lecture 1A | MIT 6.001 Structure and Interpretation, 1986

MIT OpenCourseWare
995K views • 17 years ago
Stanford Lecture: Don Knuth—"A Conjecture That Had To Be True" (2017)1:07:02

Stanford Lecture: Don Knuth—"A Conjecture That Had To Be True" (2017)

Stanford Online
30K views • 8 years ago
"Unison: a new distributed programming language" by Paul Chiusano41:06

"Unison: a new distributed programming language" by Paul Chiusano

Strange Loop Conference
45K views • 7 years ago
Simon Peyton Jones - Linear Haskell: practical linearity in a higher-order polymorphic language1:03:34

Simon Peyton Jones - Linear Haskell: practical linearity in a higher-order polymorphic language

Curry On!
19K views • 8 years ago