1 /* 2 * Copyright (c) 2014-2016 Mellanox Technologies, Inc. 3 * All rights reserved. 4 * $COPYRIGHT$ 5 * 6 * Additional copyrights may follow 7 * 8 * $HEADER$ 9 * 10 * This program is an adaptation of examples found in the man pages 11 * of SGI’s SHMEM implementation. 12 * 13 * In this program, iput is used to select 5 elements from array source separated by 14 * a stride of 2 and write them to array target using a stride of 1. 15 * 16 * Given the array source = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } 17 * iput will select 5 elements from array source on PE 0, using a stride of 2: 18 * 19 * selected elements = { 1, 3, 5, 7, 9 } 20 * 21 * These elements will then be written to the array source on PE 1 using a stride of 1: 22 * 23 * target = { 1, 3, 5, 7, 9 } 24 * 25 */ 26 27 #include <stdio.h> 28 #include <shmem.h> 29 30 int main(void) 31 { 32 short source[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 33 static short target[10]; 34 int me; 35 36 shmem_init(); 37 me = shmem_my_pe(); 38 39 if (me == 0) { 40 /* put 10 words into target on PE 1 */ 41 shmem_short_iput(target, source, 1, 2, 5, 1); 42 } 43 44 shmem_barrier_all(); /* sync sender and receiver */ 45 46 if (me == 1) { 47 printf("target on PE %d is %hd %hd %hd %hd %hd\n", me, 48 target[0], target[1], target[2], 49 target[3], target[4] ); 50 } 51 shmem_barrier_all(); /* sync before exiting */ 52 shmem_finalize(); 53 54 return 0; 55 }