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 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