Skip to content
This repository has been archived by the owner on Apr 15, 2024. It is now read-only.

Kokkos::atomic_fetch_op

Daniel Arndt edited this page May 1, 2020 · 4 revisions

Kokkos::atomic_fetch_[op]

Header File: Kokkos_Core.hpp

Usage:

old_value =  atomic_fetch_[op](ptr_to_value,update_value);

Atomically updates the variable at the address given by ptr_to_value with update_value according to the relevant operation, and returns the previous value found at that address..

Synopsis

  template<class T>
  T atomic_fetch_add(T* const ptr_to_value, const T value);

  template<class T>
  T atomic_fetch_and(T* const ptr_to_value, const T value);

  template<class T>
  T atomic_fetch_div(T* const ptr_to_value, const T value);

  template<class T>
  T atomic_fetch_lshift(T* const ptr_to_value, const unsigned shift);

  template <class T>
  T atomic_fetch_max(T* const ptr_to_value, const T val);

  template <class T>
  T atomic_fetch_min(T* const ptr_to_value, const T val);

  template<class T>
  T atomic_fetch_mod(T* const ptr_to_value, const T value);

  template<class T>
  T atomic_fetch_mul(T* const ptr_to_value, const T value);
 
  template<class T>
  T atomic_fetch_or(T* const ptr_to_value, const T value);

  template<class T>
  T atomic_fetch_rshift(T* const ptr_to_value, const unsigned shift);

  template<class T>
  T atomic_fetch_sub(T* const ptr_to_value, const T value);
 
  template<class T>
  T atomic_fetch_xor(T* const ptr_to_value, const T value);

Description

  • template<class T>
    T atomic_fetch_add(T* const ptr_to_value, const T value);

    Atomically executes tmp = *ptr_to_value; *ptr_to_value += value; return tmp;.

    • ptr_to_value: address of the to be updated value.
    • value: value to be added.
  • template<class T>
    T atomic_fetch_and(T* const ptr_to_value, const T value);

    Atomically executes tmp = *ptr_to_value; *ptr_to_value &= value; return tmp;.

    • ptr_to_value: address of the to be updated value.
    • value: value with which to combine the original value.
  • template<class T>
    T atomic_fetch_div(T* const ptr_to_value, const T value);

    Atomically executes tmp = *ptr_to_value; *ptr_to_value /= value; return tmp;.

    • ptr_to_value: address of the to be updated value.
    • value: value by which to divide the original value..
  • template<class T>
    T atomic_fetch_lshift(T* const ptr_to_value, const unsigned shift);

    Atomically executes tmp = *ptr_to_value; *ptr_to_value << shift; return tmp;.

    • ptr_to_value: address of the to be updated value.
    • shift: value by which to shift the original variable.
  • template<class T>
    T atomic_fetch_max(T* const ptr_to_value, const T value);

    Atomically executes tmp = *ptr_to_value; *ptr_to_value = max(*ptr_to_value, value); return tmp;.

    • ptr_to_value: address of the to be updated value.
    • value: value which to take the maximum with.
  • template<class T>
    T atomic_fetch_min(T* const ptr_to_value, const T value);

    Atomically executes tmp = *ptr_to_value; *ptr_to_value = min(*ptr_to_value, value); return tmp;.

    • ptr_to_value: address of the to be updated value.
    • value: value which to take the minimum with.
  • template<class T>
    T atomic_fetch_mul(T* const ptr_to_value, const T value);

    Atomically executes tmp = *ptr_to_value; *ptr_to_value *= value; return tmp;.

    • ptr_to_value: address of the to be updated value.
    • value: value by which to multiply the original value.
  • template<class T>
    T atomic_fetch_mod(T* const ptr_to_value, const T value);

    Atomically executes tmp = *ptr_to_value; *ptr_to_value %= value; return tmp;.

    • ptr_to_value: address of the to be updated value.
    • value: value with which to combine the original value.
  • template<class T>
    T atomic_fetch_or(T* const ptr_to_value, const T value);

    Atomically executes tmp = *ptr_to_value; *ptr_to_value |= value; return tmp;.

    • ptr_to_value: address of the to be updated value.
    • value: value with which to combine the original value.
  • template<class T>
    T atomic_fetch_rshift(T* const ptr_to_value, const unsigned shift);

    Atomically executes tmp = *ptr_to_value; *ptr_to_value >> shift; return tmp;.

    • ptr_to_value: address of the to be updated value.
    • shift: value by which to shift the original variable.
  • template<class T>
    T atomic_fetch_sub(T* const ptr_to_value, const T value);

    Atomically executes *ptr_to_value -= value.

    • ptr_to_value: address of the to be updated value.
    • value: value to be substracted..
  • template<class T>
    T atomic_fetch_xor(T* const ptr_to_value, const T value);

    Atomically executes tmp = *ptr_to_value; *ptr_to_value ^= value; return tmp;.

    • ptr_to_value: address of the to be updated value.
    • value: value with which to combine the original value.
Clone this wiki locally