extend ../_components/base.pug

block pagetitle
    title High-Performance Computing, HPC Cluster - Apache Ignite
    meta(name="description", content="Apache Ignite enables high-performance computing by providing APIs for data and compute-intensive calculations. Using Ignite as a HPC cluster, you can turn your commodity hardware or cloud environment into a distributed supercomputer.")
    link(rel="canonical", href="https://ignite.apache.org/use-cases/high-performance-computing.html")

    meta(property="og:title", content="High-Performance Computing, HPC Cluster - Apache Ignite")
    meta(property="og:type", content="article")
    meta(property="og:url", content="https://ignite.apache.org/use-cases/high-performance-computing.html")
    meta(property="og:image", content="/img/og-pic.png")
    meta(property="og:description", content="Apache Ignite enables high-performance computing by providing APIs for data and compute-intensive calculations. Using Ignite as a HPC cluster, you can turn your commodity hardware or cloud environment into a distributed supercomputer.") 

block css 
    link(rel="stylesheet", href="../css/native-persistence.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/high-performance-computing.css?ver=" + config.version)



block main
    - global.pageHref = "usecases"
    - config.hdrClassName = "hdr__blue"
    include ../_components/header.pug


    section.innerhero
        .container.innerhero__cont
            .innerhero__main
                h1.h1.innerhero__h1 High Performance <br>Computing
                    span.highperf__herosmall  With Apache Ignite
                .innerhero__descr.pt-2.h5.
                    Minimize network utilization by executing kilobyte-size custom <br>code over petabytes of data 
                .innerhero__action 
                    a.button.innerhero__button(href="https://ignite.apache.org/docs/latest/index") Start Coding
            img.innerhero__pic.innerhero__pic--highperf(src="/img/usecases/high-peformance/hero.svg", alt="High Performance Computing")
    // /.innerhero



    section.high1.container 
        h2.capstext.pb-5 High Performance Computing Overview
        .high1__wrap.flexi
            .high1__main.pt-1
                h3.h5.high1__title What is high performance computing?
                .high1__text.pt-3.pb-5
                    p High-performance computing is the ability to process data and perform complex calculations at high speeds. 
                    p You keep all your data on the cluster node and execute your kilobyte-size custom code over petabytes of data avoiding network-like utilization.
                h3.h5.high1__title How it works
                .high1__text.pt-2
                    .high1__sub.pb-2 In traditional disk-based systems, <br>such as relational or NoSQL databases
                    p Client applications usually bring data from servers, use the records for local calculations, and discard the data as soon as the business task is complete.
                    p This approach does not scale well if a significant volume of data gets transferred over the network.
                    .high1__sub.pt-2.pb-2 In in-memory computing systems, <br>such as Apache Ignite
                    p Apache Ignite supports a co-located processing technique. The primary aim of this technique is to increase the performance of your data-intensive or compute-intensive calculations by running them straight on Ignite cluster nodes. 
                    p In co-located processing, calculations are done on local data sets of the cluster nodes. This avoids records shuffling over the network and eliminates the impact of network latency on the performance of your applications.
            aside.high1__picwrap 
                img(src="/img/usecases/high-peformance/perf-pic.svg", alt="").high1__pic
                .high1__picdescr.flexi 
                    .high1__arrowline.flexi
                        i 1
                        p – Map Phace
                    .high1__arrowline.flexi
                        i 2
                        p – Execution Phase
                    .high1__arrowline.flexi
                        i 3
                        p – Reduse Phace
    // /.high1



    section.high2 
        .container
            h2.capstext Benefits Of Apache Ignite Compute APIs
            .high2__wrap
                .high2__block 
                    .high2__title Broadcast or execute on specific nodes
                    .high2__text 
                        p — Broadcast your tasks to&nbsp;use all the CPUs of&nbsp;your distributed cluster.
                        p.pt-1 — Or&nbsp;execute your computations on&nbsp;a&nbsp;specific group of&nbsp;nodes.
                .high2__block 
                    .high2__title Load balance your querie
                    .high2__text
                        p If&nbsp;some of&nbsp;the nodes are over-utilized, Ignite can load balance your calculations to&nbsp;the other node.
                .high2__block 
                    .high2__title All computations are fault-tolerant
                    .high2__text
                        p Some computations might take minutes or&nbsp;hours to&nbsp;complete, e.g. drug discovery or&nbsp;logistics planning. You don&rsquo;t need to&nbsp;start from the very beginning if&nbsp;something goes wrong.
    // /.high2



    section.highicons.container 
        h2.h4 Sample Data- And Compute-Intensive Tasks That <br>Leverage High Performance Computing
        .highicons__wrap.pt-5 
            .highicons__item
                .highicons__iconwrap.flexi 
                    img(src="/img/usecases/high-peformance/icon-perf1.svg", alt="").highicons__icon
                .highicons__title Finance
                .highicons__descr e.g. fraud-detection, risk management, financial modeling
            .highicons__item
                .highicons__iconwrap.flexi 
                    img(src="/img/usecases/high-peformance/icon-perf2.svg", alt="").highicons__icon
                .highicons__title Retail & Hospitality
                .highicons__descr e.g. recommendation systems, 360 customer experience
            .highicons__item
                .highicons__iconwrap.flexi 
                    img(src="/img/usecases/high-peformance/icon-perf3.svg", alt="").highicons__icon
                .highicons__title Media & Entertainment
                .highicons__descr e.g. creating animations, rendering special effects
            .highicons__item
                .highicons__iconwrap.flexi 
                    img(src="/img/usecases/high-peformance/icon-perf4.svg", alt="").highicons__icon
                .highicons__title Logistic and transportation
                .highicons__descr e.g. logistics planning, detecting potential hazardous situations
            .highicons__item
                .highicons__iconwrap.flexi 
                    img(src="/img/usecases/high-peformance/icon-perf5.svg", alt="").highicons__icon
                .highicons__title Biotech
                .highicons__descr e.g. drugs and vaccines discovery, sequencing DNA
    // /.highicons



    section.highcases.container
        h2.h4 High Performance Computing Ignite <br>User Stories
        .highcases__one.flexi.pt-2.pb-4
            .highcases__topleft
                .highcases__subtitle.pb-2 Personalized websites with dynamically changing content
                p.pb-3 Whenever you visit Amazon, Walmart, Booking.com, or other websites, you see personalized content, such as relevant deals made especially for you.
                p Personalized content considering your age, location, preferences, and previous interactions is being processed and displayed in few seconds thanks to high-performance computing tasks that process gigabytes of data within a second.
            .highcases__topright
                +powvideo(
                    "https://www.youtube.com/watch?v=qYd9GGRC4L0",
                    "/img/usecases/high-peformance/video-1.png",
                    "",
                    "An Ignite Compute Grid <br>In The Cloud"
                )
                    p <strong>HomeAway,</strong> rental website with personalized offer
            
        .highcases__two.pt-4.pb-4
            .highcases__subtitle.pb-2 Data-driven modelling and simulations
            p To create a new vaccine or drug you have to run thousands or millions <br>of simulations to come up with the best formula.
            .highcases__twowrap.flexi.pt-5
                .highcases__twoitem
                    +powvideo(
                        "https://www.youtube.com/watch?v=PFHb-UuhGkk",
                        "/img/usecases/high-peformance/video-2.png",
                        "",
                        "Data Driven Drug Discovery"
                    )
                    p <strong>E-Therapeutics</strong> uses Apache Ignite capabilities for drug discovery
                .highcases__twoitem
                    +powvideo(
                        "https://www.youtube.com/watch?v=NUxdoL-K9Ys",
                        "/img/usecases/high-peformance/video-3.png",
                        "",
                        "How nference.ai Leverages Ignite For Distributed Analytics In The Bioinformatics Domain",
                        "comvideo__txt--small"
                    )
                        p <strong>nference.ai:</strong> high performance compute APIs used to&nbsp;define different statistical analyses and execute numerical data in&nbsp;real-time
    
        .highcases__one.flexi.pt-4.pb-4
            .highcases__topleft
                .highcases__subtitle.pb-2 Logistic and transportation companies use advanced calculations for logistics planning
                p <strong>Dutch Railways</strong> have thousands of different trains to deliver cargo and people across the country. They need to calculate how all those trains should be moving in real time. These calculations also happen with high compute APIs.
            .highcases__topright
                +powvideo(
                    "https://www.youtube.com/watch?v=wkCW8YC8eKU",
                    "/img/usecases/high-peformance/video-4.png",
                    "",
                    "Detecting Potential Hazardous Situations In The Dutch Railway Planning Using Apache Ignite",
                    "comvideo__txt--small"
                )

        .highcases__two.pt-4
            .highcases__subtitle.pb-2 Real-time analytics to enable fast and precise decisions
            p High performance computing allows to process unlimited data sets and analyze <br>them in seconds.
            .highcases__twowrap.flexi.pt-5
                .highcases__twoitem
                    +powvideo(
                        "https://www.youtube.com/watch?v=jF9T2cJB6t0",
                        "/img/usecases/high-peformance/video-5.png",
                        "",
                        "High Performance Exposure Management With Apache Ignite",
                        "comvideo__txt--small"
                    )
                    p <strong>JPMorgan Chase</strong> use Apache Ignite for heavy computations which help to&nbsp;make effective exposure management.
                .highcases__twoitem
                    +powvideo(
                        "https://www.youtube.com/watch?v=B8A8yR_e6VM",
                        "/img/usecases/high-peformance/video-6.png",
                        "",
                        "Real Time Exposure Management Using Ignite",
                        ""
                    )




    section.native-bottom.container
        .native-bottom__grid 
            article.nativebotblock
                .h4.nativebotblock__title
                    img(src="/img/features/native-rocket.svg", alt="").nativebotblock__icon
                    span Ready to Start?
                p.nativebotblock__text Discover our quick start guide and build <br>your first application in 5-10 minutes
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/", target="_blank") Quick Start Guide
            article.nativebotblock.nativebotblock--learn
                .h4.nativebotblock__title
                    img(src="/img/features/native-docs.svg", alt="").nativebotblock__icon
                    span Want to View More Use-Cases?
                p.nativebotblock__text Check out success stories from <br>different industries across the world
                a.nativebotblock__link.arrowlink(href="/use-cases/provenusecases.html") Companies Stories