This document discusses strategies for parallel computing and implications of different approaches. It covers multi-threaded versus multi-process development and considerations for each. Multi-threaded development allows for easy data sharing but risks crashing entire processes if one thread fails, while multi-process is more scalable but requires custom communication between processes. The document also provides examples of scenarios that may be better suited for multi-threaded or multi-process approaches based on factors like task dependencies, data and memory requirements, and scalability needs.
Дмитрий Копляров , Потокобезопасные сигналы в C++Sergey Platonov
Распространённые подходы к реализации сигналов (boost, Qt) удобны в однопоточном окружении, но, к сожалению, имеют два недостатка при использовании из нескольких потоков: 1. Нет возможности атомарно подключиться к сигналу и получить текущее состояние объекта. 2. Отключение от сигнала плохо совместимо с идиомой RAII. В результате, “очевидный” код приводит к race condition’ам и обращениям к разрушенным объектам, а “правильный” подразумевает сложные схемы владения (shared_from_this, либо введение функционально избыточных объектов).
В докладе я расскажу об альтернативной реализации сигналов, лишённой этих недостатков, и объясню на примерах её преимущества перед boost::signals2.
How can you handle defects? If you are in a factory, production can produce objects with defects. Or values from sensors can tell you over time that some values are not "normal". What can you do as a developer (not a Data Scientist) with .NET o Azure to detect these anomalies? Let's see how in this session.
Grokking Techtalk #39: Gossip protocol and applicationsGrokking VN
Gossip là một giao thức trao đổi thông tin phổ biến trong các hệ thống phân tán giúp cho các máy chủ duy trì trạng thái đồng nhất với nhau cũng như thực hiện các nhiệm vụ có chủ đích. Điểm mạnh của nó là khả năng phát tán thông tin ở tốc độ cao cũng như không hề có single point of failure. Trong bài talk này, Anh Nguyễn Anh Tú, thành viên của Grokking sẽ chia sẻ một số thông tin về giao thức Gossip cũng như điểm qua một vài ứng dụng thực tiễn của nó.
- Về diễn giả: Anh Nguyễn Anh Tú hiện đang là Staff Software Engineer tại Axon Vietnam, đồng thời là thành viên của Grokking Vietnam.
Attacking Machine Learning used in AntiVirus with Reinforcement by Rubén Mart...Big Data Spain
In recent years Machine Learning (ML) and especially Deep Learning (DL) have achieved great success in many areas such as visual recognition, NLP or even aiding in medical research.
https://www.bigdataspain.org/2017/talk/attacking-machine-learning-used-in-antivirus-with-reinforcement
Big Data Spain 2017
16th - 17th Kinépolis Madrid
Time Series Anomaly Detection with .net and AzureMarco Parenzan
If you have any device or source that generates values over time (also a log from a service), you want to determine if in a time frame, the time serie is correct or you can detect some anomalies. What can you do as a developer (not a Data Scientist) with .NET o Azure? Let's see how in this session.
Дмитрий Копляров , Потокобезопасные сигналы в C++Sergey Platonov
Распространённые подходы к реализации сигналов (boost, Qt) удобны в однопоточном окружении, но, к сожалению, имеют два недостатка при использовании из нескольких потоков: 1. Нет возможности атомарно подключиться к сигналу и получить текущее состояние объекта. 2. Отключение от сигнала плохо совместимо с идиомой RAII. В результате, “очевидный” код приводит к race condition’ам и обращениям к разрушенным объектам, а “правильный” подразумевает сложные схемы владения (shared_from_this, либо введение функционально избыточных объектов).
В докладе я расскажу об альтернативной реализации сигналов, лишённой этих недостатков, и объясню на примерах её преимущества перед boost::signals2.
How can you handle defects? If you are in a factory, production can produce objects with defects. Or values from sensors can tell you over time that some values are not "normal". What can you do as a developer (not a Data Scientist) with .NET o Azure to detect these anomalies? Let's see how in this session.
Grokking Techtalk #39: Gossip protocol and applicationsGrokking VN
Gossip là một giao thức trao đổi thông tin phổ biến trong các hệ thống phân tán giúp cho các máy chủ duy trì trạng thái đồng nhất với nhau cũng như thực hiện các nhiệm vụ có chủ đích. Điểm mạnh của nó là khả năng phát tán thông tin ở tốc độ cao cũng như không hề có single point of failure. Trong bài talk này, Anh Nguyễn Anh Tú, thành viên của Grokking sẽ chia sẻ một số thông tin về giao thức Gossip cũng như điểm qua một vài ứng dụng thực tiễn của nó.
- Về diễn giả: Anh Nguyễn Anh Tú hiện đang là Staff Software Engineer tại Axon Vietnam, đồng thời là thành viên của Grokking Vietnam.
Attacking Machine Learning used in AntiVirus with Reinforcement by Rubén Mart...Big Data Spain
In recent years Machine Learning (ML) and especially Deep Learning (DL) have achieved great success in many areas such as visual recognition, NLP or even aiding in medical research.
https://www.bigdataspain.org/2017/talk/attacking-machine-learning-used-in-antivirus-with-reinforcement
Big Data Spain 2017
16th - 17th Kinépolis Madrid
Time Series Anomaly Detection with .net and AzureMarco Parenzan
If you have any device or source that generates values over time (also a log from a service), you want to determine if in a time frame, the time serie is correct or you can detect some anomalies. What can you do as a developer (not a Data Scientist) with .NET o Azure? Let's see how in this session.
Nondeterminism is unavoidable, but data races are pure evilracesworkshop
Presentation by Hans-J. Boehm.
Paper and more information: http://soft.vub.ac.be/races/paper/position-paper-nondeterminism-is-unavoidable-but-data-races-are-pure-evil/
Deep Learning in Spark with BigDL by Petar Zecevic at Big Data Spain 2017Big Data Spain
BigDL is a deep learning framework modeled after Torch and open-sourced by Intel in 2016. BigDL runs on Apache Spark, a fast, general, distributed computing platform that is widely used for Big Data processing and machine learning tasks.
https://www.bigdataspain.org/2017/talk/deep-learning-in-spark-with-bigdl
Big Data Spain 2017
16th -17th November Kinépolis Madrid
CUDA by Example : Advanced Atomics : NotesSubhajit Sahu
Highlighted notes of:
Appendix: Advanced Atomics
Book:
CUDA by Example
An Introduction to General Purpose GPU Computing
Authors:
Jason Sanders
Edward Kandrot
“This book is required reading for anyone working with accelerator-based computing systems.”
–From the Foreword by Jack Dongarra, University of Tennessee and Oak Ridge National Laboratory
CUDA is a computing architecture designed to facilitate the development of parallel programs. In conjunction with a comprehensive software platform, the CUDA Architecture enables programmers to draw on the immense power of graphics processing units (GPUs) when building high-performance applications. GPUs, of course, have long been available for demanding graphics and game applications. CUDA now brings this valuable resource to programmers working on applications in other domains, including science, engineering, and finance. No knowledge of graphics programming is required–just the ability to program in a modestly extended version of C.
CUDA by Example, written by two senior members of the CUDA software platform team, shows programmers how to employ this new technology. The authors introduce each area of CUDA development through working examples. After a concise introduction to the CUDA platform and architecture, as well as a quick-start guide to CUDA C, the book details the techniques and trade-offs associated with each key CUDA feature. You’ll discover when to use each CUDA C extension and how to write CUDA software that delivers truly outstanding performance.
Table of Contents
Why CUDA? Why Now?
Getting Started
Introduction to CUDA C
Parallel Programming in CUDA C
Thread Cooperation
Constant Memory and Events
Texture Memory
Graphics Interoperability
Atomics
Streams
CUDA C on Multiple GPUs
The Final Countdown
All the CUDA software tools you’ll need are freely available for download from NVIDIA.
Jason Sanders is a senior software engineer in NVIDIA’s CUDA Platform Group, helped develop early releases of CUDA system software and contributed to the OpenCL 1.0 Specification, an industry standard for heterogeneous computing. He has held positions at ATI Technologies, Apple, and Novell.
Edward Kandrot is a senior software engineer on NVIDIA’s CUDA Algorithms team, has more than twenty years of industry experience optimizing code performance for firms including Adobe, Microsoft, Google, and Autodesk.
Choosing the right parallel compute architecture corehard_by
Multi-core architecture is the present and future way in which the market is addressing Moore’s law limitations. Multi-core workstations, high performance computers, GPUs and the focus on hybrid/ public cloud technologies for offloading and scaling applications is the direction development is heading. Leveraging multiple cores in order to increase application performance and responsiveness is expected especially from classic high-throughput executions such as rendering, simulations, and heavy calculations. Choosing the correct multi-core strategy for your software requirements is essential, making the wrong decision can have serious implications on software performance, scalability, memory usage and other factors. In this overview, we will inspect various considerations for choosing the correct multi-core strategy for your application’s requirement and investigate the pros and cons of multi-threaded development vs multi-process development. For example, Boost’s GIL (Generic Image Library) provides you with the ability to efficiently code image processing algorithms. However, deciding whether your algorithms should be executed as multi-threaded or multi-process has a high impact on your design, coding, future maintenance, scalability, performance, and other factors.
A partial list of considerations to take into account before taking this architectural decision includes:
- How big are the images I need to process
- What risks can I have in terms of race-conditions, timing issues, sharing violations – does it justify multi-threading programming?
- Do I have any special communication and synchronization requirements?
- How much time would it take my customers to execute a large scenario?
- Would I like to scale processing performance by using the cloud or cluster?
We will then examine these issues in real-world environments. In order to learn how this issue is being addressed in a real-world scenario, we will examine common development and testing environments we are using in our daily work and compare the multi-core strategies they have implemented in order to promote higher development productivity.
Strata SC 2014: Apache Mesos as an SDK for Building Distributed FrameworksPaco Nathan
O'Reilly Media - Strata SC 2014
Apache Mesos is an open source cluster manager that provides efficient resource isolation for distributed frameworks—similar to Google’s “Borg” and “Omega” projects for warehouse scale computing. It is based on isolation features in the modern kernel: “cgroups” in Linux, “zones” in Solaris.
Google’s “Omega” research paper shows that while 80% of the jobs on a given cluster may be batch (e.g., MapReduce), 55-60% of cluster resources go toward services. The batch jobs on a cluster are the easy part—services are much more complex to schedule efficiently. However by mixing workloads, the overall problem of scheduling resources can be greatly improved.
Given the use of Mesos as the kernel for a “data center OS”, two additional open source components Chronos (like Unix “cron”) and Marathon (like Unix “init.d”) serve as the building blocks for creating distributed, fault-tolerant, highly-available apps at scale.
This talk will examine case studies of Mesos uses in production at scale: ranging from Twitter (100% on prem) to Airbnb (100% cloud), plus MediaCrossing, Categorize, HubSpot, etc. How have these organizations leveraged Mesos to build better, more scalable and efficient distributed apps? Lessons from the Mesos developer community show that one can port an existing framework with a wrapper in approximately 100 line of code. Moreover, an important lesson from Spark is that based on “data center OS” building blocks one can rewrite a distributed system much like Hadoop to be 100x faster within a relatively small amount of source code.
These case studies illustrate the obvious benefits over prior approaches based on virtualization: scalability, elasticity, fault-tolerance, high availability, improved utilization rates, etc. Less obvious outcomes also include: reduced time for engineers to ramp-up new services at scale; reduced latency between batch and services, enabling new high-ROI use cases; and enabling dev/test apps to run on a production cluster without disrupting operations.
AWS Serverless Community Day Keynote and Vendia Launch 6-26-2020Tim Wagner
Hear Tim Wagner, CEO and co-founder of Vendia and "Father of Serverless" talk about the evolution of Serverless over the years and how Vendia is taking it into a cross-cloud future.
Microservices - opportunities, dilemmas and problemsŁukasz Sowa
Presentation from Warsjawa 2014 workshop "Microservices in Scala". Topics covered:
- What are microservices?
- What's the difference between them vs monolithic
architectures?
- What are the different flavours of microservices?
A popular pattern today is the injection of declarative (or functional) mini-languages into general purpose host languages. Years ago, this is what LINQ for C# was all about. Now there are many more examples such as the Spark or Beam APIs for Java and Scala. The opposite embedding is also possible: start with a declarative (or functional) language as the outer host and then embed a general purpose language. This is the path we took for Scope years ago (Scope is a Microsoft-internal big data analytics language) and have recently shipped as U-SQL. In this case, the host language is close to T-SQL (Transact SQL is Microsoft’s SQL language for SQL Server and Azure SQL DB) and the embedded language is C#. By embedding the general purpose language in a declarative language, we enable all-of-program (not just all-of stage) optimization, parallelization, and scheduling. The resulting jobs can flexibly scale to leverage thousands of machines.
The Effectiveness, Efficiency and Legitimacy of Outsourcing Your Data DataCentred
Presentation given by our CEO Mike Kelly at this year's Excellence in Policing conference talking about the benefits of cloud computing and the Effectiveness, Efficiency and Legitimacy of outsourcing data. The presentation looks at the long term trends supporting the adoption of cloud technologies and dispels some of the myths and reasons why not to adopt cloud.
The presentation concludes with an examination of the benefits of utilising cloud technology and examines how best to adopt a cloud approach.
SpringPeople - Introduction to Cloud ComputingSpringPeople
Cloud computing is no longer a fad that is going around. It is for real and is perhaps the most talked about subject. Various players in the cloud eco-system have provided a definition that is closely aligned to their sweet spot –let it be infrastructure, platforms or applications.
This presentation will provide an exposure of a variety of cloud computing techniques, architecture, technology options to the participants and in general will familiarize cloud fundamentals in a holistic manner spanning all dimensions such as cost, operations, technology etc
This is a small introduction to microservices. you can find the differences between microservices and monolithic applications. You will find the pros and cons of microservices. you will also find the challenges (Business/ technical) that you may face while implementing microservices.
Deliver Best-in-Class HPC Cloud Solutions Without Losing Your MindAvere Systems
While cloud computing offers virtually unlimited capacity, harnessing that capacity in an efficient, cost effective fashion can be cumbersome and difficult at the workload level. At the organizational level, it can quickly become chaos.
You must make choices around cloud deployment, and these choices could have a long-lasting impact on your organization. It is important to understand your options and avoid incomplete, complicated, locked-in scenarios. Data management and placement challenges make having the ability to automate workflows and processes across multiple clouds a requirement.
In this webinar, you will:
• Learn how to leverage cloud services as part of an overall computation approach
• Understand data management in a cloud-based world
• Hear what options you have to orchestrate HPC in the cloud
• Learn how cloud orchestration works to automate and align computing with specific goals and objectives
• See an example of an orchestrated HPC workload using on-premises data
From computational research to financial back testing, and research simulations to IoT processing frameworks, decisions made now will not only impact future manageability, but also your sanity.
It's harder than ever to predict the load your application will need to handle in advance, so how do you design your architecture so you can afford to implement as you go and be ready for whatever comes your way. It's easy to focus on optimizing each part of your application but your application architecture determines the options you have to make big leaps in scalability. In this talk we'll cover practical patterns you can build today to meet the needs of rapid development while still creating systems that can scale up and out. Specific code examples will focus on .NET but the principles apply across many technologies. Real world systems will be discussed based on our experience helping customers around the world optimize their enterprise applications.
Nondeterminism is unavoidable, but data races are pure evilracesworkshop
Presentation by Hans-J. Boehm.
Paper and more information: http://soft.vub.ac.be/races/paper/position-paper-nondeterminism-is-unavoidable-but-data-races-are-pure-evil/
Deep Learning in Spark with BigDL by Petar Zecevic at Big Data Spain 2017Big Data Spain
BigDL is a deep learning framework modeled after Torch and open-sourced by Intel in 2016. BigDL runs on Apache Spark, a fast, general, distributed computing platform that is widely used for Big Data processing and machine learning tasks.
https://www.bigdataspain.org/2017/talk/deep-learning-in-spark-with-bigdl
Big Data Spain 2017
16th -17th November Kinépolis Madrid
CUDA by Example : Advanced Atomics : NotesSubhajit Sahu
Highlighted notes of:
Appendix: Advanced Atomics
Book:
CUDA by Example
An Introduction to General Purpose GPU Computing
Authors:
Jason Sanders
Edward Kandrot
“This book is required reading for anyone working with accelerator-based computing systems.”
–From the Foreword by Jack Dongarra, University of Tennessee and Oak Ridge National Laboratory
CUDA is a computing architecture designed to facilitate the development of parallel programs. In conjunction with a comprehensive software platform, the CUDA Architecture enables programmers to draw on the immense power of graphics processing units (GPUs) when building high-performance applications. GPUs, of course, have long been available for demanding graphics and game applications. CUDA now brings this valuable resource to programmers working on applications in other domains, including science, engineering, and finance. No knowledge of graphics programming is required–just the ability to program in a modestly extended version of C.
CUDA by Example, written by two senior members of the CUDA software platform team, shows programmers how to employ this new technology. The authors introduce each area of CUDA development through working examples. After a concise introduction to the CUDA platform and architecture, as well as a quick-start guide to CUDA C, the book details the techniques and trade-offs associated with each key CUDA feature. You’ll discover when to use each CUDA C extension and how to write CUDA software that delivers truly outstanding performance.
Table of Contents
Why CUDA? Why Now?
Getting Started
Introduction to CUDA C
Parallel Programming in CUDA C
Thread Cooperation
Constant Memory and Events
Texture Memory
Graphics Interoperability
Atomics
Streams
CUDA C on Multiple GPUs
The Final Countdown
All the CUDA software tools you’ll need are freely available for download from NVIDIA.
Jason Sanders is a senior software engineer in NVIDIA’s CUDA Platform Group, helped develop early releases of CUDA system software and contributed to the OpenCL 1.0 Specification, an industry standard for heterogeneous computing. He has held positions at ATI Technologies, Apple, and Novell.
Edward Kandrot is a senior software engineer on NVIDIA’s CUDA Algorithms team, has more than twenty years of industry experience optimizing code performance for firms including Adobe, Microsoft, Google, and Autodesk.
Choosing the right parallel compute architecture corehard_by
Multi-core architecture is the present and future way in which the market is addressing Moore’s law limitations. Multi-core workstations, high performance computers, GPUs and the focus on hybrid/ public cloud technologies for offloading and scaling applications is the direction development is heading. Leveraging multiple cores in order to increase application performance and responsiveness is expected especially from classic high-throughput executions such as rendering, simulations, and heavy calculations. Choosing the correct multi-core strategy for your software requirements is essential, making the wrong decision can have serious implications on software performance, scalability, memory usage and other factors. In this overview, we will inspect various considerations for choosing the correct multi-core strategy for your application’s requirement and investigate the pros and cons of multi-threaded development vs multi-process development. For example, Boost’s GIL (Generic Image Library) provides you with the ability to efficiently code image processing algorithms. However, deciding whether your algorithms should be executed as multi-threaded or multi-process has a high impact on your design, coding, future maintenance, scalability, performance, and other factors.
A partial list of considerations to take into account before taking this architectural decision includes:
- How big are the images I need to process
- What risks can I have in terms of race-conditions, timing issues, sharing violations – does it justify multi-threading programming?
- Do I have any special communication and synchronization requirements?
- How much time would it take my customers to execute a large scenario?
- Would I like to scale processing performance by using the cloud or cluster?
We will then examine these issues in real-world environments. In order to learn how this issue is being addressed in a real-world scenario, we will examine common development and testing environments we are using in our daily work and compare the multi-core strategies they have implemented in order to promote higher development productivity.
Strata SC 2014: Apache Mesos as an SDK for Building Distributed FrameworksPaco Nathan
O'Reilly Media - Strata SC 2014
Apache Mesos is an open source cluster manager that provides efficient resource isolation for distributed frameworks—similar to Google’s “Borg” and “Omega” projects for warehouse scale computing. It is based on isolation features in the modern kernel: “cgroups” in Linux, “zones” in Solaris.
Google’s “Omega” research paper shows that while 80% of the jobs on a given cluster may be batch (e.g., MapReduce), 55-60% of cluster resources go toward services. The batch jobs on a cluster are the easy part—services are much more complex to schedule efficiently. However by mixing workloads, the overall problem of scheduling resources can be greatly improved.
Given the use of Mesos as the kernel for a “data center OS”, two additional open source components Chronos (like Unix “cron”) and Marathon (like Unix “init.d”) serve as the building blocks for creating distributed, fault-tolerant, highly-available apps at scale.
This talk will examine case studies of Mesos uses in production at scale: ranging from Twitter (100% on prem) to Airbnb (100% cloud), plus MediaCrossing, Categorize, HubSpot, etc. How have these organizations leveraged Mesos to build better, more scalable and efficient distributed apps? Lessons from the Mesos developer community show that one can port an existing framework with a wrapper in approximately 100 line of code. Moreover, an important lesson from Spark is that based on “data center OS” building blocks one can rewrite a distributed system much like Hadoop to be 100x faster within a relatively small amount of source code.
These case studies illustrate the obvious benefits over prior approaches based on virtualization: scalability, elasticity, fault-tolerance, high availability, improved utilization rates, etc. Less obvious outcomes also include: reduced time for engineers to ramp-up new services at scale; reduced latency between batch and services, enabling new high-ROI use cases; and enabling dev/test apps to run on a production cluster without disrupting operations.
AWS Serverless Community Day Keynote and Vendia Launch 6-26-2020Tim Wagner
Hear Tim Wagner, CEO and co-founder of Vendia and "Father of Serverless" talk about the evolution of Serverless over the years and how Vendia is taking it into a cross-cloud future.
Microservices - opportunities, dilemmas and problemsŁukasz Sowa
Presentation from Warsjawa 2014 workshop "Microservices in Scala". Topics covered:
- What are microservices?
- What's the difference between them vs monolithic
architectures?
- What are the different flavours of microservices?
A popular pattern today is the injection of declarative (or functional) mini-languages into general purpose host languages. Years ago, this is what LINQ for C# was all about. Now there are many more examples such as the Spark or Beam APIs for Java and Scala. The opposite embedding is also possible: start with a declarative (or functional) language as the outer host and then embed a general purpose language. This is the path we took for Scope years ago (Scope is a Microsoft-internal big data analytics language) and have recently shipped as U-SQL. In this case, the host language is close to T-SQL (Transact SQL is Microsoft’s SQL language for SQL Server and Azure SQL DB) and the embedded language is C#. By embedding the general purpose language in a declarative language, we enable all-of-program (not just all-of stage) optimization, parallelization, and scheduling. The resulting jobs can flexibly scale to leverage thousands of machines.
The Effectiveness, Efficiency and Legitimacy of Outsourcing Your Data DataCentred
Presentation given by our CEO Mike Kelly at this year's Excellence in Policing conference talking about the benefits of cloud computing and the Effectiveness, Efficiency and Legitimacy of outsourcing data. The presentation looks at the long term trends supporting the adoption of cloud technologies and dispels some of the myths and reasons why not to adopt cloud.
The presentation concludes with an examination of the benefits of utilising cloud technology and examines how best to adopt a cloud approach.
SpringPeople - Introduction to Cloud ComputingSpringPeople
Cloud computing is no longer a fad that is going around. It is for real and is perhaps the most talked about subject. Various players in the cloud eco-system have provided a definition that is closely aligned to their sweet spot –let it be infrastructure, platforms or applications.
This presentation will provide an exposure of a variety of cloud computing techniques, architecture, technology options to the participants and in general will familiarize cloud fundamentals in a holistic manner spanning all dimensions such as cost, operations, technology etc
This is a small introduction to microservices. you can find the differences between microservices and monolithic applications. You will find the pros and cons of microservices. you will also find the challenges (Business/ technical) that you may face while implementing microservices.
Deliver Best-in-Class HPC Cloud Solutions Without Losing Your MindAvere Systems
While cloud computing offers virtually unlimited capacity, harnessing that capacity in an efficient, cost effective fashion can be cumbersome and difficult at the workload level. At the organizational level, it can quickly become chaos.
You must make choices around cloud deployment, and these choices could have a long-lasting impact on your organization. It is important to understand your options and avoid incomplete, complicated, locked-in scenarios. Data management and placement challenges make having the ability to automate workflows and processes across multiple clouds a requirement.
In this webinar, you will:
• Learn how to leverage cloud services as part of an overall computation approach
• Understand data management in a cloud-based world
• Hear what options you have to orchestrate HPC in the cloud
• Learn how cloud orchestration works to automate and align computing with specific goals and objectives
• See an example of an orchestrated HPC workload using on-premises data
From computational research to financial back testing, and research simulations to IoT processing frameworks, decisions made now will not only impact future manageability, but also your sanity.
It's harder than ever to predict the load your application will need to handle in advance, so how do you design your architecture so you can afford to implement as you go and be ready for whatever comes your way. It's easy to focus on optimizing each part of your application but your application architecture determines the options you have to make big leaps in scalability. In this talk we'll cover practical patterns you can build today to meet the needs of rapid development while still creating systems that can scale up and out. Specific code examples will focus on .NET but the principles apply across many technologies. Real world systems will be discussed based on our experience helping customers around the world optimize their enterprise applications.
Presentazione dello speech tenuto da Carmine Spagnuolo (Postdoctoral Research Fellow - Università degli Studi di Salerno/ ACT OR) dal titolo "Technology insights: Decision Science Platform", durante il Decision Science Forum 2019, il più importante evento italiano sulla Scienza delle Decisioni.
PHP At 5000 Requests Per Second: Hootsuite’s Scaling Storyvanphp
Bill Monkman, Lead Engineer at Hootsuite, presenting on how Hootsuite went from zero to hundreds of millions of requests per day with its PHP codebase, and how dealing with that growth has shaped its future direction. Tips, optimizations, and horror stories from a rapidly-scaling PHP startup.
Video: https://www.youtube.com/watch?v=TZGeBAIMPII
Cloud-Native Data: What data questions to ask when building cloud-native appsVMware Tanzu
While a number of patterns and architectural guidelines exist for cloud-native applications, a discussion about data often leads to more questions than answers. For example, what are some of the typical data problems encountered, why are they different, and how can they be overcome?
Join Prasad Radhakrishnan from Pivotal and Dave Nielsen from Redis Labs as they discuss:
- Expectations and requirements of cloud-native data
- Common faux pas and strategies on how you can avoid them
Presenters:
Prasad Radhakrishnan, Platform Architecture for Data at Pivotal
Dave Nielsen, Head of Ecosystem Programs at Redis Labs
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Доклад вводит в рассмотрение универсальный адаптер, позволяющий обернуть любой класс с целью добавления новых свойств, отсутствующих в оригинальном классе. Получаемые классы могут иметь в точности такой же интерфейс, как и первоначальные, что позволяет прозрачно заменять их и оборачивать любое количество раз.
Это позволяет добавлять необходимые свойства объектам, не переписывая его с нуля. Предложенная обобщенная концепция будет последовательно введена и проиллюстрирована простыми, но интересными примерами.
На протяжении всего существования C++ тема компайл-тайм рефлексии поднимается постоянно, но, к сожалению, до сих пор Стандарт языка не дает достаточных возможностей для извлечения и манипулирования компайл-тайм информацией. Большое количество библиотек и препроцессоров было придумано для того, чтобы решить эту проблему, начиная от простых макросов и заканчивая Qt-moc или ODB. В докладе Антон расскажет о том, как на эту проблему смотрит Комитет по Стандартизации: какие решения были предложены, и какое стало доминирующим.
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itSergey Platonov
The talk will look at limitations of compilers when creating fast code and how to make more effective use of both the underlying micro-architecture of modern CPU's and how algorithmic optimizations may have surprising effects on the generated code. We shall discuss several specific CPU architecture features and their pros and cons in relation to creating fast C++ code. We then expand with several algorithmic techniques, not usually well-documented, for making faster, compiler friendly, C++.
Note that we shall not discuss caching and related issues here as they are well documented elsewhere.
Василий Сорокин, Простой REST сервер на Qt с рефлексиейSergey Platonov
Библиотека Qt имеет довольно мощную систему рефлексии. На примере простого в использовании класса, позволяющего с помощью наследования быстро построить REST сервер под ваши нужды, я покажу как элегантно ее можно задействовать в реальной жизни. В заключительной части, покажу еще один пример когда рефлексия Qt помогает красиво протестировать испускание сигналов классом.
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
Антон Бикинеев, Writing good std::future< C++ >Sergey Platonov
В докладе Антон расскажет о грядущих мажорных изменениях языка, которые, не войдя в Стандарт 17-го года и оставшись в Technical Specifications, будут ждать своего мержа в 20-м, а также быть уже реализованными в некоторых компиляторах. Осветятся также минорные, уже одобренные фичи следующего Стандарта, как языковые, так и библиотечные. Антон расскажет об их целях, покажет методы использования, а также осветит некоторые гайдлайны и трики.
Павел Филонов, Разделяй и управляй вместе с Conan.ioSergey Platonov
Несмотря на солидный возраст С++, одной из больших проблем, возникающих при разработке с его использованием, до сих пор является управление зависимостям. Особенно остро этот вопрос возникает при наличии нескольких различных целевых платформ. В докладе будет рассмотрено, как менеджер пакетов Conan.io позволяет решить проблему управления зависимостями и, как следствие, значительно улучшить скорость разработки на C++ и повысить модульность разрабатываемых систем.
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
Хочется чего-то новенького, необычного? Тогда добро пожаловать в мир чудеc C++17:
if constexpr (auto& [number, ok] = variable; ok)
return "Hi"
else
return number + 42;
Вы услышите о новом стандарте C++, обнаружите для себя новые полезные классы, функции и возможности языка. Для каждой новинки я приведу примеры использования, расскажу о нюансах и подводных камнях.
А ещё вы узнаете о том, как проходят заседания комитета по стандартизации C++ и сможете задать интересующие вас вопросы связанные с нововведениями С++17 и С++Next.
Павел Беликов, Как избежать ошибок, используя современный C++Sergey Platonov
Одной из проблем C++ является большое количество конструкций, поведение которых не определено или просто неожиданно для программиста. С такими ошибками мы часто сталкиваемся при разработке статического анализатора кода. Но, как известно, лучше всего находить ошибки ещё на этапе компиляции. На этом докладе мы поговорим о том, какие техники из современного C++ позволяют писать не только более простой и выразительный, но и безопасный код. Вы увидите ошибки в коде различных Open Source проектов и узнаете, как можно их избежать, используя новые стандарты
Тестирование графического интерфейса пользователя является одним из основных видов тестирования графических приложений. В докладе будут рассмотрены задачи и особенности такого тестирования.
Далее будут рассмотрены плюсы и минусы использования стандартной Qt библиотеки QTest, и представлен проект QSpec, как альтернатива QTest. Также будут представлены примеры использования QSpec и дальнейшие планы по развитию этого проекта.
Адрес проекта: https://github.com/ugeneunipro/QSpec
Не так давно Гор Нишанов представил свой доклад: C++ Coroutines a negative overhead abstraction. В этом докладе Гор упомянул, что предложенный дизайн корутин позволяет их использовать практически в любых окружениях, в том числе и с "бедным" C++ рантаймом.
Я решил попробовать запустить корутины в следующих окружениях: обычное приложение, драйвер ОС Windows, EFI приложение. Только в одном из этих окружений есть полноценный C++ рантайм и поддержка исключений, в остальных ничего этого нет. Более того, EFI приложение вообще выполняется до старта ОС.
Я хочу рассказать о том, как мне удалось запустить корутины в этих окружениях, поговорим о том, какие проблемы существуют в асинхронном системном программировании и как их можно обойти.
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisGlobus
JASMIN is the UK’s high-performance data analysis platform for environmental science, operated by STFC on behalf of the UK Natural Environment Research Council (NERC). In addition to its role in hosting the CEDA Archive (NERC’s long-term repository for climate, atmospheric science & Earth observation data in the UK), JASMIN provides a collaborative platform to a community of around 2,000 scientists in the UK and beyond, providing nearly 400 environmental science projects with working space, compute resources and tools to facilitate their work. High-performance data transfer into and out of JASMIN has always been a key feature, with many scientists bringing model outputs from supercomputers elsewhere in the UK, to analyse against observational or other model data in the CEDA Archive. A growing number of JASMIN users are now realising the benefits of using the Globus service to provide reliable and efficient data movement and other tasks in this and other contexts. Further use cases involve long-distance (intercontinental) transfers to and from JASMIN, and collecting results from a mobile atmospheric radar system, pushing data to JASMIN via a lightweight Globus deployment. We provide details of how Globus fits into our current infrastructure, our experience of the recent migration to GCSv5.4, and of our interest in developing use of the wider ecosystem of Globus services for the benefit of our user community.
Experience our free, in-depth three-part Tendenci Platform Corporate Membership Management workshop series! In Session 1 on May 14th, 2024, we began with an Introduction and Setup, mastering the configuration of your Corporate Membership Module settings to establish membership types, applications, and more. Then, on May 16th, 2024, in Session 2, we focused on binding individual members to a Corporate Membership and Corporate Reps, teaching you how to add individual members and assign Corporate Representatives to manage dues, renewals, and associated members. Finally, on May 28th, 2024, in Session 3, we covered questions and concerns, addressing any queries or issues you may have.
For more Tendenci AMS events, check out www.tendenci.com/events
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
In this slide, we show the simulation example and the way to compile this solver.
In this solver, the Helmholtz equation can be solved by helmholtzFoam. Also, the Helmholtz equation with uniformly dispersed bubbles can be simulated by helmholtzBubbleFoam.
Developing Distributed High-performance Computing Capabilities of an Open Sci...Globus
COVID-19 had an unprecedented impact on scientific collaboration. The pandemic and its broad response from the scientific community has forged new relationships among public health practitioners, mathematical modelers, and scientific computing specialists, while revealing critical gaps in exploiting advanced computing systems to support urgent decision making. Informed by our team’s work in applying high-performance computing in support of public health decision makers during the COVID-19 pandemic, we present how Globus technologies are enabling the development of an open science platform for robust epidemic analysis, with the goal of collaborative, secure, distributed, on-demand, and fast time-to-solution analyses to support public health.
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxrickgrimesss22
Discover the essential features to incorporate in your Winzo clone app to boost business growth, enhance user engagement, and drive revenue. Learn how to create a compelling gaming experience that stands out in the competitive market.
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar
The European Union Agency for Law Enforcement Cooperation (Europol) has suffered an alleged data breach after a notorious threat actor claimed to have exfiltrated data from its systems. Infamous data leaker IntelBroker posted on the even more infamous BreachForums hacking forum, saying that Europol suffered a data breach this month.
The alleged breach affected Europol agencies CCSE, EC3, Europol Platform for Experts, Law Enforcement Forum, and SIRIUS. Infiltration of these entities can disrupt ongoing investigations and compromise sensitive intelligence shared among international law enforcement agencies.
However, this is neither the first nor the last activity of IntekBroker. We have compiled for you what happened in the last few days. To track such hacker activities on dark web sources like hacker forums, private Telegram channels, and other hidden platforms where cyber threats often originate, you can check SOCRadar’s Dark Web News.
Stay Informed on Threat Actors’ Activity on the Dark Web with SOCRadar!
Globus Connect Server Deep Dive - GlobusWorld 2024Globus
We explore the Globus Connect Server (GCS) architecture and experiment with advanced configuration options and use cases. This content is targeted at system administrators who are familiar with GCS and currently operate—or are planning to operate—broader deployments at their institution.
In software engineering, the right architecture is essential for robust, scalable platforms. Wix has undergone a pivotal shift from event sourcing to a CRUD-based model for its microservices. This talk will chart the course of this pivotal journey.
Event sourcing, which records state changes as immutable events, provided robust auditing and "time travel" debugging for Wix Stores' microservices. Despite its benefits, the complexity it introduced in state management slowed development. Wix responded by adopting a simpler, unified CRUD model. This talk will explore the challenges of event sourcing and the advantages of Wix's new "CRUD on steroids" approach, which streamlines API integration and domain event management while preserving data integrity and system resilience.
Participants will gain valuable insights into Wix's strategies for ensuring atomicity in database updates and event production, as well as caching, materialization, and performance optimization techniques within a distributed system.
Join us to discover how Wix has mastered the art of balancing simplicity and extensibility, and learn how the re-adoption of the modest CRUD has turbocharged their development velocity, resilience, and scalability in a high-growth environment.
Into the Box Keynote Day 2: Unveiling amazing updates and announcements for modern CFML developers! Get ready for exciting releases and updates on Ortus tools and products. Stay tuned for cutting-edge innovations designed to boost your productivity.
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Globus
The U.S. Geological Survey (USGS) has made substantial investments in meeting evolving scientific, technical, and policy driven demands on storing, managing, and delivering data. As these demands continue to grow in complexity and scale, the USGS must continue to explore innovative solutions to improve its management, curation, sharing, delivering, and preservation approaches for large-scale research data. Supporting these needs, the USGS has partnered with the University of Chicago-Globus to research and develop advanced repository components and workflows leveraging its current investment in Globus. The primary outcome of this partnership includes the development of a prototype enterprise repository, driven by USGS Data Release requirements, through exploration and implementation of the entire suite of the Globus platform offerings, including Globus Flow, Globus Auth, Globus Transfer, and Globus Search. This presentation will provide insights into this research partnership, introduce the unique requirements and challenges being addressed and provide relevant project progress.
Check out the webinar slides to learn more about how XfilesPro transforms Salesforce document management by leveraging its world-class applications. For more details, please connect with sales@xfilespro.com
If you want to watch the on-demand webinar, please click here: https://www.xfilespro.com/webinars/salesforce-document-management-2-0-smarter-faster-better/
May Marketo Masterclass, London MUG May 22 2024.pdfAdele Miller
Can't make Adobe Summit in Vegas? No sweat because the EMEA Marketo Engage Champions are coming to London to share their Summit sessions, insights and more!
This is a MUG with a twist you don't want to miss.
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Anthony Dahanne
Les Buildpacks existent depuis plus de 10 ans ! D’abord, ils étaient utilisés pour détecter et construire une application avant de la déployer sur certains PaaS. Ensuite, nous avons pu créer des images Docker (OCI) avec leur dernière génération, les Cloud Native Buildpacks (CNCF en incubation). Sont-ils une bonne alternative au Dockerfile ? Que sont les buildpacks Paketo ? Quelles communautés les soutiennent et comment ?
Venez le découvrir lors de cette session ignite
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...informapgpstrackings
Keep tabs on your field staff effortlessly with Informap Technology Centre LLC. Real-time tracking, task assignment, and smart features for efficient management. Request a live demo today!
For more details, visit us : https://informapuae.com/field-staff-tracking/
Code reviews are vital for ensuring good code quality. They serve as one of our last lines of defense against bugs and subpar code reaching production.
Yet, they often turn into annoying tasks riddled with frustration, hostility, unclear feedback and lack of standards. How can we improve this crucial process?
In this session we will cover:
- The Art of Effective Code Reviews
- Streamlining the Review Process
- Elevating Reviews with Automated Tools
By the end of this presentation, you'll have the knowledge on how to organize and improve your code review proces
Accelerate Enterprise Software Engineering with PlatformlessWSO2
Key takeaways:
Challenges of building platforms and the benefits of platformless.
Key principles of platformless, including API-first, cloud-native middleware, platform engineering, and developer experience.
How Choreo enables the platformless experience.
How key concepts like application architecture, domain-driven design, zero trust, and cell-based architecture are inherently a part of Choreo.
Demo of an end-to-end app built and deployed on Choreo.
2. In this session we will discuss…
Multi-threaded vs. Multi-Process
Choosing between Multi-Core or Multi-
Threaded development
Considerations in making your choices
Scalability
Summary and Q&A
3. Moore’s Law Going Multicore
Instead of doing everything in a linear fashion, programmers
need to ensure applications are designed for parallel tasking.
Increase in clock speed, allowing software to automatically
run faster. No longer obliged to Moore’s law
4. Multi-threaded Development: Pros
Easy and fast to communicate and share data
between threads.
Easy to communicate with parent process.
Beneficial for large datasets that can’t be divided to
sub sets.
Supported by many libraries.
5. Multi-threaded Development: Cons
One thread crashes the whole process crashes
Multi-threaded apps are hard to debug
Shared data requires a set of (difficult to maintain)
locks
Too many threads too much time in context-
switching.
Not scalable to other machines / public cloud
6. Multi-process Development: Pros
Includes multi-threaded by definition.
Process crash won’t harm other processes.
Easier to debug
Less lock issues – depending on the
infrastructure/API used.
Scalable – distributed computing public cloud
7. Multi-process Development: Cons
Custom development required in order to
communicate between processes
Requires special mechanism to share memory
data between processes
Smaller set of supporting libraries
8. Synch/no-synch
Large data sets
Ease of development
Scaling - Compute time and intensity
Multi-threaded vs. Multi-core:
List of Considerations
9. Easier in multi-threaded
Easier debug in multi-threaded
In multi-process, will require custom
development
Many mechanisms exists to allow this --
both for multi-process and multi-threaded
Synchronization/State Maintenance
10. Pre-made libraries for multi-threaded
MP - Easier debug/maintenance/code understanding /
less bugs will be introduced with new commits
MP - Can be developed and maintained by
less experienced developers
MP - Requires developer to maintain encapsulation
Bugs are less complicated to solve when MT is not involved
Ease of Development –
Multi-Threaded vs. Multi-Process
11. How many tasks do I have to execute in parallel –
dozens /millions
How many tasks will my product need to support in the
future?
How much time will each task take? Milliseconds or
minutes?
How much memory will each task require?
How large is the data that each task requires?
Throughput & scalability - 1/2
12. How complex is each task’s code?
Is my system real-time
Would you benefit from scalability?
Business wise - scalability as a service?
Offloading
Throughput & scalability - 2/2
13. Do my tasks require special hardware?
Will my tasks perform better with specific hardware?
Connection to a database
Other Questions
14. Let’s have a look at a real-life scenario
Maven vs Make (What are these?)
• Common
• Many tasks
• Tasks are atomic
• Minimal communication
• Small dataset
• Scalability
15. Scenarios – Build system approach: Maven
• Multi-threaded code was only added
recently:
16. Scenarios – build system approach: Maven
• Not Scalable: Users are asking for it, but it is
still missing multi-process invocation.
24. Common high-throughput scenarios and
decision
Multi-threaded:
• Large Mesh – Memory (CAD, AI (connections
between objects), weather forecasting,
genetic algorithms) –
Needs all the data to be in-memory and
accessible for all tasks.
25. Common high-throughput scenarios and
decision
Multi-threaded:
• Real time – financial transactions, defense
systems
Latency and initialization time are very
important.
26. Common high-throughput scenarios and
decision
Multi-Threading:
• Applications which most of the calculation
(business logic) is DB related (stored
procedures)
CRM, ERP, SAP
27. Common high-throughput scenarios and
decisions
Multi-threaded code:
• Simple scenarios
• Real-time applications
• Long initialization time with short
computation time
• Communication, synchs and states
• Only a few highly intensive tasks.
28. Common high-throughput scenarios and
decision
Multi-Processing:
Large independent dataset: when we don’t need all
data in-memory at the same time.
Low dependencies between data entities.
• Simulations (transient analysis) – Ansys, PSCad
• Financial derivatives – Morgan Stanley
• Rendering
29. Common high-throughput scenarios and
decision
Multi-Processing:
When we have Many calculations with small business
units.
Solution: batch tasks
• Compilations
• Testing (unit tests, API tests, stress tests)
• Code analysis
• Asset builds
• Math calculations (Banking, Insurance, Diamond
industry).
31. Common high-throughput scenarios and
decision
Multi-Processing:
• When applications stream output of
computation:
NVIDIA Shield, Onlive Service, Netflix
34. Summary - Writing Scalable Apps:
Architectural considerations :
• Can my execution be broken to many independent tasks?
• Can the work be divided over more than a single host?
• Do I have large datasets I need to work with?
• How many relations are in my dataset?
• How much time would it take my customers to execute a
large scenario – do I have large scenarios?
35. Summary - Writing Scalable app:
Technical considerations:
• Do I have any special communication and
synchronization requirements?
• Dev Complexity - What risks can we have in terms of
race-conditions, timing issues, sharing violations –
does it justify multi-threading programming?
• Would I like to scale processing performance by
using the cloud or cluster?
36. Moving to multi-core
Some of the known infrastructures to using
multi-core/multi-machine solutions:
• MapReduce (Google – dedicated grid)
• Hadoop (Open source – dedicated grid)
• Univa Grid Engine(Propriety – dedicated grid)
• IncrediBuild (Propriety - ad-hoc process
virtualization grid)
37.
38. Dori Exterman, IncrediBuild CTO
dori.exterman@incredibuild.com
Download IncrediBuild today – free on 4 core
local machine
http://www.incredibuild.com
Editor's Notes
Good morning everyone, my name is Dori Exterman. I’m the CTO at IncrediBuild
In this session we will discuss the advantages and disadvantages of multi-threaded programming vs multi-process programming.We will discuss major differences, common scenarios and considerations of choosing one over another.Finally, We will discuss architectural and design considerations on writing scalable applications.
Lets talk a bit about Moore Law: The main guide lines of this law declares that the processor power will be doubled every 2 years. This leads the software developer to believe that if some tasks are slow today, soon the processors clock time will become faster and the problem will be solved by itself.
For the past few years the processors clock time remained more or less the same and it’s obvious today that Moor’s law is not going to stay for long and that the entire industry is going for multiple processing power.
However, unlike the past - In order to benefit from multi-core infrastructure your executions should be designed in a manner that will allow them to utilize multiple core, utilizing multiple cores means
Parallelizing execution tasks, which translates into
Reducing dependencies
Scalable design
Let’s talk about multi-threaded code.
Multi-threading has its merits. First, everyone has a single core computer. Modern OS utilize a single core in a way that simulate multi-threaded apps.The user is led to believe that several apps run at once. For example, When one thread is waiting for I/O to complete another thread can run. I should note that this is not actual multi-processing since the threads are not all active at the same time. Yes, this does allow simulation of multi-core. I call it simulation of multi-core for the poor. Bad simulation. Since this is not actual multi-core and no apps are actually running in parallel. even with a standard 4 cores desktop machine there are still too many threads to run in parallel.While running multi-threaded application on one machine all data can be shared by all threads. This is done by means such as variables and classes. There is no need to replicate data.Another advantage of multi-threaded apps is library support. many available libraries today support multi-threaded apps by providing a ‘thread-safe’ interface. Build-blocks with supporting libraries enabled us to easily construct our own multi-threaded code. Finally, Multi-threaded code has great benefits when using large dataset.
There are also disadvantages in Multi-threaded code. As mentioned earlier Multi-threaded code is not real multi-core. it is not multi core in the sense of parallel computing. Unless appropriate solutions are used. Another problem rises when too many threads are all used at once. Processor has to spend too much time content switching on the expense of actual processing.
Yes, multi-threaded code does allow us to easily share data. But this data is maintained with a set of locks. I should mention that locks are only required when writing is involved. In case of read-only. No locks are required.
It is also difficult to debug multi-threaded apps. Not only difficult but almost impossible. For example, when setting a breakpoint in one of the threads. When this breakpoint occurs it stops not only the thread we wanted but also stops all the others.
Why go multi-core?multi-core does not necessarily mean not multi-threaded. Our code can be both multi-core and multi-threaded.
You also get a real multi-core. you can actually write applications that run in parallel. This is no simulation. This is the real thing. process is independent of other processes in the system – easier to implement stand-alone or independent components in the system using processes.You also have less lock issues. Yes, if the application is implemented as if it was combined as two threads you will suffer the same complexities.But if the data is replicated (and then merged back – when and if needed) the lock issues no longer exist.Another important advantage concerns crashing – when a thread crash it crases the whole process. But a process crashing hardly harm other processes.That is, of course, Unless this is a kernel-space process we are talking about…Finally, if the right infrastructure is used and the code is scalable. You can just add another machine and your performance easily increases. No need to throw away the old machines!
There are also disadvantages in Multi-process code: multi-process code requires custom development in order to communicate between processes, in order to share data and in order to maintain locks and synchronization (where needed). Also, the number of supporting libraries, comparting to thread-safe libraries is relatively small.
Now for one of the more important parts of the talk: can we divide our code and still conquer? Does most of our code need to be in sync with other parts? maybe we can cut it into hundreds of small pieces which run in parallel and put it back together?
is it important for us to maintain our code easily? Debug it easily? Is it important for us to scale it? Another questions that rises - should compute intensive tasks be treated differently?
If your parallel elements (either threads or processes) require large synchronization and are not encapsulated elements , MT (multi-thread) can be a benefit in terms of ease of development because you can easily share information between threads. Sharing information and maintaining states between multiple processes can be more of a challenge as the developer will need to apply his own logical mechanisms. In order to achieve the same in multi-process architecture the developer should implement an element through which the processes will be able to communicate \ synch – such as server application, shared memory, direct (peer 2 peer) tcp communications, database, etc
Achieving this in multi-threading is easier both in development and in debugging
*****
Developing multi-threaded code is easier since many libraries already contain thread-safe methods.On the other hand, it is easier to debug a single process in multi-process environment.
Developing for multi process is easier. It is easier to maintaining encapsulation. Less experienced developers can maintain the code with less difficulty. Easier to debug, easier to maintain, easier to understand and less bugs are likely to happen. When bugs do happen – they are much easier to solve.
How many tasks do I have to run in parallel? What are the present and the future requirements?What is the duration of the tasks? What are the dependencies between the tasks. What are the resource requirements for each task? In term of Memory, CPU and dataset
Scalability offers not only more CPU but can offer more GPU, memory, cumulative I/O power and more and more.
Simple tasks are easier to scale, on the contrary we might not want to scale real-time tasks due to lower latency of inter-process communication.
Multi-process code provides an easier way to get scalability. When working with multi process code you can more easily use clusters \ grid solutions or the public cloud to get more compute resources on demand.
When using a multi-process code you can transform your code from working on a single machine to multiple-machine. There are even some solutions that allow you to scale and use idle machines and cores across your network or public cloud without you needing to code anything in order to achieve this scalability. If we'll have time later on I'll be able to elaborate a bit on that.
In order to verify whether this scenario is relevant for your product you’ll need to consider to points above. It is highly important to consider future requirements as well, because once the product is mature, it will be much more difficult to change its architecture (although doable). If you have millions of very short tasks (5 milli for example), can you batch them together?
For real-time performance you might want to consider multi-threaded especially in scenarios in which the tasks require data to be loaded to work with.
If scalability can be beneficial to your customers, you can consider selling it separately, as a service. Such as cloud services are doing today. There is also the possibility of complete offloading (all heavy tasks will be executed remotely leaving the machine ready for work and also enables a faster tasks completion ). One example is grapics rendering. Where rendering on a local desktop it can be important in graphic rendering).
-- add explanation that multi-threaded must all be off-loaded. Multi-core can benefit also from local machine or off-load some of the tasks.
What about tasks which require special hardware?
In case that my tasks have mandatory need for special hardware - it might be impossible to scale it. If the hardware is only used to accelerate some of the tasks, it is easier to scale it. Although the impact of scaling is not as efficient.What if the process requires connection to database? Too many db connections per process may suffocate your DB. Perhaps it is possible to have a single connection per machine?
Multi-process application can be idle when you have to wait for other process to complete. For example whensome of the processes are using special hardware.
Let’s take a look at a real-life scenario: automatic build scripts. In particular make and maven. Both of them are used to build a big project out of small files. Small files – many tasks – where most of them are independent. Once a decision to run a task is made, the task runs independently of other tasks in the same build. Sometimes there is a minimal communication while the tasks are running.We also have a small dataset. Which is mostly read-only. Most of the data is composed of included files and source code. Hence the whole process is scalable. At least of for the local machine.
One of the approaches to system build is maven – maven build configuration is a structured xml with known phases, each phase with a specific (recommended) role. Multi-threaded code support was only added about 18 months ago. What about multi-process?
Unfortunately – Maven does not support multi-processing. In this slide you can see users asking for mutli-process support to increase build speed. Unfortunately for them – the platform lacks the support.
This raises the question: do users really need multi-core?The answer is yes, users need multi-core for several reasons.
First . Programmers building with open-source too often need to compile open-source code as part of their project.Hence They have larger and larger source code which one machine however powerful is slow to compile which impact their productivity and time-to-market a lot! Especially when moving to Agile continuous integration . Another example is DevOps which requires a build to include more tasks such as automated testing, staging, etc
Finally , They require multi-core in order for 3rd parties to develop solution for tasks distribution
This is a slide from the incredibuild’ GUI. In this slide we can see a representation of a Visual Studio build building QT with a single core. To the left we can see machine IP and core id, to the right in colors we see build’s tasks.
This slide visualizes a Visual Studio build building QT with 8 cores.We can see that there are some inefficient utilization of multiple cores
Each solution has its own benefits but that essentially, these solutions could be and were implemented because Make was developed in a multi-process manner. Process distribution can be only applied to multi process and not multi-threaded solutions.
We should also note that most modern build system are multi-process and not multi-threaded.Modern popular multi-process build tools – such as – Visual Studio, Scons, Ninja, JAM, MSBuild, JOM, Gradle, WAF, Ruby and many more.
IncrediBuild’s generic process distribution technology supports all these tools out-of-the-box for example but it is unable to support Maven.
This slide visualizes a Visual Studio build building QT with 8 cores.We can see that performance was improved by 30% due to better dependency detection and task parallelization and ordering
This slide visualizes a Visual Studio build building QT with 130 cores, from which 122 are remote cores from other machines.We can see that performance was improved by and additional 1000% due to better parallelization and resource utilization
This slide visualizes a Visual Studio build building QT with 130 cores, from which 122 are remote cores from other machines.We can see that performance was improved by and additional 1000% due to better parallelization and resource utilization
Lets talk about more scenarios: how about an application that requires all data to be in-memory at the same time? For example scientific applications, weather forecast simulation and so on.
Some applications are heavily dependent on DB queries. Where most of the queries is read-only and the minority are write-operations. Such applications are CRM, ERP and SAP. It is possible to split the calculation between several processing units – which are processes hence have a multi-process application.
Another scenarios include real-time applications. Which might include long initialization time comparing to short computation. Inter-process communication overhead. In this kind of scenario a multi-process code would impact performance severally.
Sometimes we have large dataset with small to no dependencies. In this case it is easier to write a mutli-processing code. For example, code that does billing during a night-job. It has to maintain bookkeeping for all activities of several customers all at once. While there is no dependencies between the customers. This provides a great chance to increase performance by splitting small tasks to many CPUs.
In some cases we need to have many operations on the same input data. In those cases we could split the calculation into many small business units. One example is Sarin. Sarin sells software that analyses diamonds and other gems according to images of the gem. They had thousands of small calculation and were able to parallel all the tasks and achieve significant performance increase.
Another great example is an application which use GPU, GPU usage by nature is off-loading processing from the CPU to the GPU where the more processing units the GPU owns the faster the processing is. Most graphic card manufactures allows seamlessly increase in performance using SLI configurations. SLI configuration allows to put more than one graphic card to the machine in order to increase the number of available GPU processing units. While the driver and the sdk makes the increase of processing units seamless.Another great example is An application made to run with GPUs is highly scalable.
What about streaming services? The nvidia shield which was announces recently is a set-top box which allows anyone to play high-quality heavy processing graphic games at the ease of their home using remote farm of high-performance computers. The onlive service is similar, enabling you to install the OnLive application on any machine. Even aged one and being able to play the best and most graphics intensive games. Without having to add additional hardware.As for Netflix, I believe that I don’t need to elaborate on this one.
When the output is remote we can always distribute the computation and stream out the results.
Why go multi-core?When you need more performance – just add another machine. No need to throw away the old ones.You also get a real multi-core. you can actually write apps that run in parallel. This is no simulation. This is the real thing. Each process is independent of other processes in the system – easier to implement stand-alone or independent components in the system.Last – multi-core does not necessarily mean not multi-threaded. App can be both multi-core and multi-threaded.
Why not go multi-core? first – as mentioned earlier each process is independent of another. It is hared to predict the behavior of the code.Second – we need to write our code in a way that the inter-communication take advantage of multi-core. while some support for multi-threaded code was added to C++11, for example.None was added to support multi-core.