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 completed.
                    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 Phase
                    .high1__arrowline.flexi
                        i 2
                        p – Execution Phase
                    .high1__arrowline.flexi
                        i 3
                        p – Reduce Phase
    // /.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 queries
                    .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. drug and vaccine 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, or other websites, you see personalized content, such as relevant deals made especially for you.
                p Personalized content that takes your age, location, preferences, and previous interactions into consideration is processed and displayed in just a few seconds thanks to high-performance computing tasks that process gigabytes of data within a&nbsp;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 offers
            
        .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 enables fast and precise decisions
            p High-performance computing allows the processing of unlimited data sets, <br>with analysis taking only 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") Ignite User Stories