SlideShare una empresa de Scribd logo
1 de 177
Beyond The Critical Section
Introduction ,[object Object],[object Object],[object Object]
Overview ,[object Object],[object Object],[object Object],[object Object]
Parallel Programming: Why? ,[object Object],[object Object],[object Object],[object Object]
Moore’s Law
“ Waaaah!” ,[object Object],[object Object],[object Object],[object Object],[object Object]
Console trends
So? ,[object Object],[object Object],[object Object],[object Object],[object Object]
How can we utilise 100+ CPUS? ,[object Object],[object Object],[object Object],[object Object],[object Object]
The Problems ,[object Object]
Race Condition Example x++ x++ x=0 x=? Thread A Thread B
Race Condition Example R1 = 0 x=0 Thread A Thread B
Race Condition Example R1 = 0+1 x=0 Thread A Thread B
Race Condition Example R1 = 1 R1 = 0 x=0 Thread A Thread B
Race Condition Example R1 = 1 R1 = 0+1 x=1 Thread A Thread B
Race Condition Example ,[object Object],R1 = 1 R1 = 1 x=1 Thread A Thread B
Atomics ,[object Object],[object Object],[object Object],[object Object],[object Object]
Compare And Swap ,[object Object],[object Object],[object Object],[object Object],[object Object]
Race Condition Solution A AtomicInc(x) AtomicInc(x) x=0 Thread A Thread B
Race Condition Solution A AtomicInc(x) AtomicInc(x) x=0 Thread A Thread B x=1
Race Condition Solution A AtomicInc(x) AtomicInc(x) x=0 Thread A Thread B x=1 x=2
Locking ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],… Code… Lock(); // protected region Unlock(); ...more code…
Race Condition Solution B x=0 Thread A Thread B Lock A x++ Unl0ck A Lock A x++ Unl0ck A
Race Condition Solution B x=0 Thread A Thread B Lock A x++ Unl0ck A Lock A x++ Unl0ck A
Race Condition Solution B x=0 Thread A Thread B x=1 Lock A x++ Unl0ck A Lock A x++ Unl0ck A
Race Condition Solution B x=0 Thread A Thread B x=1 Lock A x++ Unl0ck A Lock A x++ Unl0ck A
Race Condition Solution B x=0 Thread A Thread B x=1 Lock A x++ Unl0ck A Lock A x++ Unl0ck A
Race Condition Solution B x=0 Thread A Thread B x=1 x=2 Lock A x++ Unl0ck A Lock A x++ Unl0ck A
Race Condition Solution B x=0 Thread A Thread B x=1 x=2 Lock A x++ Unl0ck A Lock A x++ Unl0ck A
The Problems ,[object Object],[object Object]
Deadlock ,[object Object],[object Object]
Deadlock ,[object Object],[object Object],[object Object],Lock A Lock B Lock B Lock A Unl0ck A Unlock B
The Problems ,[object Object],[object Object],[object Object]
Read/write tearing ,[object Object],[object Object],[object Object],“ AAAAAAAA” “ BBBBBBBB” “ AAAABBBB”
The Problems ,[object Object],[object Object],[object Object],[object Object]
Priority Inversion ,[object Object],[object Object],[object Object],[object Object],[object Object]
The Problems ,[object Object],[object Object],[object Object],[object Object],[object Object]
The ABA problem ,[object Object],[object Object],[object Object],[object Object]
Consider a list and a thread pool… head a c b … ..
Thread A about to CAS head from a to b head a c b … .. CAS(&head->next,a,b);
Threads B: deq a & b head c … .. a b A & B are released into thread local pools
Thread B enq A - reused head a c … .. b A is added back
Thread A executes CAS head a c … .. b CAS(&head->next,a,b);
Thread A executes CAS successfully! head a c … .. b CAS(&head->next,a,b);
ABA Solution ,[object Object],[object Object],[object Object]
The Problems ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Convoy/Stampede ,[object Object],[object Object],[object Object],[object Object]
Higher Level Locking Primitives ,[object Object],[object Object],[object Object],[object Object],[object Object]
SpinLock ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mutex ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Barrier ,[object Object],[object Object]
Barrier example Thread 1 Thread 2 Thread 3 Thread 4 Barrier(3) Use results Do stuff
Barrier example Thread 1 Thread 2 Thread 3 Thread 4 Barrier(3) Use results Do stuff Calculating
Barrier example Thread 1 Thread 2 Thread 3 Thread 4 Barrier(3) Use results Do stuff Done
Barrier example Thread 1 Thread 2 Thread 3 Thread 4 Barrier(3) Use results Do stuff Signal
Barrier example Thread 1 Thread 2 Thread 3 Thread 4 Barrier(2) Use results Do stuff Do other stuff
Barrier example Thread 1 Thread 2 Thread 3 Thread 4 Barrier(2) Use results Do stuff Calculating
Barrier example Thread 1 Thread 2 Thread 3 Thread 4 Barrier(2) Use results Do stuff Done Calculating
Barrier example Thread 1 Thread 2 Thread 3 Thread 4 Barrier(2) Use results Do stuff Signal Done
Barrier example Thread 1 Thread 2 Thread 3 Thread 4 Barrier(1) Use results Do stuff More code Signal
Barrier example Thread 1 Thread 2 Thread 3 Thread 4 Barrier(0) Use results Do stuff Calc pi
Barrier example Thread 1 Thread 2 Thread 3 Thread 4 Barrier(0) Use results Do stuff
RWLock ,[object Object],[object Object],[object Object],[object Object]
Semaphore ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Parallel Patterns ,[object Object],[object Object],[object Object],[object Object],[object Object]
So, how do we start? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Problem Decomposition Problem From “Patterns for Parallel Programming”
Problem Decomposition Problem Organise By Tasks Organise By Data Decomposition Organise By Data Flow From “Patterns for Parallel Programming”
Problem Decomposition Problem Organise By Tasks Organise By Data Decomposition Organise By Data Flow Linear Recursive Linear Recursive Linear Recursive From “Patterns for Parallel Programming”
Problem Decomposition Problem Organise By Tasks Organise By Data Decomposition Organise By Data Flow Linear Recursive Linear Recursive Linear Recursive Task Parallelism Divide and Conquer Geometric Decomposition Recursive Data Pipeline Event-Based Coordination From “Patterns for Parallel Programming”
Task Parallelism ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Divide and Conquer ,[object Object],[object Object],[object Object]
Geometric Decomposition ,[object Object],[object Object],[object Object],[object Object]
Recursive Data Pattern ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Pipeline Pattern ,[object Object],[object Object],[object Object],[object Object]
Event-Based Coordination ,[object Object],[object Object],[object Object],[object Object],[object Object]
Supporting Structures SPMD Master/Worker Loop Parallelism Fork/Join Program Structures Data Structures Shared Data Distributed Array Shared Queue
Program Structures SPMD Master/Worker Loop Parallelism Fork/Join Program Structures Data Structures Shared Data Distributed Array Shared Queue
SPMD ,[object Object],[object Object],[object Object],[object Object],[object Object]
Master/Worker ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Loop Parallelism ,[object Object],[object Object],[object Object]
Fork/Join ,[object Object],[object Object],[object Object],[object Object],[object Object]
Supporting Data Structures SPMD Master/Worker Loop Parallelism Fork/Join Program Structures Data Structures Shared Data Distributed Array Shared Queue
Shared Data ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Distributed Array ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Shared Queue ,[object Object],[object Object],[object Object],[object Object],[object Object]
Lock free programming ,[object Object],[object Object],[object Object],[object Object],[object Object]
Lock Free linked list ,[object Object],[object Object],[object Object],[object Object],[object Object]
Adding a node to a list head a c tail b
Adding a node: Step 1 head a c tail b Find where to insert
Adding a node: Step 2 head a c tail b newNode->Next = prev->Next;
Adding a node: Step 3 head a c tail b prev->Next = newNode;
Extending to multiple threads ,[object Object]
Add ‘b’ and ‘c’ concurretly head a d tail b c Find where to insert
Add ‘b’ and ‘c’ concurretly head a d tail b c newNode->Next = prev->Next;
Add ‘b’ and ‘c’ concurrently head a d tail b c prev->Next = newNode;
Add ‘b’ and ‘c’ concurrently head a d tail b c
Extending to multiple threads ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Coarse Grained Locking ,[object Object],[object Object],[object Object],[object Object],[object Object]
A concrete example ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Coarse Grain head a c tail b
Step 1: Lock list b head a c tail
Step 2 & 3:Find then Insert  b head a c tail
Step 4:Unlock head a c tail b
Coarse Grained locking ,[object Object],[object Object],[object Object]
Fine Grained Locking ,[object Object],[object Object],[object Object],[object Object],[object Object]
Fine Grained Locking head a c tail b
Fine Grained Locking a c tail b head
Fine Grained Locking c tail b head a
Fine Grained Locking head tail b a c
Fine Grained Locking head tail b a c
Fine Grained Locking head a c tail b
Fine Grained Locking ,[object Object],[object Object],[object Object]
Optimistic Locking ,[object Object],[object Object],[object Object],[object Object]
Optimistic: Add(“g”) head a c d tail f k m g
Step 1: Search head a c d tail f k m g
Step 1: Search head a c d tail f k m g
Step 1: Search head a c d tail f k m g
Step 1: Search head a c d tail f k m g
Step 1: Search head a c d tail f k m g
Step 1: Search head a c d tail f k m g
Step 2: Lock head a c d tail m g f k
Step 3: Validate head a c d tail m g f k
Step 3: Validate head a c d tail m g f k
Step 3: Validate - FAIL head a tail m g d f k
Step 3a: Validate (retry) head a e tail m g d f k
Step 3a: Validate (retry) head a e tail m g d f k
Step 3a: Validate (retry) head a e tail m g d f k
Step 3a: Validate (retry) head a e tail m g d f k
Step 3a: Validate (success) head a e tail m g d f k
Step 4: Add head a e tail m g d f k
Step 5: Unlock head a e tail f k m g d
Optimistic Caveat ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Delete Caveat: Validate head a e tail m g d f k
Delete Caveat: Validate head a e tail m g d f k
Delete Caveat: delete ‘d’ head a e tail m g f k d
Delete Caveat: Validate head a e tail m g f k d
Delete Caveat: Validate head a e tail m g f k d
Delete Caveat: Valid! head a e tail m g f k d
Optimistic Synchronisation ,[object Object],[object Object],[object Object],[object Object]
Lazy Synchronization ,[object Object],[object Object],[object Object],[object Object]
Lazy: Add(“g”) head a c d tail f k m g
Step 1: Search head a c d tail f k m g
Step 1: Search head a c d tail f k m g
Step 1: Search head a c d tail f k m g
Step 1a: Search (delete c) head a c d tail f k m g
Step 1a: Search (delete c) head a c d tail f k m g
Step 1a: Search (delete c) head a c d tail f k m g
Step 1a: Search (delete c) head a c d tail f k m g
Step 1b: Search (lock) head d tail f k m g a c
Step 1c: Search (mark) head d tail f k m g a c
Step 2d: lock (skip/unlock) head a c d tail m g f k
Step 3: Add/Validate head a d tail m g c f k
Step 4: Unlock head a d tail f k m g c
Lazy Synchronisation ,[object Object],[object Object],[object Object]
Lazy Synchronisation ~330ms
Lock free (Non-Blocking) ,[object Object]
Delete ‘a’ and add ‘b’ concurrently head a c tail b prev->next=curr->next;  |  prev->next=b;
Delete ‘a’ and add ‘b’ concurrently head a c tail b prev->next=curr->next;  |  prev->next=b;
Delete ‘a’ and add ‘b’ concurrently head a c tail b head->next=a->next;  |  prev->next=b;
Delete ‘a’ and add ‘b’ concurrently head a c tail b Effectively deletes ‘a’ and ‘b’.
Introducing the AtomicMarkedPtr<> ,[object Object],[object Object],[object Object],[object Object],AtomicMarkedPtr<Node> next; next->CompareAndSet(eValue, nValue,eFlag, nFlag);
AtomicMarkedPtr<> ,[object Object],[object Object],class Node { public: Node(); AtomicMarkedPtr<Node> m_Next; T m_Data; int32 m_Key; };
Lock Free: Remove ‘d’ head a c d tail f k m Start loop:
Step 1: Find ‘d’ head a c tail f k m pred curr succ d if(!InternalFind(‘d’)) continue;
Step 2: Mark ‘d’ head a c tail f k m pred curr succ d if(!curr->next->CAS(succ,succ,false,true)) continue;
Step 3: Skip ‘d’ head a c tail f k m pred curr succ d pred->next->CAS(curr,succ,false,false);
LockFree: InternalFind() ,[object Object],[object Object],[object Object],[object Object]
Second InternalFind() head a c tail f k m pred curr succ pred curr succ d
If succ is marked… head a c tail f k m pred curr succ pred curr succ d
… Skip it head a c tail f k m pred curr succ pred curr succ d
Lock Free Synchronisation ,[object Object],[object Object],[object Object]
Lock free ,[object Object],[object Object],[object Object]
Performance comparison
Real world considerations ,[object Object],[object Object],[object Object],[object Object]
Advice ,[object Object],[object Object],[object Object],[object Object],[object Object]
References ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Más contenido relacionado

La actualidad más candente

C++ Data-flow Parallelism sounds great! But how practical is it? Let’s see ho...
C++ Data-flow Parallelism sounds great! But how practical is it? Let’s see ho...C++ Data-flow Parallelism sounds great! But how practical is it? Let’s see ho...
C++ Data-flow Parallelism sounds great! But how practical is it? Let’s see ho...
Jason Hearne-McGuiness
 
Concurrent Programming OpenMP @ Distributed System Discussion
Concurrent Programming OpenMP @ Distributed System DiscussionConcurrent Programming OpenMP @ Distributed System Discussion
Concurrent Programming OpenMP @ Distributed System Discussion
CherryBerry2
 
Introduction to data structures and Algorithm
Introduction to data structures and AlgorithmIntroduction to data structures and Algorithm
Introduction to data structures and Algorithm
Dhaval Kaneria
 
Parallel Programming in .NET
Parallel Programming in .NETParallel Programming in .NET
Parallel Programming in .NET
SANKARSAN BOSE
 

La actualidad más candente (20)

C++ Data-flow Parallelism sounds great! But how practical is it? Let’s see ho...
C++ Data-flow Parallelism sounds great! But how practical is it? Let’s see ho...C++ Data-flow Parallelism sounds great! But how practical is it? Let’s see ho...
C++ Data-flow Parallelism sounds great! But how practical is it? Let’s see ho...
 
Concurrent Programming OpenMP @ Distributed System Discussion
Concurrent Programming OpenMP @ Distributed System DiscussionConcurrent Programming OpenMP @ Distributed System Discussion
Concurrent Programming OpenMP @ Distributed System Discussion
 
Open mp directives
Open mp directivesOpen mp directives
Open mp directives
 
The Challenges facing Libraries and Imperative Languages from Massively Paral...
The Challenges facing Libraries and Imperative Languages from Massively Paral...The Challenges facing Libraries and Imperative Languages from Massively Paral...
The Challenges facing Libraries and Imperative Languages from Massively Paral...
 
Coding For Cores - C# Way
Coding For Cores - C# WayCoding For Cores - C# Way
Coding For Cores - C# Way
 
Introduction to data structures and Algorithm
Introduction to data structures and AlgorithmIntroduction to data structures and Algorithm
Introduction to data structures and Algorithm
 
Intro to OpenMP
Intro to OpenMPIntro to OpenMP
Intro to OpenMP
 
Matlab Serial Port
Matlab Serial PortMatlab Serial Port
Matlab Serial Port
 
Open mp
Open mpOpen mp
Open mp
 
Introduction to OpenMP
Introduction to OpenMPIntroduction to OpenMP
Introduction to OpenMP
 
Parallel computation
Parallel computationParallel computation
Parallel computation
 
OpenMP And C++
OpenMP And C++OpenMP And C++
OpenMP And C++
 
XML / JSON Data Exchange with PLC
XML / JSON Data Exchange with PLCXML / JSON Data Exchange with PLC
XML / JSON Data Exchange with PLC
 
Class notes(week 5) on command line arguments
Class notes(week 5) on command line argumentsClass notes(week 5) on command line arguments
Class notes(week 5) on command line arguments
 
Unit v memory &amp; programmable logic devices
Unit v   memory &amp; programmable logic devicesUnit v   memory &amp; programmable logic devices
Unit v memory &amp; programmable logic devices
 
Nbvtalkataitamimageprocessingconf
NbvtalkataitamimageprocessingconfNbvtalkataitamimageprocessingconf
Nbvtalkataitamimageprocessingconf
 
Openmp
OpenmpOpenmp
Openmp
 
OpenMP
OpenMPOpenMP
OpenMP
 
Parallel Programming in .NET
Parallel Programming in .NETParallel Programming in .NET
Parallel Programming in .NET
 
Erlang
ErlangErlang
Erlang
 

Similar a Parallel Programming: Beyond the Critical Section

what every web and app developer should know about multithreading
what every web and app developer should know about multithreadingwhat every web and app developer should know about multithreading
what every web and app developer should know about multithreading
Ilya Haykinson
 
10 Multicore 07
10 Multicore 0710 Multicore 07
10 Multicore 07
timcrack
 
Lock free algorithms
Lock free algorithmsLock free algorithms
Lock free algorithms
Pan Ip
 
Medical Image Processing Strategies for multi-core CPUs
Medical Image Processing Strategies for multi-core CPUsMedical Image Processing Strategies for multi-core CPUs
Medical Image Processing Strategies for multi-core CPUs
Daniel Blezek
 
Java Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
Java Core | Modern Java Concurrency | Martijn Verburg & Ben EvansJava Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
Java Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
JAX London
 

Similar a Parallel Programming: Beyond the Critical Section (20)

what every web and app developer should know about multithreading
what every web and app developer should know about multithreadingwhat every web and app developer should know about multithreading
what every web and app developer should know about multithreading
 
Peyton jones-2011-parallel haskell-the_future
Peyton jones-2011-parallel haskell-the_futurePeyton jones-2011-parallel haskell-the_future
Peyton jones-2011-parallel haskell-the_future
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
A Survey of Concurrency Constructs
A Survey of Concurrency ConstructsA Survey of Concurrency Constructs
A Survey of Concurrency Constructs
 
The Need for Async @ ScalaWorld
The Need for Async @ ScalaWorldThe Need for Async @ ScalaWorld
The Need for Async @ ScalaWorld
 
Concurrency Constructs Overview
Concurrency Constructs OverviewConcurrency Constructs Overview
Concurrency Constructs Overview
 
Need for Async: Hot pursuit for scalable applications
Need for Async: Hot pursuit for scalable applicationsNeed for Async: Hot pursuit for scalable applications
Need for Async: Hot pursuit for scalable applications
 
Inferno Scalable Deep Learning on Spark
Inferno Scalable Deep Learning on SparkInferno Scalable Deep Learning on Spark
Inferno Scalable Deep Learning on Spark
 
10 Multicore 07
10 Multicore 0710 Multicore 07
10 Multicore 07
 
Here comes the Loom - Ya!vaConf.pdf
Here comes the Loom - Ya!vaConf.pdfHere comes the Loom - Ya!vaConf.pdf
Here comes the Loom - Ya!vaConf.pdf
 
Performance and predictability (1)
Performance and predictability (1)Performance and predictability (1)
Performance and predictability (1)
 
Performance and Predictability - Richard Warburton
Performance and Predictability - Richard WarburtonPerformance and Predictability - Richard Warburton
Performance and Predictability - Richard Warburton
 
Atmosphere Conference 2015: Need for Async: In pursuit of scalable internet-s...
Atmosphere Conference 2015: Need for Async: In pursuit of scalable internet-s...Atmosphere Conference 2015: Need for Async: In pursuit of scalable internet-s...
Atmosphere Conference 2015: Need for Async: In pursuit of scalable internet-s...
 
Lock free algorithms
Lock free algorithmsLock free algorithms
Lock free algorithms
 
Lessons learnt on a 2000-core cluster
Lessons learnt on a 2000-core clusterLessons learnt on a 2000-core cluster
Lessons learnt on a 2000-core cluster
 
Migration To Multi Core - Parallel Programming Models
Migration To Multi Core - Parallel Programming ModelsMigration To Multi Core - Parallel Programming Models
Migration To Multi Core - Parallel Programming Models
 
Data oriented design and c++
Data oriented design and c++Data oriented design and c++
Data oriented design and c++
 
Medical Image Processing Strategies for multi-core CPUs
Medical Image Processing Strategies for multi-core CPUsMedical Image Processing Strategies for multi-core CPUs
Medical Image Processing Strategies for multi-core CPUs
 
Java Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
Java Core | Modern Java Concurrency | Martijn Verburg & Ben EvansJava Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
Java Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
 
Towards a Scalable Non-Blocking Coding Style
Towards a Scalable Non-Blocking Coding StyleTowards a Scalable Non-Blocking Coding Style
Towards a Scalable Non-Blocking Coding Style
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 

Parallel Programming: Beyond the Critical Section