XcalableMP / Specification

Specification of XcalableMP
0 stars 0 forks source link

[C]lock/unlock指示文を関数に変更 #43

Open mnakao opened 8 years ago

mnakao commented 8 years ago
module stack_manager
  use, intrinsic :: iso_fortran_env, only: lock_type 
  type task
    :
  end type
  type(lock_type), private :: stack_lock[*]
  type(task), private :: stack(100)[*]
  integer, private :: stack_size[*]
contains
  subroutine get_task(job)
  ! Get a task from my stack
    type(task),intent(out) :: job
    lock(stack_lock)
      job=stack(stack_size)
      stack_size=stack_size-1
    unlock(stack_lock)
  end subroutine get_task
  subroutine put_task(job,image)
    ! Put a task on the stack of image
    type(task),intent(in) :: job
    integer,intent(in) :: image
    lock(stack_lock[image])
      stack_size[image]=stack_size[image]+1
      stack(stack_size[image])[image] = job
    unlock(stack_lock[image])
  end subroutine put_task
end module stack_manager
#include <xmp.h>
xmp_lock_t stack:[*];
int A:[*], B;
#pragma xmp nodes p(*)
  : 
#pragma xmp lock(stack:[2]);
if(xmp_node_num() == 1){
      A:[2] = B;
}
#pragma xmp unlock(unstack:[2]);
#include <xmp.h>
xmp_lock_t stack:[*];
int A:[*], B;
#pragma xmp nodes p(*)
  : 
xmp_lock(stack:[2]);
if(xmp_node_num() == 1){
      A:[2] = B;
}
xmp_unlock(unstack:[2]);