Thesis - LLVM toolchain support as a plug-in for Eclipse CDTTuononenP
Integrates LLVM toolchain tools to Eclipse CDT IDE. It allows build automation and configuration via GUI. The first and currently the only cross-platform and open-source IDE that supports LLVM via this plug-in.
Tilmann Scheller discusses the various ways the LLVM compiler is being used for C/C++ toolchains, various programming languages and runtime systems, GPU's and the web.
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...corehard_by
Использование сторонних библиотек в языке C++ никогда не было простым - необходимо было правильно собрать их, имея дело с различными системами сборки, но с появлением пакетного менеджера conan.io процесс стал намного проще, так что теперь осталось только сделать пакеты для нужным библиотек, и в этом поможет команда bincrafter-ов.
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019corehard_by
C++ is known for things such as performance, expressiveness, the lack of a standard build system and package management, complexity and long compile times. The inability to iterate quickly is one of the biggest killers of productivity. This talk is aimed at anyone interested in improving the last of these points - it will provide insights into why compilation (and linking) take so long for C++ and will then provide an exhaustive list of techniques and tools to mitigate the problem, such as: - tooling and infrastructure - hardware, build systems, caching, distributed builds, diagnostics of bottlenecks, code hygiene - techniques - unity builds, precompiled headers, linking (static vs shared libraries) - source code modification - the PIMPL idiom, better template use, annotations - modules - what they are, when they are coming to C++ and what becomes obsolete because of them
Thesis - LLVM toolchain support as a plug-in for Eclipse CDTTuononenP
Integrates LLVM toolchain tools to Eclipse CDT IDE. It allows build automation and configuration via GUI. The first and currently the only cross-platform and open-source IDE that supports LLVM via this plug-in.
Tilmann Scheller discusses the various ways the LLVM compiler is being used for C/C++ toolchains, various programming languages and runtime systems, GPU's and the web.
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...corehard_by
Использование сторонних библиотек в языке C++ никогда не было простым - необходимо было правильно собрать их, имея дело с различными системами сборки, но с появлением пакетного менеджера conan.io процесс стал намного проще, так что теперь осталось только сделать пакеты для нужным библиотек, и в этом поможет команда bincrafter-ов.
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019corehard_by
C++ is known for things such as performance, expressiveness, the lack of a standard build system and package management, complexity and long compile times. The inability to iterate quickly is one of the biggest killers of productivity. This talk is aimed at anyone interested in improving the last of these points - it will provide insights into why compilation (and linking) take so long for C++ and will then provide an exhaustive list of techniques and tools to mitigate the problem, such as: - tooling and infrastructure - hardware, build systems, caching, distributed builds, diagnostics of bottlenecks, code hygiene - techniques - unity builds, precompiled headers, linking (static vs shared libraries) - source code modification - the PIMPL idiom, better template use, annotations - modules - what they are, when they are coming to C++ and what becomes obsolete because of them
Presentation on MinGw Compiler.
This compiler's continuing goal of minimizing extra DLLs, winpthreads has been compiled statically.
https://techbyavnish.blogspot.com/
LCU14 209- LLVM Linux
---------------------------------------------------
Speaker: Behan Webster
Date: September 16, 2014
---------------------------------------------------
★ Session Summary ★
This session will provide an update on the status of the LLVMLinux project; a project which is cooperating with both the Linux kernel and LLVM communities to build the Linux kernel with Clang/LLVM. This talk will also cover new things in LLVM which make clang even more attractive to the kernel community. LLVM is an extensive compiler technology suite which is already commonplace from Android/Renderscript and OpenCL through to high performance computing clusters.
---------------------------------------------------
★ Resources ★
Zerista: http://lcu14.zerista.com/event/member/137735
Google Event: https://plus.google.com/u/0/events/cp34l6uc5rmu189qn8eq3ps3bkc
Video: https://www.youtube.com/watch?v=gcVQxjb6iQ4&list=UUIVqQKxCyQLJS6xvSmfndLA
Etherpad: http://pad.linaro.org/p/lcu14-209
---------------------------------------------------
★ Event Details ★
Linaro Connect USA - #LCU14
September 15-19th, 2014
Hyatt Regency San Francisco Airport
---------------------------------------------------
http://www.linaro.org
http://connect.linaro.org
Cloud Native TLV Meetup: Securing Containerized Applications PrimerPhil Estes
A talk give on Tuesday, January 28th, 2020 at the Tel Aviv, Israel Cloud Native meetup covering the core concepts of how to secure containerized applications in a Kubernetes context.
Kyua ( https://github.com/jmmv/kyua/ ) is a framework for running tests,
and generating test reports. It was written
by Julio Merino, as follow-on work
to the Automated Testing Framework (ATF) ( https://github.com/jmmv/atf ) which
he developed for the NetBSD project
during the 2007 Google Summer of Code.
Kyua is actively used in NetBSD and FreeBSD
for testing those operating systems. It is also
used actively in several companies who have BSD based products.
This talk will cover:
- how to write test cases in Bourne shell and C
- how to run the tests
- how to generate reports
- how to integrate test reports with Jenkins
GraalVM – a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages.
Securing Containerized Applications: A PrimerPhil Estes
A talk given at Devoxx Morocco on Wednesday, November 13, 2019. In this talk a very insecure sample (demo) application is used to explain the various security principles application developers can apply when using containers and Kubernetes--from image sourcing, content, scanning to resource controls, attack surface mitigation, and reducing privilege for containers.
Enabling Security via Container RuntimesPhil Estes
A talk given at the Google-hosted Container Security Summit on Wednesday, February 12th, 2020 in Seattle, Washington. This talk covered the impact of work done at the lower-level runtimes layer and up through layers like cri-o, containerd, and Docker to bring specific security features to overall platforms like Kubernetes.
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5David Voyles
The video for this talk can be found here:https://channel9.msdn.com/Blogs/raw-tech/Getting-started-with-Emscripten--Transpiling-C--C-to-JavaScript--HTML5
I cover how to transpile code from C/C++ to HTML5/JS using Emscripten, an open source compiler tool from Mozilla and Alon Zakai.
As modern, agile architects and developers we need to master several different languages and technologies all at once to build state-of-the-art solutions and yet be 100% productive. We define our development environments using Gradle. We implement our software in Java, Kotlin or another JVM based language. We use Groovy or Scala to test our code at different layers. We construct the build pipelines for our software using a Groovy DSL or JSON. We use YAML and Python to describe the infrastructure and the deployment for our applications. We document our architectures using AsciiDoc and JRuby. Welcome to Babel!
Making the right choices in the multitude of available languages and technologies is not easy. Randomly combining every hip technology out there will surely lead into chaos. What we need is a customized, streamlined tool chain and technology stack that fits the project, your team and the customer’s ecosystem all at once. This code intense, polyglot session is an opinionated journey into the modern era of software industrialization.
Presentation on MinGw Compiler.
This compiler's continuing goal of minimizing extra DLLs, winpthreads has been compiled statically.
https://techbyavnish.blogspot.com/
LCU14 209- LLVM Linux
---------------------------------------------------
Speaker: Behan Webster
Date: September 16, 2014
---------------------------------------------------
★ Session Summary ★
This session will provide an update on the status of the LLVMLinux project; a project which is cooperating with both the Linux kernel and LLVM communities to build the Linux kernel with Clang/LLVM. This talk will also cover new things in LLVM which make clang even more attractive to the kernel community. LLVM is an extensive compiler technology suite which is already commonplace from Android/Renderscript and OpenCL through to high performance computing clusters.
---------------------------------------------------
★ Resources ★
Zerista: http://lcu14.zerista.com/event/member/137735
Google Event: https://plus.google.com/u/0/events/cp34l6uc5rmu189qn8eq3ps3bkc
Video: https://www.youtube.com/watch?v=gcVQxjb6iQ4&list=UUIVqQKxCyQLJS6xvSmfndLA
Etherpad: http://pad.linaro.org/p/lcu14-209
---------------------------------------------------
★ Event Details ★
Linaro Connect USA - #LCU14
September 15-19th, 2014
Hyatt Regency San Francisco Airport
---------------------------------------------------
http://www.linaro.org
http://connect.linaro.org
Cloud Native TLV Meetup: Securing Containerized Applications PrimerPhil Estes
A talk give on Tuesday, January 28th, 2020 at the Tel Aviv, Israel Cloud Native meetup covering the core concepts of how to secure containerized applications in a Kubernetes context.
Kyua ( https://github.com/jmmv/kyua/ ) is a framework for running tests,
and generating test reports. It was written
by Julio Merino, as follow-on work
to the Automated Testing Framework (ATF) ( https://github.com/jmmv/atf ) which
he developed for the NetBSD project
during the 2007 Google Summer of Code.
Kyua is actively used in NetBSD and FreeBSD
for testing those operating systems. It is also
used actively in several companies who have BSD based products.
This talk will cover:
- how to write test cases in Bourne shell and C
- how to run the tests
- how to generate reports
- how to integrate test reports with Jenkins
GraalVM – a high-performance multilingual runtime. It is designed to accelerate the execution of applications written in Java and other JVM languages while also providing runtimes for JavaScript, Ruby, Python, and a number of other popular languages.
Securing Containerized Applications: A PrimerPhil Estes
A talk given at Devoxx Morocco on Wednesday, November 13, 2019. In this talk a very insecure sample (demo) application is used to explain the various security principles application developers can apply when using containers and Kubernetes--from image sourcing, content, scanning to resource controls, attack surface mitigation, and reducing privilege for containers.
Enabling Security via Container RuntimesPhil Estes
A talk given at the Google-hosted Container Security Summit on Wednesday, February 12th, 2020 in Seattle, Washington. This talk covered the impact of work done at the lower-level runtimes layer and up through layers like cri-o, containerd, and Docker to bring specific security features to overall platforms like Kubernetes.
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5David Voyles
The video for this talk can be found here:https://channel9.msdn.com/Blogs/raw-tech/Getting-started-with-Emscripten--Transpiling-C--C-to-JavaScript--HTML5
I cover how to transpile code from C/C++ to HTML5/JS using Emscripten, an open source compiler tool from Mozilla and Alon Zakai.
As modern, agile architects and developers we need to master several different languages and technologies all at once to build state-of-the-art solutions and yet be 100% productive. We define our development environments using Gradle. We implement our software in Java, Kotlin or another JVM based language. We use Groovy or Scala to test our code at different layers. We construct the build pipelines for our software using a Groovy DSL or JSON. We use YAML and Python to describe the infrastructure and the deployment for our applications. We document our architectures using AsciiDoc and JRuby. Welcome to Babel!
Making the right choices in the multitude of available languages and technologies is not easy. Randomly combining every hip technology out there will surely lead into chaos. What we need is a customized, streamlined tool chain and technology stack that fits the project, your team and the customer’s ecosystem all at once. This code intense, polyglot session is an opinionated journey into the modern era of software industrialization.
Everything-as-code - A polyglot adventureQAware GmbH
Devoxx 2017, Poland: Talk by Mario-Leander Reimer (@LeanderReimer, Principal Software Architect at QAware).
Abstract: As modern, agile architects and developers we need to master several different languages and technologies all at once to build state-of-the-art solutions and yet be 100% productive. We define our development environments using Gradle. We implement our software in Java, Kotlin or another JVM based language. We use Groovy or Scala to test our code at different layers. We construct the build pipelines for our software using a Groovy DSL or JSON. We use YAML and Python to describe the infrastructure and the deployment for our applications. We document our architectures using AsciiDoc and JRuby. Welcome to Babel!
Making the right choices in the multitude of available languages and technologies is not easy. Randomly combining every hip technology out there will surely lead into chaos. What we need is a customized, streamlined tool chain and technology stack that fits the project, your team and the customer’s ecosystem all at once. This code intense, polyglot session is an opinionated journey into the modern era of software industrialization.
Node.js Native AddOns from zero to hero - Nicola Del Gobbo - Codemotion Rome ...Codemotion
This talk is about creating Node.js interfaces for native libraries written in C or C++. It starts with various situations in which you need to build native addons and the common problems in doing that. I'll discuss the reference provided by the new N-API (Node-API) that helps mantainers to support a wide variety of Node.js releases without needing recompilation or abstraction layers. With all these tools and knowledge I'll show you how to build some addons from scratch and how to convert existing addons using the new N-API. The last part is related to future developments about addons.
This talk is about creating Node.js interfaces for native libraries written in C or C++. It starts with various situations in which you need to build native addons and the common problems in doing that. I'll discuss the reference provided by the new N-API (Node-API) that helps mantainers to support a wide variety of Node.js releases without needing recompilation or abstraction layers. With all these tools and knowledge I'll show you how to build some addons from scratch and how to convert existing addons using the new N-API. The last part is related to future developments about addons.
Intro to node.js - Ran Mizrahi (27/8/2014)Ran Mizrahi
Node.js is a platform built on Chrome V8 javascript runtime engine for building fast and scalable, non-blocking, real-time and network applications. In this session Ran will introduce node.js and how to develop large code bases using it. He'll cover the following aspects:
• What is node.js?
• Apache vs. Nginx performance (One thread per connection vs. event loop) and what it has to do with node.js.
• Why node was written in Javascript?
• Main tools and frameworks (Express, socket.io, mongoose etc.)
• TDD/BDD with node.js using mocha and Chai.
Ran Mizrahi, Founder of CoCycles, Passionate entrepreneur and software engineer who loves to continuously innovate and deliver meaningful products while having true fun with the right team.
The talk focuses on the processes and requirements to ship a software, which was written with MacRuby, to the end user. I present libraries and tools, that are helpful for this purpose and show how to use them.
For the full video of this presentation, please visit:
https://www.embedded-vision.com/platinum-members/intel/embedded-vision-training/videos/pages/may-2017-embedded-vision-summit-pisarevsky
For more information about embedded vision, please visit:
http://www.embedded-vision.com
Vadim Pisarevsky, Software Engineering Manager at Intel, presents the "Making OpenCV Code Run Fast" tutorial at the May 2017 Embedded Vision Summit.
OpenCV is the de facto standard framework for computer vision developers, with a 16+ year history, approximately one million lines of code, thousands of algorithms and tens of thousands of unit tests. While OpenCV delivers decent performance out-of-the-box for some classical algorithms on desktop PCs, it lacks sufficient performance when using some modern algorithms, such as deep neural networks, and when running on embedded platforms. Pisarevsky examines current and forthcoming approaches to performance optimization of OpenCV, including the existing OpenCL-based transparent API, newly added support for OpenVX, and early experimental results using Halide.
He demonstrates the use of the OpenCL-based transparent API on a popular CV problem: pedestrian detection. Because OpenCL does not provide good performance-portability, he explores additional approaches. He discusses how OpenVX support in OpenCV accelerates image processing pipelines and deep neural network execution. He also presents early experimental results using Halide, which provides a higher level of abstraction and ease of use, and is being actively considered for future support in OpenCV.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
Welocme to ViralQR, your best QR code generator.ViralQR
Welcome to ViralQR, your best QR code generator available on the market!
At ViralQR, we design static and dynamic QR codes. Our mission is to make business operations easier and customer engagement more powerful through the use of QR technology. Be it a small-scale business or a huge enterprise, our easy-to-use platform provides multiple choices that can be tailored according to your company's branding and marketing strategies.
Our Vision
We are here to make the process of creating QR codes easy and smooth, thus enhancing customer interaction and making business more fluid. We very strongly believe in the ability of QR codes to change the world for businesses in their interaction with customers and are set on making that technology accessible and usable far and wide.
Our Achievements
Ever since its inception, we have successfully served many clients by offering QR codes in their marketing, service delivery, and collection of feedback across various industries. Our platform has been recognized for its ease of use and amazing features, which helped a business to make QR codes.
Our Services
At ViralQR, here is a comprehensive suite of services that caters to your very needs:
Static QR Codes: Create free static QR codes. These QR codes are able to store significant information such as URLs, vCards, plain text, emails and SMS, Wi-Fi credentials, and Bitcoin addresses.
Dynamic QR codes: These also have all the advanced features but are subscription-based. They can directly link to PDF files, images, micro-landing pages, social accounts, review forms, business pages, and applications. In addition, they can be branded with CTAs, frames, patterns, colors, and logos to enhance your branding.
Pricing and Packages
Additionally, there is a 14-day free offer to ViralQR, which is an exceptional opportunity for new users to take a feel of this platform. One can easily subscribe from there and experience the full dynamic of using QR codes. The subscription plans are not only meant for business; they are priced very flexibly so that literally every business could afford to benefit from our service.
Why choose us?
ViralQR will provide services for marketing, advertising, catering, retail, and the like. The QR codes can be posted on fliers, packaging, merchandise, and banners, as well as to substitute for cash and cards in a restaurant or coffee shop. With QR codes integrated into your business, improve customer engagement and streamline operations.
Comprehensive Analytics
Subscribers of ViralQR receive detailed analytics and tracking tools in light of having a view of the core values of QR code performance. Our analytics dashboard shows aggregate views and unique views, as well as detailed information about each impression, including time, device, browser, and estimated location by city and country.
So, thank you for choosing ViralQR; we have an offer of nothing but the best in terms of QR code services to meet business diversity!
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™UiPathCommunity
In questo evento online gratuito, organizzato dalla Community Italiana di UiPath, potrai esplorare le nuove funzionalità di Autopilot, il tool che integra l'Intelligenza Artificiale nei processi di sviluppo e utilizzo delle Automazioni.
📕 Vedremo insieme alcuni esempi dell'utilizzo di Autopilot in diversi tool della Suite UiPath:
Autopilot per Studio Web
Autopilot per Studio
Autopilot per Apps
Clipboard AI
GenAI applicata alla Document Understanding
👨🏫👨💻 Speakers:
Stefano Negro, UiPath MVPx3, RPA Tech Lead @ BSP Consultant
Flavio Martinelli, UiPath MVP 2023, Technical Account Manager @UiPath
Andrei Tasca, RPA Solutions Team Lead @NTT Data
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
10. 아이디어의 시작은…
•
JVMs do all optimizations online at JIT time:
- Hugely redundant across runs
- Applications launch slowly
- What if we could do heavy lifting at install time?
!
•
Problem: Java bytecode is too limiting!
- Memory safety prevents some optzns (eg. bounds checks)
- JVM type system doesn’t lend itself to machine optzns
11. “
With some sort of low level virtual machine,
we could optimize better and a JIT compiler
would have to do less work online!
”
12. Introduction
•
LLVM
- Low-Level Virtual Machine
•
An Infrastructure for Multi-stage Optimization
- by Chris Arthur Lattner @2002
•
Design and Implementation of a compiler infrastructure
- support a unique multi-stage optimization system
- support inter-procedural and profile-driven optimizations
•
LLVM virtual instruction (IR)
- with high-level type information
•
Sponsored by APPLE
13. LLVM Vision and Approach
•
Primary mission: Build a set of modular compiler components:
- Reduces the time & cost to construct a particular compiler
- Components are shared across different compilers
- Allows choice of the right component for the job
•
Secondary mission: Build compilers out of these components
X86 PPC CBE clang GCC LTO
DWARF
Code
Target
gen
JIT Optzn linker IPO
BC IO LL IO System Core
Support xforms analysis
GC
...
14. Authors
•
Vikram Adve
- At University of Illinois
•
Chris Lattner
- LLVM: A Compilation Framework for Lifelong
Program Analysis & Transformation @2004
- Macroscopic Data Structure Analysis and
Optimization @2005 Ph.D Thesis
- work for Apple from 2007
•
Related Publications
- 15 < @2007, 30 ~ @2008, 50 ~ @2009, 30 ~ @2010
17. The Architecture
Libraries
Compiler FE 1
.
.
Compiler FE N
LLVM
.o
files
LLVM
LLVM
Native
CodeGen
Offline Reoptimizer
exe &
LLVM
exe
Linker
IPO / IPA
LLVM
exe
LLVM
CPU
exe
Link
Time
Runtime
Optimizer
LLVM
JIT
Compile
Time
Profile
& Trace
Info
Profile
Info
LLVM
Run-Time
22. Summary of the optimization
•
Analysis Passes (~50)
- Basic Alias Analysis
- Basic CallGraph construction
- Count alias analysis query response
- Dominator Tree Construction
- Counts the various types of Instructions
- Loop Dependence Analysis
- Track pointer bounds
•
Transform Passes (~70)
- Remove redundant conditional branches
- Aggressive Dead Code Elimination
- Dead Code Elimination
- Deduce function attributes
- Unroll loops
- Optimize use of memcpy and friends
- Strip debug info for unused symbols
•
Utility Passes (~10)
- Dead Argument Hacking
- View CFG of function
http://llvm.org/docs/Passes.html
28. Clang Front-end
C, Objective-C and C++ front-end
• Aggressive project with many goals...
•
- Compatibility with GCC
- Fast compilation
- Expressive error messages (static analysis)
!
t.c:6:49: error: invalid operands to binary expression (‘int’ and ‘struct A’)!
!
return intArg + func(intArg ? ((someA.X+40) + someA) / 42 : someA.X));!
~~~~~~~~~~~~~ ^ ~~~~~
!
•
Host for a broad range of source-level tools
http://llvm.org/devmtg/2008-08/Kremenek_StaticAnalyzer.pdf
29. Clang Front-end
Analyzer Xcode Integration
C, Objective-C and C++ front-end
• Aggressive project with many goals...
•
- Compatibility with GCC
- Fast compilation
- Expressive error messages (static analysis)
!
t.c:6:49: error: invalid operands to binary expression (‘int’ and ‘struct A’)!
!
return intArg + func(intArg ? ((someA.X+40) + someA) / 42 : someA.X));!
~~~~~~~~~~~~~ ^ ~~~~~
!
•
Host for a broad range of source-level tools
Improving Your Application with the Xcode Static Analyzer
North Beach
Tuesday 5:00PM
http://llvm.org/devmtg/2008-08/Kremenek_StaticAnalyzer.pdf
30. Better Diagnosis of the Problem
Better Diagnosis of the Problem
GCC 4.2
Clang
test.m:4:1: error: unknown type name 'NSString'
NSString *P = @"good stuff";
^
31. libclang
•
Clang is not just a great compiler...
- also a library for processing source code
✴
✴
Resolves identifiers and symbols
✴
Expands macros
✴
•
Translates text into AST
Makes implicit information explicit
Features
- Parsing
- Indexing and cross-referencing
- Syntax highlighting
- Code completion
NEW
32. libclang
•
Clang is not just a great compiler...
- also a library for processing source code
✴
✴
Resolves identifiers and symbols
✴
Expands macros
✴
•
Translates text into AST
Makes implicit information explicit
Features
- Parsing
- Indexing and cross-referencing
- Syntax highlighting
- Code completion
NEW
33. ARC
•
NEW
Automatic Reference Coun
Automatic Reference Counting
- Automatic memory management of Objective-C objects
- Just Compile-time, Not Run-time
Not Garbage-Collector
• Migration Tool in Xcode 4.2
•
- with LLVM 3.0
- build-settings : -fobjc-arc (cf. -fno-objc-arc)
•
New Rules
- remove dealloc, retain/release/autorelease
✴
can still use CFRetain / CFRelease in CF
- Can’t use NSAllocateObject / NSDeallocateObject
- Can’t use object pointer in C Structures
- no casual casting id -> void*
- Can’t use NSAutoreleasePool -> @autoreleasepool
- Can’t use memory zone (NSZone)
- Can’t give a property name with new-
osxdev.org
34. libc++
•
Another C++ standard library?
- http://libcxx.llvm.org
•
The C++0x spec introduces several
fundamentally new ideas
- Move semantics
- Perfect forwarding
- Variadic templates
•
New language features
- C++03 implementation from the beginning
- driven several low-level design decisions.
NEW
35. DragonEgg
•
gcc plugin
- replaces gcc’s optimizers and code generators
- reimplementation of llvm-gcc. with gcc-4.5 or later
•
Current Status (v2.8)
- C works well, C++ works fairly well
- can compile a small amount of Obj-C/C++
- Limited debug info
- Requires patching gcc
- Only supports x86-32/64
- Only supports linux/darwin
ex) gcc hello.c -S -O1 -o -fplugin=./dragonegg.so
NEW
36.
37. LLDB
NEW
• Next-generation!
• & High-performance Debugger!
• a set of reusable components in LLVM!
• Clang expression parser!
• LLVM disassembler!
• C/C++, Objective-C!
• Efficient Multi-threading, symbol manager!
• Extension - Python script!
• Support Remote protocol/debug server
42. LLDB Command Syntax
Command Syntax
<noun> <verb> [-options [option-value]] [argument [argument...]]
Uses standard getopt_long() for predicate behavior
(lldb) process launch a.out --stop-at-entry
(lldb) process launch a.out -- --arg0 --arg1
(lldb) process launch a.out -st
Options know which other options they are compatible with
(lldb) process attach --pid 123 --name a.out
43. Common Commands
GDB
(gdb) ^C
(gdb) signal 2
(gdb) info break
(gdb) continue
(gdb) step
(gdb) stepi
(gdb) next
(gdb) nexti
(gdb) finish
(gdb) info threads
(gdb) backtrace
LLDB
(lldb) process interrupt
(lldb) process signal SIGINT
(lldb) breakpoint list
(lldb) process continue
(lldb) thread step-in
(lldb) thread step-inst
(lldb) thread step-over
(lldb) thread step-over-inst
(lldb) thread step-out
(lldb) thread list
(lldb) thread backtrace
44. Common Commands
GDB
LLDB
(gdb) ^C
(gdb) signal 2
(gdb) in br
(gdb) c
(gdb) s
(gdb) si
(gdb) n
(gdb) ni
(gdb) f
(gdb) info threads
(gdb) bt
(lldb) pro int
(lldb) pro s SIGINT
(lldb) br l
(lldb) c
(lldb) s
(lldb) si
(lldb) n
(lldb) ni
(lldb) f
(lldb) th l
(lldb) bt
46. Call for help!
Call for help
OSS community needs to unite work on various scripting languages
– Common module to represent/type infer an arbitrary dynamic language
– Who will provide this? pypy? parrot? llvm itself someday (“hlvm”)?
–
Ruby Python Perl Javascript ...
Common Dynamic Language
Representation + Type Inference
C, C++, Ada, ... GLSL, ARB VP, ...
llvm-gcc
OpenGL
What Next?
LLVM
LTO JIT Install Time Cross Lang Debugger
Codegen
Optzn
Support
IPO
http://llvm.org/
47. LLVM sub-projects
Clang & LLDB
• OpenMP
• Compiler-rt
•
- provides highly tuned implementations of the low-level
code generator.
•
cf. libgcc
VMKit
- is an implementation of the Java and .NET Virtual
Machines
•
KLEE
- implements a "symbolic virtual machine"
- which uses a theorem prover to try to evaluate all
dynamic paths through a program
48. LLVM sub-projects
•
Polly
- implements a suite of cache-locality optimizations as
well as auto-parallelism and vectorization using a
polyhedral model.
•
libclc
- implement the OpenCL standard library.
•
SAFECode
- is a memory safety compiler for C/C++ programs.
- It instruments code with run-time checks to detect
memory safety errors (ex. buffer overflows) at run-time.
LLD (Linker)
• ... to be continue ...
•
49. VMKit: a substrate for virtual machines
MMTk
Classpath
Mono
Pnetlib
LLVM JIT
POSIX
운영체제
하드웨어
http://vmkit.llvm.org/tuto/VMKit_pres_eng.pdf
52. LLVM use in Open Source OSes
Minix moved to Clang as default compiler
• FreeBSD is working on ClangBSD
• LLVM a hard dependency for Gallium3D
• Building Debian with Clang
• Unsupported GCC Flags / C Extensions
•
출처 : http://llvm.org/devmtg/2012-04-12/Slides/Mark_Charlebois.pdf
53. Use-case #1 - New Compiler
• Cling - CERN
• CtoVerilog - Haifa University
• OpenCL - AMD
• Click - Ericsson
• EDGtoLLVM - ARM
• Delphi XE- Embarcadero
• Jaguar - Cray
56. OpenGL
–
•
Very fragile, hard to understand and change (hex opcodes)
OpenGL Interpreter:
– JIT didn’t support all OpenGL features: fallback to interpreter
– Interpreter was very slow, 100x or worse than JIT
LLVM 이전까지는…
GFX Card
GLSL
Text
OpenGL
Parser
Custom JIT
OpenGL
AST
Interpreter
htt
57. 1.Translate OpenGL AST into LLVM call instructions: one per operation
– Very fragile, hard to understand and change (hex
2.Use the LLVM inliner to inline opcodes from precompiled bytecode opcodes)
3.Optimize/codegen as before
OpenGL
•
GLSL
OpenGL Interpreter:
– JIT didn’t support all OpenGL features: fallback to interpreter
– Interpreter was very slow, 100xLLVM
OpenGL to
or worse thanLLVM
JIT
OpenGL
LLVM 이전까지는…
Parser
LLVM
Optimizer
JIT
LLVM IR
OpenGL
AST
OpenGL
to LLVM
...
vec3 viewVec = normalize(-ecPosition);
GLSL
float diffuse = max(dot(lightVec, tnorm), 0.0);
Text
...
OpenGL
Parser
OpenGL
Optimize,
AST
Codegen
PPC
X86
LLVM IR
GFX Card
...
%tmp1 = call opengl_negate(ecPosition)
%viewVec = call opengl_normalize(%tmp1);
%tmp2 = call opengl_dot(%lightVec, %tnorm)
%diffuse = call opengl_max(%tmp2, 0.0);
...
Custom JIT
Interpreter
LLVM Inliner
...
%tmp1 = sub <4 x float> <0,0,0,0>, %ecPosition
%tmp3 = shuffle <4 x float> %tmp1, ...;
%tmp4 = mul <4 x float> %tmp3, %tmp3
...
http://llvm.org/
htt
62. Use-case #3 - Cross Language
Crack Scripting Language
➔ C/C++/Java-like Scripting Language
➔ Speed of a compiled language,
ease of use of a scripting language
➔ Unladen Sparrow(Python), Rubinius(Ruby), V8(JS)
cf. PNaCl (Portable Native Client)
63. Use-case #3 - Emscripten
compiles LLVM bytecode into JavaScript
➔ C/C++ to JavaScript
➔ can be run on the web
➔ Python, the Bullet physics engine, eSpeak (TTS)
https://github.com/kripken/emscripten/wiki
64. Everything compiles into LLVM bitcode
Use-case #3 - Emscripten
compiles LLVM bytecode into JavaScript
➔ C/C++ to JavaScript
➔ The web is everywhere, and runs JavaScript
can be run on the web
➔ Python, the Bullet physics engine, eSpeak (TTS)
Compiling LLVM bitcode to JavaScript lets us run
~ everything, everywhere
https://github.com/kripken/emscripten/wiki
70. 놀라운 사실들
•
•
•
•
•
•
•
First production JIT compiler for C-based
languages
Clang/LLVM have fully replaced GCC in XCode 5
Used on both major mobile platforms: iOS and
Android
Most GPU compute languages (OpenCL, CUDA,
Renderscript) use LLVM
First complete C++-11x: language + library
First ARM64 compiler in production (iPhone 5s)
2012 ACM Software System Award
72. Bug fixed…
From March, 2008 to present:
170 bugs fixed + 3 reported but not yet fixed
( 57 wrong code bugs, 116 crash bugs)
• 2.4 revision simplifies “( a>13 ) & ( a==15)” into “( a>13 )”
• 2.8 revision folds “((x==x) | (y&z))==1” into 0
• 2.8 revision reduces this loop into “i=1”
for (i=0; i<5; i++)
{
if (i) continue;
if (i) break;
}
73. More to come…
•
•
•
•
•
•
More complete Windows support
More effective profile-guided
optimization
Improved usability, parallelization for LTO
Improved auto-vectorization
Improved debugging support
State-of-the-art pointer analysis
74. Conclusion
•
LLVM is
- still continue evolution...
- not omnia(all mighty)
- maybe a shortcut to the new compiler
- new strategy for mobile
- alternative solution for HW emulation or VM
- can mix with the other languages
- synergy with OpenCL, OpenGL
- new chance with LLVM projects