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 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. 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, 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 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 analyzation 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