Giter VIP home page Giter VIP logo

osb's Introduction

OSB: Oak Ridge OpenSHMEM Benchmarks

This is a suite of OpenSHMEM benchmarks, which includes micro benchmarks, application kernels, and applications. The application and application kernels, which are derived from MPI hold the copyrights and license of the original source.

The following benchmarks are included in this suite:

  1. Graph 500 (Single and Multithreaded)
  2. SSCA1 (Single and Multithreaded)
  3. GUPs (Single, Multithreaded, Contexts)
  4. NAS
  5. SHOMS

osb's People

Contributors

manjugv avatar naughtont3 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

osb's Issues

Graph 500: Single Threaded Issue

  • Reported by. TJN

  • (Single threading case) When using purely OpenSHMEM setup, we currently
    get warnings about the lack of OpenMP in some cases. This can generally
    be ignored when not using OpenMP, but guards should be added to avoid
    these warnings in the future. For example:

      warning: ignoring #pragma omp parallel [-Wunknown-pragmas]                
        #pragma omp parallel for 
    

Threaded GUPs calls shmem_init

The multithreaded GUPS benchmark calls shmem_init and should instead call shmem_init_thread with a request for SHMEM_THREAD_MULTIPLE.

Use Atomics for GUPs

Reported by Keith Underwood on the openshmem mailing list

I decided to take a look at the GUPs implementation (really HPCCRandomAccess). I don’t think this implementation captures the spirit of the benchmark. While I’m not sure that some of the historical “optimizations” of the benchmark capture its spirit either, my first reading of this makes it look highly serialized. This inner sequence in particular seems troubling:

  remote_val  = shmem_longlong_g( &HPCC_Table[*ran & (LocalTableSize-1)],remote_proc);

  remote_val ^= *ran;

  shmem_longlong_p(&HPCC_Table[*ran & (LocalTableSize-1)],remote_val, remote_proc);

  shmem_quiet();

It would seem like you should replace the first 3 lines of that with a shmem_uint64_atomic_xor(). Then, the shmem_quiet() should only be called once every so often (HPCCRandomAccess chose 1024 as the “every so often”).

Link: https://github.com/ornl-languages/osb/blob/1.0.0-beta/GUPs/SHMEMRandomAccess.c

Important code starts at line 232.

-Keith

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.