removed unnecessary
This commit is contained in:
@@ -1,104 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
SAVE_DIR=`pwd`
|
|
||||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
|
||||||
|
|
||||||
if [ "$1" = "--continue" ]; then
|
|
||||||
CONTINUE_FLAG=1
|
|
||||||
shift
|
|
||||||
else
|
|
||||||
CONTINUE_FLAG=0
|
|
||||||
fi
|
|
||||||
ORIG_DIR="$1"
|
|
||||||
REV_NUMBER=$2
|
|
||||||
|
|
||||||
if [ -f "$SAVE_DIR/dvm-tester.config" ]; then
|
|
||||||
. "$SAVE_DIR/dvm-tester.config"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$PLATFORMS" ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$TEST_SUITE" ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
FULL_REP_URL="$PUBL_BASE_URL/r${REV_NUMBER}${PUBL_SUFFIX}/"
|
|
||||||
|
|
||||||
TEST_SUITE=$(cd "$TEST_SUITE" && pwd)
|
|
||||||
|
|
||||||
# Actually, can be taken any temporary name
|
|
||||||
RESULTS_DIR="$ORIG_DIR.results"
|
|
||||||
export TMPDIR="$ORIG_DIR.work"
|
|
||||||
if [ -d "/home/scratch" ]; then
|
|
||||||
TEMPL_NAME="/home/scratch/$(basename "$TMPDIR").XXX"
|
|
||||||
TMPDIR=$(mktemp -d "$TEMPL_NAME")
|
|
||||||
fi
|
|
||||||
mkdir -p "$TMPDIR"
|
|
||||||
|
|
||||||
# Launch task processor
|
|
||||||
TASK_FIFO="$(mktemp -u).task-fifo"
|
|
||||||
mkfifo "$TASK_FIFO"
|
|
||||||
if [ $CONTINUE_FLAG -eq 0 ]; then
|
|
||||||
rm -rf "$RESULTS_DIR"
|
|
||||||
fi
|
|
||||||
mkdir -p "$RESULTS_DIR"
|
|
||||||
cd "$SAVE_DIR"
|
|
||||||
"$MY_DIR/task-processor.sh" "$RESULTS_DIR" <"$TASK_FIFO" &
|
|
||||||
|
|
||||||
# Build DVM-systems for given platforms and sequentially feed task processor from our test-suite
|
|
||||||
exec 4>"$TASK_FIFO"
|
|
||||||
for platf in $PLATFORMS; do
|
|
||||||
WORK_DIR="$ORIG_DIR.$platf"
|
|
||||||
if [ $CONTINUE_FLAG -eq 0 ]; then
|
|
||||||
rm -rf "$WORK_DIR"
|
|
||||||
fi
|
|
||||||
if [ ! -e "$WORK_DIR" ]; then
|
|
||||||
cp -r "$ORIG_DIR" "$WORK_DIR"
|
|
||||||
fi
|
|
||||||
cd "$WORK_DIR/dvm_sys"
|
|
||||||
if [ ! -f platforms/$platf ]; then
|
|
||||||
if [ -f "$SAVE_DIR/$platf" ]; then
|
|
||||||
cp "$SAVE_DIR/$platf" platforms/
|
|
||||||
else
|
|
||||||
echo "Can not find platform $platf"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ -f platforms/$platf ]; then
|
|
||||||
PLATFORM=$platf ./dvminstall >install.log 2>& 1
|
|
||||||
INST_RES=$?
|
|
||||||
if [ $INST_RES -ne 0 -o ! -f user/dvm ]; then
|
|
||||||
:
|
|
||||||
# TODO: Handle errors with building DVM-system
|
|
||||||
else
|
|
||||||
cd "$SAVE_DIR"
|
|
||||||
"$MY_DIR/perform-tests.sh" "$WORK_DIR/dvm_sys" "$TEST_SUITE" 4
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
exec 4>&-
|
|
||||||
|
|
||||||
# Wait for task processor to finish
|
|
||||||
wait
|
|
||||||
|
|
||||||
# Cleanup stuff
|
|
||||||
rm "$TASK_FIFO"
|
|
||||||
for platf in $PLATFORMS; do
|
|
||||||
WORK_DIR="$ORIG_DIR.$platf"
|
|
||||||
# rm -rf "$WORK_DIR"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Generate final report
|
|
||||||
cd "$SAVE_DIR"
|
|
||||||
"$MY_DIR/gen-report.sh" "$TEST_SUITE" "$RESULTS_DIR" "$FULL_REP_URL" $REV_NUMBER
|
|
||||||
|
|
||||||
# Publish the report and send summary e-mail
|
|
||||||
if [ "$POPULATE_FLAG" = "1" ]; then
|
|
||||||
cd "$SAVE_DIR"
|
|
||||||
"$MY_DIR/populate-report.sh" "$RESULTS_DIR" "$REV_NUMBER"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Cleanup stuff finally
|
|
||||||
#rm -rf "$RESULTS_DIR"
|
|
||||||
#rm -rf "$TMPDIR"
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
unset CDPATH
|
|
||||||
|
|
||||||
REPO_URL=http://svn.dvm-system.org/svn/dvmhrepo/dvm
|
|
||||||
REPO_USER=dvmhuser
|
|
||||||
REPO_PASS=dvmh2013
|
|
||||||
PATHS_OF_INTEREST="cdvm/trunk cdvmh-clang/trunk driver/trunk fdvm/trunk general/examples/trunk general/platforms/trunk general/trunk rts/trunk rts-dvmh/trunk tools/pppa/trunk tools/predictor/trunk"
|
|
||||||
|
|
||||||
SVN_PARAMS="--username $REPO_USER --password $REPO_PASS --non-interactive"
|
|
||||||
|
|
||||||
PREV_REV=`cat latest-seen-revision`
|
|
||||||
[ "$PREV_REV" -ge 0 ] 2>/dev/null
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
PREV_REV=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
NEW_REV=`svn info $SVN_PARAMS $REPO_URL | grep "Revision" | awk '{ print $2 }'`
|
|
||||||
[ "$NEW_REV" -ge 1 ] 2>/dev/null
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
NEW_REV=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If latest-seen-revision is corrupted, then inspect only latest revision
|
|
||||||
if [ $PREV_REV -eq 0 -a $NEW_REV -gt 0 ]; then
|
|
||||||
PREV_REV=$(( NEW_REV - 1 ))
|
|
||||||
fi
|
|
||||||
|
|
||||||
CUR_REV=$(( PREV_REV + 1 ))
|
|
||||||
while [ $CUR_REV -le $NEW_REV ]; do
|
|
||||||
TO_TEST=1
|
|
||||||
COMMIT_MSG=`svn log $SVN_PARAMS --incremental -c $CUR_REV $REPO_URL | tail -n +4`
|
|
||||||
IS_INTERMEDIATE=`echo "$COMMIT_MSG" | grep -i "intermediate" | wc -l`
|
|
||||||
IS_TRIVIAL=`echo "$COMMIT_MSG" | grep -i "trivial" | wc -l`
|
|
||||||
IS_COSMETICS=`echo "$COMMIT_MSG" | grep -i "cosmetics" | wc -l`
|
|
||||||
IS_MAJOR=`echo "$COMMIT_MSG" | grep -i "major" | wc -l`
|
|
||||||
if [ $IS_INTERMEDIATE -ne 0 -o $IS_TRIVIAL -ne 0 -o $IS_COSMETICS -ne 0 ]; then
|
|
||||||
TO_TEST=0
|
|
||||||
elif [ $IS_MAJOR -ne 0 ]; then
|
|
||||||
TO_TEST=2
|
|
||||||
fi
|
|
||||||
if [ $TO_TEST -ne 0 -a -n "$PATHS_OF_INTEREST" ]; then
|
|
||||||
NO_TEST=1
|
|
||||||
for p in $PATHS_OF_INTEREST; do
|
|
||||||
WHAT_CHANGED=`svn diff $SVN_PARAMS --summarize -c $CUR_REV $REPO_URL/$p`
|
|
||||||
if [ -n "$WHAT_CHANGED" ]; then
|
|
||||||
NO_TEST=0
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ $NO_TEST -ne 0 ]; then
|
|
||||||
TO_TEST=0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ $TO_TEST -eq 1 ]; then
|
|
||||||
echo $CUR_REV >>pending-revisions
|
|
||||||
elif [ $TO_TEST -eq 2 ]; then
|
|
||||||
echo $CUR_REV >>pending-revisions-full
|
|
||||||
fi
|
|
||||||
CUR_REV=$(( CUR_REV + 1 ))
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ $NEW_REV -gt 0 ]; then
|
|
||||||
echo $NEW_REV >latest-seen-revision
|
|
||||||
fi
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
PLATFORMS="Titan"
|
|
||||||
|
|
||||||
TEST_SUITE="test-suite"
|
|
||||||
RECIPIENTS="krukov@keldysh.ru, bakhtin@keldysh.ru, pritmick@yandex.ru, alex-w900i@yandex.ru, valex@keldysh.ru, savol@keldysh.ru, socol@keldysh.ru, konov@keldysh.ru"
|
|
||||||
|
|
||||||
REPO_BASE_URL="http://svn.dvm-system.org/svn/dvmhrepo"
|
|
||||||
REPO_USER="dvmhuser"
|
|
||||||
REPO_PASS="dvmh2013"
|
|
||||||
|
|
||||||
LIST_SERVER="admdvm@svn.dvm-system.org"
|
|
||||||
LIST_PATH="/home/admdvm/pending-revisions"
|
|
||||||
|
|
||||||
PUBL_BASE_URL="http://svn.dvm-system.org/dvm-test-results"
|
|
||||||
PUBL_SERVER="admdvm@svn.dvm-system.org"
|
|
||||||
PUBL_BASE_PATH="/var/www/html/dvm-test-results"
|
|
||||||
PUBL_SUFFIX=
|
|
||||||
|
|
||||||
MAIL_SERVER="admdvm@svn.dvm-system.org"
|
|
||||||
SENDMAIL="/usr/sbin/sendmail"
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
unset CDPATH
|
|
||||||
|
|
||||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
|
||||||
|
|
||||||
MAX_INVOCATIONS=-1
|
|
||||||
WAIT_INTERVAL=60
|
|
||||||
WORKING_DIR=`pwd`
|
|
||||||
|
|
||||||
parse_params() {
|
|
||||||
while [ -n "$1" ]; do
|
|
||||||
if [ "$1" = "--once" ]; then
|
|
||||||
MAX_INVOCATIONS=1
|
|
||||||
elif [ "$1" = "--max-invocations" ]; then
|
|
||||||
MAX_INVOCATIONS=$2
|
|
||||||
shift
|
|
||||||
elif [ "$1" = "--working-dir" ]; then
|
|
||||||
WORKING_DIR="$2"
|
|
||||||
shift
|
|
||||||
elif [ "$1" = "--wait-interval" ]; then
|
|
||||||
WAIT_INTERVAL=$2
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
parse_params "$@"
|
|
||||||
|
|
||||||
if [ -f "$WORKING_DIR/dvm-tester.config" ]; then
|
|
||||||
. "$WORKING_DIR/dvm-tester.config"
|
|
||||||
else
|
|
||||||
echo "No dvm-tester.config found!" >& 2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $MAX_INVOCATIONS -lt 0 ]; then
|
|
||||||
INF_MODE=1
|
|
||||||
else
|
|
||||||
INF_MODE=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
counter=0
|
|
||||||
while [ $INF_MODE -ne 0 -o $counter -lt $MAX_INVOCATIONS ]; do
|
|
||||||
while true; do
|
|
||||||
if [ -f "$WORKING_DIR/dvm-tester.pause" ] && [ -n "$(cat "$WORKING_DIR/dvm-tester.pause")" ]; then
|
|
||||||
echo "[$(date)] Paused explicitly (local)"
|
|
||||||
elif [ -f "$MY_DIR/dvm-tester.pause" ] && [ -n "$(cat "$MY_DIR/dvm-tester.pause")" ]; then
|
|
||||||
echo "[$(date)] Paused explicitly (global)"
|
|
||||||
elif [ $(ps aux | grep task-processor.sh | wc -l) -gt 1 ]; then
|
|
||||||
echo "[$(date)] Waiting existing task-processor.sh process to finish"
|
|
||||||
else
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep $WAIT_INTERVAL
|
|
||||||
done
|
|
||||||
echo "[$(date)] Attempting to get pending revision number"
|
|
||||||
REV=`ssh $LIST_SERVER "head -n 1 $LIST_PATH && tail -n +2 $LIST_PATH >$LIST_PATH.tmp && mv $LIST_PATH.tmp $LIST_PATH"`
|
|
||||||
echo "[$(date)] Got '$REV'"
|
|
||||||
if [ -z "$REV" ]; then
|
|
||||||
if [ $INF_MODE -ne 0 ]; then
|
|
||||||
sleep $WAIT_INTERVAL
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
"$MY_DIR/test-revision.sh" --working-dir "$WORKING_DIR" --populate $REV
|
|
||||||
counter=$(( counter + 1 ))
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "[$(date)] Exiting normally"
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
SAVE_DIR=`pwd`
|
|
||||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
|
||||||
|
|
||||||
RESULTS_DIR="$1"
|
|
||||||
REV_NUMBER=$2
|
|
||||||
|
|
||||||
if [ -f "$SAVE_DIR/dvm-tester.config" ]; then
|
|
||||||
. "$SAVE_DIR/dvm-tester.config"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$RECIPIENTS" ]; then
|
|
||||||
RECIPIENTS="pritmick@yandex.ru"
|
|
||||||
fi
|
|
||||||
|
|
||||||
PUBL_PATH="$PUBL_BASE_PATH/r${REV_NUMBER}${PUBL_SUFFIX}"
|
|
||||||
COPY_PATHS="$PUBL_BASE_PATH/latest${PUBL_SUFFIX}"
|
|
||||||
|
|
||||||
ssh $PUBL_SERVER "mkdir -p \"$PUBL_PATH\""
|
|
||||||
scp "$RESULTS_DIR/report/full-report.html" "$PUBL_SERVER:$PUBL_PATH/index.html"
|
|
||||||
scp "$RESULTS_DIR/report/sources.tgz" "$PUBL_SERVER:$PUBL_PATH/sources.tgz"
|
|
||||||
for p in $COPY_PATHS; do
|
|
||||||
ssh $PUBL_SERVER "rm -rf \"$p\"; cp -r \"$PUBL_PATH\" \"$p\""
|
|
||||||
done
|
|
||||||
create_email()
|
|
||||||
{
|
|
||||||
echo "MIME-Version: 1.0"
|
|
||||||
echo "Content-type: text/html;charset=UTF-8"
|
|
||||||
echo "From: dvm@keldysh.ru"
|
|
||||||
echo "To: $RECIPIENTS"
|
|
||||||
echo "Subject: DVM tester: Test results for revision $REV_NUMBER"
|
|
||||||
echo
|
|
||||||
cat "$1"
|
|
||||||
echo "."
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
create_email "$RESULTS_DIR/report/brief-report.html" | ssh $MAIL_SERVER "$SENDMAIL $RECIPIENTS"
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
unset CDPATH
|
|
||||||
|
|
||||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
|
||||||
|
|
||||||
POPULATE_FLAG=0
|
|
||||||
WORKING_DIR=`pwd`
|
|
||||||
REV=
|
|
||||||
|
|
||||||
parse_params() {
|
|
||||||
while [ -n "$1" ]; do
|
|
||||||
if [ "$1" = "--working-dir" ]; then
|
|
||||||
WORKING_DIR="$2"
|
|
||||||
shift
|
|
||||||
elif [ "$1" = "--populate" ]; then
|
|
||||||
POPULATE_FLAG=1
|
|
||||||
else
|
|
||||||
REV=$1
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
parse_params $@
|
|
||||||
|
|
||||||
if [ -z "$REV" ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "$WORKING_DIR/dvm-tester.config" ]; then
|
|
||||||
. "$WORKING_DIR/dvm-tester.config"
|
|
||||||
else
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
REPO_URL="$REPO_BASE_URL/dvm/releases/current-trunk"
|
|
||||||
SVN_PARAMS="--username $REPO_USER --password $REPO_PASS --non-interactive"
|
|
||||||
|
|
||||||
update_test_suite() {
|
|
||||||
if [ -e "$TEST_SUITE/.svn" ]; then
|
|
||||||
( cd "$TEST_SUITE" && svn $SVN_PARAMS update )
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
test_revision() {
|
|
||||||
REV=$1
|
|
||||||
echo "[$(date)] Testing revision $REV"
|
|
||||||
SAVE_DIR=`pwd`
|
|
||||||
WORK_DIR="$WORKING_DIR/dvm_r$REV"
|
|
||||||
rm -rf "$WORK_DIR"
|
|
||||||
svn co $SVN_PARAMS -r $REV "$REPO_URL" "$WORK_DIR" >/dev/null
|
|
||||||
SVN_RES=$?
|
|
||||||
while [ $SVN_RES -ne 0 ]; do
|
|
||||||
sleep 1
|
|
||||||
rm -rf "$WORK_DIR"
|
|
||||||
svn co $SVN_PARAMS -r $REV "$REPO_URL" "$WORK_DIR" >/dev/null
|
|
||||||
SVN_RES=$?
|
|
||||||
done
|
|
||||||
cd "$WORK_DIR"
|
|
||||||
TMP_FILE=`mktemp`
|
|
||||||
svn propget svn:externals >$TMP_FILE
|
|
||||||
SVN_RES=$?
|
|
||||||
while [ $SVN_RES -ne 0 ]; do
|
|
||||||
svn propget svn:externals >$TMP_FILE
|
|
||||||
SVN_RES=$?
|
|
||||||
done
|
|
||||||
CHILDREN=`cat $TMP_FILE | sed '/^$/d' | awk '{print $(NF)}'`
|
|
||||||
rm $TMP_FILE
|
|
||||||
for d in $CHILDREN; do
|
|
||||||
cd "$WORK_DIR/$d"
|
|
||||||
svn up $SVN_PARAMS -r $REV >/dev/null
|
|
||||||
SVN_RES=$?
|
|
||||||
while [ $SVN_RES -ne 0 ]; do
|
|
||||||
sleep 1
|
|
||||||
svn cleanup $SVN_PARAMS
|
|
||||||
svn up $SVN_PARAMS -r $REV >/dev/null
|
|
||||||
SVN_RES=$?
|
|
||||||
done
|
|
||||||
done
|
|
||||||
rm -rf "$WORK_DIR.tmp"
|
|
||||||
mv "$WORK_DIR" "$WORK_DIR.tmp"
|
|
||||||
svn export "$WORK_DIR.tmp" "$WORK_DIR" >/dev/null
|
|
||||||
SVN_RES=$?
|
|
||||||
while [ $SVN_RES -ne 0 ]; do
|
|
||||||
sleep 1
|
|
||||||
rm -rf "$WORK_DIR"
|
|
||||||
svn export "$WORK_DIR.tmp" "$WORK_DIR" >/dev/null
|
|
||||||
SVN_RES=$?
|
|
||||||
done
|
|
||||||
rm -rf "$WORK_DIR.tmp"
|
|
||||||
cd "$WORKING_DIR"
|
|
||||||
POPULATE_FLAG=$POPULATE_FLAG "$MY_DIR/build-and-test.sh" "$WORK_DIR" $REV
|
|
||||||
echo "[$(date)] Testing revision $REV done"
|
|
||||||
# rm -rf "$WORK_DIR"
|
|
||||||
cd "$SAVE_DIR"
|
|
||||||
}
|
|
||||||
|
|
||||||
update_test_suite
|
|
||||||
test_revision $REV
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Common part
|
|
||||||
MAX_PPN=60
|
|
||||||
MAX_CPU_SHARING_FACTOR=4
|
|
||||||
MAX_CUDA_SHARING_FACTOR=16
|
|
||||||
|
|
||||||
# Default
|
|
||||||
NODE_COUNT=1
|
|
||||||
MAX_NODES_PER_TASK=1
|
|
||||||
INTERACTIVE=1
|
|
||||||
HAS_RES_MANAGER=0
|
|
||||||
|
|
||||||
# Specializations
|
|
||||||
if [ `hostname` = "k100" ]; then
|
|
||||||
NODE_COUNT=64
|
|
||||||
MAX_NODES_PER_TASK=8
|
|
||||||
INTERACTIVE=0
|
|
||||||
# Since launch isn't interactive - one must provide is_launched, is_finished, get_elapsed_time, stdout_fn, stderr_fn calls
|
|
||||||
get_task_dir() {
|
|
||||||
local n
|
|
||||||
for n in 1 2 3 4 5 6 7 8 9; do
|
|
||||||
if [ -d "$1.$n" ]; then
|
|
||||||
printf %s "$1.$n"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
printf %s "$1"
|
|
||||||
}
|
|
||||||
is_launched() {
|
|
||||||
local STDOUT_FN
|
|
||||||
STDOUT_FN="$1"
|
|
||||||
local STDERR_FN
|
|
||||||
STDERR_FN="$2"
|
|
||||||
# Add handling for refuses from SUPPZ
|
|
||||||
echo 1
|
|
||||||
}
|
|
||||||
is_finished() {
|
|
||||||
if [ "$(tail -n 1 $(get_task_dir "$1")/manager.log)" = "Exiting..." ]; then
|
|
||||||
echo 1
|
|
||||||
else
|
|
||||||
echo 0
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
get_elapsed_time() {
|
|
||||||
local da
|
|
||||||
local mo
|
|
||||||
local ye
|
|
||||||
local dat
|
|
||||||
local tim
|
|
||||||
local sec1
|
|
||||||
local sec2
|
|
||||||
local task_dir
|
|
||||||
task_dir="$(get_task_dir "$1")"
|
|
||||||
dat=`grep "started at" <"$task_dir/manager.log" | awk '{print $5}' | sed 's/\./ /g'`
|
|
||||||
tim=`grep "started at" <"$task_dir/manager.log" | awk '{print $6}'`
|
|
||||||
da=`echo "$dat" | awk '{print $1}'`
|
|
||||||
mo=`echo "$dat" | awk '{print $2}'`
|
|
||||||
ye=`echo "$dat" | awk '{print $3}'`
|
|
||||||
dat="$ye-$mo-$da $tim"
|
|
||||||
sec1=`date -d "$dat" +%s`
|
|
||||||
dat=`grep "done at" <"$task_dir/manager.log" | awk '{print $6}' | sed 's/\./ /g'`
|
|
||||||
tim=`grep "done at" <"$task_dir/manager.log" | awk '{print $7}'`
|
|
||||||
da=`echo "$dat" | awk '{print $1}'`
|
|
||||||
mo=`echo "$dat" | awk '{print $2}'`
|
|
||||||
ye=`echo "$dat" | awk '{print $3}'`
|
|
||||||
dat="$ye-$mo-$da $tim"
|
|
||||||
sec2=`date -d "$dat" +%s`
|
|
||||||
echo $(( sec2 - sec1 ))
|
|
||||||
}
|
|
||||||
stdout_fn() {
|
|
||||||
echo "$(get_task_dir "$1")/output"
|
|
||||||
}
|
|
||||||
stderr_fn() {
|
|
||||||
echo "$(get_task_dir "$1")/errors"
|
|
||||||
}
|
|
||||||
HAS_RES_MANAGER=1
|
|
||||||
# Since machine has resource manager (task queue) - one must provide can_launch call
|
|
||||||
can_launch() {
|
|
||||||
if [ `mps 2>/dev/null | tail -n +3 | wc -l` -lt 6 ]; then
|
|
||||||
echo 1
|
|
||||||
else
|
|
||||||
echo 0
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Requires variables: LAUNCH_EXIT_CODE, STDERR_FN
|
|
||||||
# Produces variables: TEST_PASSED, RESULT_COMMENT, ERROR_LEVEL
|
|
||||||
|
|
||||||
if [ `grep -E 'Assertion' <"$STDERR_FN" | wc -l` -gt 0 ]; then
|
|
||||||
TEST_PASSED=0
|
|
||||||
RESULT_COMMENT="Assertion failed"
|
|
||||||
ERROR_LEVEL=3
|
|
||||||
elif [ `grep -E 'RTS fatal' <"$STDERR_FN" | wc -l` -gt 0 ]; then
|
|
||||||
TEST_PASSED=0
|
|
||||||
RESULT_COMMENT="RTS fatal"
|
|
||||||
ERROR_LEVEL=2
|
|
||||||
elif [ `grep -E 'RTS err' <"$STDERR_FN" | wc -l` -gt 0 ]; then
|
|
||||||
TEST_PASSED=0
|
|
||||||
RESULT_COMMENT="RTS err"
|
|
||||||
ERROR_LEVEL=1
|
|
||||||
elif [ $LAUNCH_EXIT_CODE -ne 0 ]; then
|
|
||||||
TEST_PASSED=0
|
|
||||||
RESULT_COMMENT="Launch failure"
|
|
||||||
ERROR_LEVEL=4
|
|
||||||
else
|
|
||||||
TEST_PASSED=1
|
|
||||||
RESULT_COMMENT="OK"
|
|
||||||
ERROR_LEVEL=0
|
|
||||||
fi
|
|
||||||
@@ -1,348 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Bash is required due to usage of associative arrays
|
|
||||||
|
|
||||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
|
||||||
SAVE_DIR=`pwd`
|
|
||||||
|
|
||||||
TEST_SUITE="$1"
|
|
||||||
RESULTS_DIR="$2"
|
|
||||||
FULL_REP_URL="$3"
|
|
||||||
REV_NUMBER=$4
|
|
||||||
|
|
||||||
if [ -z "$FULL_REP_URL" ]; then
|
|
||||||
FULL_REP_URL="full-report.html"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$REV_NUMBER" ]; then
|
|
||||||
REV_NUMBER=UNKNOWN
|
|
||||||
fi
|
|
||||||
|
|
||||||
MAX_LONELY_OK=50
|
|
||||||
REPORT_DIR="$RESULTS_DIR/report"
|
|
||||||
rm -rf "$REPORT_DIR"
|
|
||||||
RES_FILES=`mktemp`
|
|
||||||
find "$RESULTS_DIR" -mindepth 1 -type f | LC_ALL=C sort >$RES_FILES
|
|
||||||
BUGGY_FILE_DIR="$REPORT_DIR/sources"
|
|
||||||
mkdir -p "$BUGGY_FILE_DIR"
|
|
||||||
REPORT_FILE="$REPORT_DIR/brief-report.html"
|
|
||||||
FULL_REPORT_FILE="$REPORT_DIR/full-report.html"
|
|
||||||
|
|
||||||
COL_COUNT=2
|
|
||||||
PLATFORMS=
|
|
||||||
HAS_SUBTESTS=0
|
|
||||||
TOTAL_LAUNCHES=0
|
|
||||||
TOTAL_ERROR_LAUNCHES=0
|
|
||||||
|
|
||||||
while IFS= read -r f; do
|
|
||||||
CUR_DEPTH=0
|
|
||||||
TEST_SHORT_PATH=`basename "$f" .result`
|
|
||||||
TMPSTR=`dirname "$f"`
|
|
||||||
while [ "$TMPSTR" != "$RESULTS_DIR" ]; do
|
|
||||||
CUR_DEPTH=$(( $CUR_DEPTH + 1 ))
|
|
||||||
TEST_SHORT_PATH="$(basename "$TMPSTR")/$TEST_SHORT_PATH"
|
|
||||||
TMPSTR=`dirname "$TMPSTR"`
|
|
||||||
done
|
|
||||||
IS_SUBTEST=0
|
|
||||||
if [ ! -e "$TEST_SUITE/$TEST_SHORT_PATH" ]; then
|
|
||||||
HAS_SUBTESTS=1
|
|
||||||
IS_SUBTEST=1
|
|
||||||
fi
|
|
||||||
if [ $(( CUR_DEPTH + 2 )) -gt $COL_COUNT ]; then
|
|
||||||
COL_COUNT=$(( $CUR_DEPTH + 2 ))
|
|
||||||
fi
|
|
||||||
if [ $IS_SUBTEST -eq 0 ]; then
|
|
||||||
while IFS= read -r lin; do
|
|
||||||
eval $lin
|
|
||||||
if [ -z "$PLATFORMS" ]; then
|
|
||||||
PLATFORMS=$PLATFORM
|
|
||||||
else
|
|
||||||
FOUND_FLAG=0
|
|
||||||
for platf in $PLATFORMS; do
|
|
||||||
if [ $platf = $PLATFORM ]; then
|
|
||||||
FOUND_FLAG=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ $FOUND_FLAG -eq 0 ]; then
|
|
||||||
PLATFORMS="$PLATFORMS $PLATFORM"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
TOTAL_LAUNCHES=$(( $TOTAL_LAUNCHES + 1 ))
|
|
||||||
if [ "$ERROR_LEVEL" != "0" ]; then
|
|
||||||
TOTAL_ERROR_LAUNCHES=$(( $TOTAL_ERROR_LAUNCHES + 1 ))
|
|
||||||
fi
|
|
||||||
done <"$f"
|
|
||||||
fi
|
|
||||||
done <$RES_FILES
|
|
||||||
|
|
||||||
CAT_COUNT=$(( COL_COUNT - 1 - HAS_SUBTESTS - 1 ))
|
|
||||||
|
|
||||||
exec 5>"$REPORT_FILE"
|
|
||||||
exec 6>"$FULL_REPORT_FILE"
|
|
||||||
|
|
||||||
echo "<html>" >& 5
|
|
||||||
echo "<html>" >& 6
|
|
||||||
echo "<head>" >& 5
|
|
||||||
echo "<head>" >& 6
|
|
||||||
echo "<title>Test results for DVM-system. Revision $REV_NUMBER.</title>" >& 5
|
|
||||||
echo "<title>Test results for DVM-system. Revision $REV_NUMBER.</title>" >& 6
|
|
||||||
echo "<style>" >& 6
|
|
||||||
cat "$MY_DIR/report.css" >& 6
|
|
||||||
echo "</style>" >& 6
|
|
||||||
echo "<script type='text/javascript'>" >& 6
|
|
||||||
cat "$MY_DIR/report.js" >& 6
|
|
||||||
echo "</script>" >& 6
|
|
||||||
echo "</head>" >& 5
|
|
||||||
echo "</head>" >& 6
|
|
||||||
echo "<body>" >& 5
|
|
||||||
echo "<body>" >& 6
|
|
||||||
echo "<h1 align=center>Test results for DVM-system. Revision $REV_NUMBER.</h1>" >& 5
|
|
||||||
echo "<h1 align=center>Test results for DVM-system. Revision $REV_NUMBER.</h1>" >& 6
|
|
||||||
echo "<h2 align=center>Tested on platforms: $PLATFORMS.</h2>" >& 5
|
|
||||||
echo "<h2 align=center>Tested on platforms: $PLATFORMS.</h2>" >& 6
|
|
||||||
echo "<h3 align=center>Full report can be seen on <a href='$FULL_REP_URL'>$FULL_REP_URL</a></h3>" >& 5
|
|
||||||
echo "<p align=center>Launches with errors: $TOTAL_ERROR_LAUNCHES / $TOTAL_LAUNCHES</p>" >& 5
|
|
||||||
echo "<p align=center>Launches with errors: $TOTAL_ERROR_LAUNCHES / $TOTAL_LAUNCHES</p>" >& 6
|
|
||||||
echo "<h3 align=center><a href='sources.tgz'>Download sources of buggy tests</a></h3>" >& 6
|
|
||||||
echo "<table border=1 cellspacing=0 align=center>" >& 5
|
|
||||||
echo "<table border=1 cellspacing=0 align=center>" >& 6
|
|
||||||
echo "<tr>" >& 5
|
|
||||||
echo "<tr>" >& 6
|
|
||||||
CUR_COL=0
|
|
||||||
while [ $CUR_COL -lt $CAT_COUNT ]; do
|
|
||||||
echo "<th align=center>Category</th>" >& 5
|
|
||||||
echo "<th>Category</th>" >& 6
|
|
||||||
CUR_COL=$(( CUR_COL + 1 ))
|
|
||||||
done
|
|
||||||
echo "<th align=center>Test name</th>" >& 5
|
|
||||||
echo "<th>Test name</th>" >& 6
|
|
||||||
if [ $HAS_SUBTESTS -ne 0 ]; then
|
|
||||||
echo "<th>Subtest</th>" >& 6
|
|
||||||
fi
|
|
||||||
echo "<th align=center>Test result</th>" >& 5
|
|
||||||
echo "<th>Test result</th>" >& 6
|
|
||||||
echo "</tr>" >& 5
|
|
||||||
echo "</tr>" >& 6
|
|
||||||
|
|
||||||
output_cat_recursive()
|
|
||||||
{
|
|
||||||
if [ `basename "$1"` != "$1" ]; then
|
|
||||||
output_cat_recursive `dirname "$1"`
|
|
||||||
fi
|
|
||||||
if [ $TO_BRIEF -ne 0 ]; then
|
|
||||||
echo "<td align=center>" >& 5
|
|
||||||
basename "$1" >& 5
|
|
||||||
echo "</td>" >& 5
|
|
||||||
fi
|
|
||||||
echo "<td>" >& 6
|
|
||||||
basename "$1" >& 6
|
|
||||||
echo "</td>" >& 6
|
|
||||||
FILLED_COLS=$(( FILLED_COLS + 1 ))
|
|
||||||
if [ $FILLED_COLS -eq 1 -a `basename "$1"` = "Performance" ]; then
|
|
||||||
FORCE_TABLE=1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
output_cat()
|
|
||||||
{
|
|
||||||
FILLED_COLS=0
|
|
||||||
output_cat_recursive "$1"
|
|
||||||
while [ $FILLED_COLS -lt $CAT_COUNT ]; do
|
|
||||||
if [ $TO_BRIEF -ne 0 ]; then
|
|
||||||
echo "<td> </td>" >& 5
|
|
||||||
fi
|
|
||||||
echo "<td> </td>" >& 6
|
|
||||||
FILLED_COLS=$(( FILLED_COLS + 1 ))
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
nextDetailsId=1
|
|
||||||
|
|
||||||
while IFS= read -r f; do
|
|
||||||
CUR_DEPTH=0
|
|
||||||
TEST_SHORT_PATH=`basename "$f" .result`
|
|
||||||
TMPSTR=`dirname "$f"`
|
|
||||||
while [ "$TMPSTR" != "$RESULTS_DIR" ]; do
|
|
||||||
CUR_DEPTH=$(( $CUR_DEPTH + 1 ))
|
|
||||||
TEST_SHORT_PATH="$(basename "$TMPSTR")/$TEST_SHORT_PATH"
|
|
||||||
TMPSTR=`dirname "$TMPSTR"`
|
|
||||||
done
|
|
||||||
SUBTEST_NAME=
|
|
||||||
if [ ! -e "$TEST_SUITE/$TEST_SHORT_PATH" ]; then
|
|
||||||
SUBTEST_NAME=`basename "$TEST_SHORT_PATH"`
|
|
||||||
TEST_SHORT_PATH=`dirname "$TEST_SHORT_PATH"`
|
|
||||||
fi
|
|
||||||
HAS_FAILS=0
|
|
||||||
if [ `grep "TEST_PASSED=0" <"$f" | wc -l` -gt 0 ]; then
|
|
||||||
HAS_FAILS=1
|
|
||||||
if [ ! -e "$BUGGY_FILE_DIR/$TEST_SHORT_PATH" ]; then
|
|
||||||
mkdir -p `dirname "$BUGGY_FILE_DIR/$TEST_SHORT_PATH"`
|
|
||||||
cp -ur "$TEST_SUITE/$TEST_SHORT_PATH" "$BUGGY_FILE_DIR/$TEST_SHORT_PATH"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
TO_BRIEF=1
|
|
||||||
if [ -n "$SUBTEST_NAME" -o $HAS_FAILS -eq 0 ]; then
|
|
||||||
TO_BRIEF=0
|
|
||||||
fi
|
|
||||||
if [ $TO_BRIEF -ne 0 ]; then
|
|
||||||
echo "<tr>" >& 5
|
|
||||||
fi
|
|
||||||
echo "<tr>" >& 6
|
|
||||||
FORCE_TABLE=0
|
|
||||||
output_cat `dirname "$TEST_SHORT_PATH"`
|
|
||||||
if [ $TO_BRIEF -ne 0 ]; then
|
|
||||||
echo "<td align=center>" >& 5
|
|
||||||
echo `basename "$TEST_SHORT_PATH"` >& 5
|
|
||||||
echo "</td>" >& 5
|
|
||||||
fi
|
|
||||||
if [ -n "$SUBTEST_NAME" ]; then
|
|
||||||
echo "<td>" >& 6
|
|
||||||
echo `basename "$TEST_SHORT_PATH"` >& 6
|
|
||||||
echo "</td>" >& 6
|
|
||||||
echo "<td>" >& 6
|
|
||||||
echo "$SUBTEST_NAME" >& 6
|
|
||||||
echo "</td>" >& 6
|
|
||||||
else
|
|
||||||
echo "<td colspan=$((1 + HAS_SUBTESTS))>" >& 6
|
|
||||||
echo `basename "$TEST_SHORT_PATH"` >& 6
|
|
||||||
echo "</td>" >& 6
|
|
||||||
fi
|
|
||||||
ERROR_LEVELS=$(
|
|
||||||
while IFS= read -r lin; do
|
|
||||||
eval $lin
|
|
||||||
if [ -z "$ERROR_LEVEL" ]; then
|
|
||||||
ERROR_LEVEL=0
|
|
||||||
fi
|
|
||||||
echo $ERROR_LEVEL
|
|
||||||
done <"$f" | sort -unr)
|
|
||||||
if [ $TO_BRIEF -ne 0 ]; then
|
|
||||||
echo "<td align=center>" >& 5
|
|
||||||
fi
|
|
||||||
echo "<td>" >& 6
|
|
||||||
LAUNCH_COUNT=`wc -l <"$f"`
|
|
||||||
# echo "$LAUNCH_COUNT total" >& 5
|
|
||||||
# echo "$LAUNCH_COUNT total" >& 6
|
|
||||||
if [ -n "$ERROR_LEVELS" ]; then
|
|
||||||
for el in $ERROR_LEVELS; do
|
|
||||||
unset countByComment
|
|
||||||
unset passedByComment
|
|
||||||
declare -A countByComment
|
|
||||||
declare -A passedByComment
|
|
||||||
while IFS= read -r lin; do
|
|
||||||
eval $lin
|
|
||||||
if [ -z "$ERROR_LEVEL" ]; then
|
|
||||||
ERROR_LEVEL=0
|
|
||||||
fi
|
|
||||||
if [ "$ERROR_LEVEL" = "$el" ]; then
|
|
||||||
if [ -z "${countByComment["$RESULT_COMMENT"]}" ]; then
|
|
||||||
countByComment["$RESULT_COMMENT"]=0
|
|
||||||
fi
|
|
||||||
countByComment["$RESULT_COMMENT"]=$(( countByComment["$RESULT_COMMENT"] + 1 ))
|
|
||||||
passedByComment["$RESULT_COMMENT"]=$TEST_PASSED
|
|
||||||
fi
|
|
||||||
done <"$f"
|
|
||||||
for cmt in "${!countByComment[@]}"; do
|
|
||||||
if [ ${passedByComment["$cmt"]} -ne 0 ]; then
|
|
||||||
DIV_CLASS=passed
|
|
||||||
DIV_COLOR=green
|
|
||||||
else
|
|
||||||
DIV_CLASS=failed
|
|
||||||
DIV_COLOR=red
|
|
||||||
fi
|
|
||||||
if [ $TO_BRIEF -ne 0 ]; then
|
|
||||||
echo "<div style='color: $DIV_COLOR'>" >& 5
|
|
||||||
echo "${countByComment[$cmt]} $cmt" >& 5
|
|
||||||
echo "</div>" >& 5
|
|
||||||
fi
|
|
||||||
echo "<div class=$DIV_CLASS>" >& 6
|
|
||||||
if [ $HAS_FAILS -ne 0 -o $LAUNCH_COUNT -le $MAX_LONELY_OK -o $FORCE_TABLE -ne 0 ]; then
|
|
||||||
echo "<a href='#' class='details $DIV_CLASS' onclick='{ toggleElem(\"det$nextDetailsId\"); return false; }'>" >& 6
|
|
||||||
echo "<span class=details>${countByComment[$cmt]} $cmt</span>" >& 6
|
|
||||||
echo "</a>" >& 6
|
|
||||||
echo "<table border=1 cellspacing=0 class=details$FORCE_TABLE id='det$nextDetailsId'>" >& 6
|
|
||||||
echo "<tr>" >& 6
|
|
||||||
echo "<th>Platform</th>" >& 6
|
|
||||||
echo "<th>noH</th>" >& 6
|
|
||||||
echo "<th>autoTfm</th>" >& 6
|
|
||||||
echo "<th>Grid</th>" >& 6
|
|
||||||
echo "<th>CPUs</th>" >& 6
|
|
||||||
echo "<th>GPUs</th>" >& 6
|
|
||||||
echo "<th>Time</th>" >& 6
|
|
||||||
echo "</tr>" >& 6
|
|
||||||
while IFS= read -r lin; do
|
|
||||||
eval $lin
|
|
||||||
if [ -z "$ERROR_LEVEL" ]; then
|
|
||||||
ERROR_LEVEL=0
|
|
||||||
fi
|
|
||||||
if [ "$ERROR_LEVEL" = "$el" -a "$RESULT_COMMENT" = "$cmt" ]; then
|
|
||||||
echo "<tr>" >& 6
|
|
||||||
echo "<td>$PLATFORM</td>" >& 6
|
|
||||||
if [ $NOH_FLAG -ne 0 ]; then
|
|
||||||
echo "<td>+</td>" >& 6
|
|
||||||
else
|
|
||||||
echo "<td>-</td>" >& 6
|
|
||||||
fi
|
|
||||||
if [ $AUTOTFM_FLAG -ne 0 ]; then
|
|
||||||
echo "<td>+</td>" >& 6
|
|
||||||
else
|
|
||||||
echo "<td>-</td>" >& 6
|
|
||||||
fi
|
|
||||||
if [ -n "$PROC_GRID" ]; then
|
|
||||||
echo "<td>$PROC_GRID</td>" >& 6
|
|
||||||
else
|
|
||||||
echo "<td>N/A</td>" >& 6
|
|
||||||
fi
|
|
||||||
if [ -n "$CPUS_PER_PROC" ]; then
|
|
||||||
echo "<td>$CPUS_PER_PROC</td>" >& 6
|
|
||||||
else
|
|
||||||
echo "<td>N/A</td>" >& 6
|
|
||||||
fi
|
|
||||||
if [ -n "$CUDAS_PER_PROC" ]; then
|
|
||||||
echo "<td>$CUDAS_PER_PROC</td>" >& 6
|
|
||||||
else
|
|
||||||
echo "<td>N/A</td>" >& 6
|
|
||||||
fi
|
|
||||||
if [ -n "$CALC_TIME" ]; then
|
|
||||||
echo "<td>$CALC_TIME</td>" >& 6
|
|
||||||
else
|
|
||||||
echo "<td>N/A</td>" >& 6
|
|
||||||
fi
|
|
||||||
echo "</tr>" >& 6
|
|
||||||
fi
|
|
||||||
done <"$f"
|
|
||||||
echo "</table>" >& 6
|
|
||||||
nextDetailsId=$(( nextDetailsId + 1 ))
|
|
||||||
else
|
|
||||||
echo "${countByComment[$cmt]} $cmt" >& 6
|
|
||||||
fi
|
|
||||||
echo "</div>" >& 6
|
|
||||||
done
|
|
||||||
done
|
|
||||||
else
|
|
||||||
if [ $TO_BRIEF -ne 0 ]; then
|
|
||||||
echo " " >& 5
|
|
||||||
fi
|
|
||||||
echo " " >& 6
|
|
||||||
fi
|
|
||||||
if [ $TO_BRIEF -ne 0 ]; then
|
|
||||||
echo "</td>" >& 5
|
|
||||||
echo "</tr>" >& 5
|
|
||||||
fi
|
|
||||||
echo "</td>" >& 6
|
|
||||||
echo "</tr>" >& 6
|
|
||||||
done <$RES_FILES
|
|
||||||
|
|
||||||
echo "</table>" >& 5
|
|
||||||
echo "</table>" >& 6
|
|
||||||
echo "</body>" >& 5
|
|
||||||
echo "</body>" >& 6
|
|
||||||
echo "</html>" >& 5
|
|
||||||
echo "</html>" >& 6
|
|
||||||
|
|
||||||
exec 5>&-
|
|
||||||
exec 6>&-
|
|
||||||
|
|
||||||
cd "$REPORT_DIR"
|
|
||||||
tar -czf "sources.tgz" "sources"
|
|
||||||
cd "$SAVE_DIR"
|
|
||||||
|
|
||||||
rm $RES_FILES
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Default
|
|
||||||
# Assuming several identical processors and not counting HT cores
|
|
||||||
CPUS_PER_NODE=$(( `cat /proc/cpuinfo | grep "cpu cores" | LC_ALL=C sort | uniq | awk '{ print $4 }'` * `cat /proc/cpuinfo | grep "physical id" | LC_ALL=C sort | uniq | wc -l` ))
|
|
||||||
which nvidia-smi >/dev/null 2>& 1
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
CUDAS_PER_NODE=`nvidia-smi -L 2>/dev/null | wc -l`
|
|
||||||
else
|
|
||||||
CUDAS_PER_NODE=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Specializations
|
|
||||||
if [ `hostname` = "k100" ]; then
|
|
||||||
CPUS_PER_NODE=12
|
|
||||||
CUDAS_PER_NODE=3
|
|
||||||
fi
|
|
||||||
@@ -1,352 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Bash is required due to usage of arrays
|
|
||||||
|
|
||||||
SAVE_DIR=`pwd`
|
|
||||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
|
||||||
|
|
||||||
DVMSYS_DIR="$1"
|
|
||||||
TEST_SUITE="$2"
|
|
||||||
TASK_PROCESSOR_FD=$3
|
|
||||||
|
|
||||||
. "$MY_DIR/machine-config.sh"
|
|
||||||
|
|
||||||
if [ -f "$SAVE_DIR/machine-config.sh" ]; then
|
|
||||||
. "$SAVE_DIR/machine-config.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
. "$MY_DIR/test-utils.sh"
|
|
||||||
|
|
||||||
PLATFORM_CMD=$(grep "PLATFORM=" <"$DVMSYS_DIR/bin/dvm_settings.sh" | sed -s 's/export //g')
|
|
||||||
eval $PLATFORM_CMD
|
|
||||||
|
|
||||||
SETTINGS_FILE=settings
|
|
||||||
ANALYZER_FILE=test-analyzer.sh
|
|
||||||
|
|
||||||
prepare_new_dir() {
|
|
||||||
local TASK_DIR
|
|
||||||
TASK_DIR=`mktemp -d`
|
|
||||||
local COMP_OPTS
|
|
||||||
COMP_OPTS="$1"
|
|
||||||
local COMPILE_PID
|
|
||||||
local COMPILE_RES
|
|
||||||
cd "$TASK_DIR"
|
|
||||||
echo "#!/bin/sh" >dvm
|
|
||||||
echo "export dvmarithmloopsize=1000000" >>dvm
|
|
||||||
echo "exec '$DVMSYS_DIR/bin/dvm_drv' \"\$@\"" >>dvm
|
|
||||||
chmod a+x dvm
|
|
||||||
cp "$DVMSYS_DIR/user/usr.par" ./
|
|
||||||
set -m
|
|
||||||
if [ -f "$TEST_FILE" ]; then
|
|
||||||
cp "$TEST_FILE" "$TEST_NAME"
|
|
||||||
./dvm $LANG_COMP -shared-dvm $COMP_OPTS "$TEST_NAME" >"build.log" 2>& 1 &
|
|
||||||
COMPILE_PID=$!
|
|
||||||
else
|
|
||||||
find "$TEST_FILE" -mindepth 1 -maxdepth 1 | xargs cp -r -t .
|
|
||||||
PATH="$TASK_DIR:$PATH" ./compile.sh $COMP_OPTS >"build.log" 2>& 1 &
|
|
||||||
COMPILE_PID=$!
|
|
||||||
fi
|
|
||||||
proc_killer -$COMPILE_PID 600 &
|
|
||||||
KILLER_PID=$!
|
|
||||||
disown
|
|
||||||
wait $COMPILE_PID
|
|
||||||
COMPILE_RES=$?
|
|
||||||
kill -2 $KILLER_PID >/dev/null 2>& 1
|
|
||||||
kill -15 $KILLER_PID >/dev/null 2>& 1
|
|
||||||
kill -9 $KILLER_PID >/dev/null 2>& 1
|
|
||||||
if [ ! -f "$TEST_FILE" ] && [ $COMPILE_RES -eq 0 ] && [ ! -f "$TEST_EXENAME" ]; then
|
|
||||||
:> "$TEST_EXENAME"
|
|
||||||
fi
|
|
||||||
echo "$TASK_DIR"
|
|
||||||
}
|
|
||||||
|
|
||||||
do_test() {
|
|
||||||
TEST_FILE="$1"
|
|
||||||
TEST_NAME=`basename "$TEST_FILE"`
|
|
||||||
TEST_SHORT_PATH="$TEST_NAME"
|
|
||||||
TMPSTR=`dirname $TEST_FILE`
|
|
||||||
while [ "$TMPSTR" != "$TEST_SUITE" ]; do
|
|
||||||
TEST_SHORT_PATH="$(basename $TMPSTR)/$TEST_SHORT_PATH"
|
|
||||||
TMPSTR=`dirname $TMPSTR`
|
|
||||||
done
|
|
||||||
TEST_EXENAME="${TEST_NAME%.*}"
|
|
||||||
case ${TEST_NAME##*.} in
|
|
||||||
c|cdv) IS_FORTRAN=0;;
|
|
||||||
f|f90|fdv) IS_FORTRAN=1;;
|
|
||||||
esac
|
|
||||||
if [ $IS_FORTRAN -ne 0 ]; then
|
|
||||||
LANG_COMP="f"
|
|
||||||
else
|
|
||||||
LANG_COMP="c"
|
|
||||||
fi
|
|
||||||
TEST_DIMS=
|
|
||||||
if [ -n "$DIMENSION_COUNT" ]; then
|
|
||||||
TEST_DIMS=$DIMENSION_COUNT
|
|
||||||
else
|
|
||||||
for t in $DIMENSION_MAP; do
|
|
||||||
FN=`echo $t | sed 's/=/ /g' | awk '{print $1}'`
|
|
||||||
DIM=`echo $t | sed 's/=/ /g' | awk '{print $2}'`
|
|
||||||
if [ "$FN" = "$TEST_NAME" ]; then
|
|
||||||
TEST_DIMS=$DIM
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
if [ -z "$TEST_DIMS" ]; then
|
|
||||||
# Trying to extract dimension number from filename - it is first digit in it.
|
|
||||||
TEST_DIMS=`echo "$TEST_EXENAME" | sed 's/[^0-9]//g' | cut -c1`
|
|
||||||
fi
|
|
||||||
if [ -z "$TEST_DIMS" ]; then
|
|
||||||
echo "Can not find information about dimension count for test $TEST_FILE" >& 2
|
|
||||||
TEST_DIMS=1
|
|
||||||
fi
|
|
||||||
if [ $MAX_DIM_PROC_COUNT -le 0 ]; then
|
|
||||||
MAX_DIM_PROC_COUNT=$MAX_PROC_COUNT
|
|
||||||
fi
|
|
||||||
while true; do
|
|
||||||
if [ -f "$SAVE_DIR/dvm-tester.pause" ] && [ "$(cat "$SAVE_DIR/dvm-tester.pause")" = "Immediate" ]; then
|
|
||||||
echo "Paused explicitly (local)"
|
|
||||||
elif [ -f "$MY_DIR/dvm-tester.pause" ] && [ "$(cat "$MY_DIR/dvm-tester.pause")" = "Immediate" ]; then
|
|
||||||
echo "Paused explicitly (global)"
|
|
||||||
else
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 60
|
|
||||||
done
|
|
||||||
echo "Compiling $TEST_SHORT_PATH on $PLATFORM platform"
|
|
||||||
if [ $GPU_ONLY -eq 0 ]; then
|
|
||||||
# Compile with noH
|
|
||||||
NOH_DIR=`prepare_new_dir "-noH"`
|
|
||||||
if [ -f "$NOH_DIR/$TEST_EXENAME" ]; then
|
|
||||||
ISSUE_NOH=1
|
|
||||||
else
|
|
||||||
ISSUE_NOH=0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ $DVM_ONLY -eq 0 ]; then
|
|
||||||
# Compile without noH
|
|
||||||
H_DIR=`prepare_new_dir ""`
|
|
||||||
if [ -f "$H_DIR/$TEST_EXENAME" ]; then
|
|
||||||
ISSUE_H=1
|
|
||||||
else
|
|
||||||
ISSUE_H=0
|
|
||||||
fi
|
|
||||||
# And with autoTfm
|
|
||||||
AUTOTFM_DIR=`prepare_new_dir "-autoTfm"`
|
|
||||||
if [ -f "$AUTOTFM_DIR/$TEST_EXENAME" ]; then
|
|
||||||
ISSUE_AUTOTFM=1
|
|
||||||
else
|
|
||||||
ISSUE_AUTOTFM=0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# cat "$H_DIR/build.log"
|
|
||||||
echo "Generating tasks for $TEST_SHORT_PATH with $TEST_DIMS dimensions on $PLATFORM platform"
|
|
||||||
COMMON_PART=$(
|
|
||||||
echo -n "TASK_TYPE=1"
|
|
||||||
echo -n " TEST_PLATFORM=$PLATFORM"
|
|
||||||
echo -n " SHARE_RESOURCES=$SHARE_RESOURCES"
|
|
||||||
echo -n " TEST_ANALYZER=\"$TEST_ANALYZER\""
|
|
||||||
echo -n " TEST_SHORT_PATH=\"$TEST_SHORT_PATH\""
|
|
||||||
echo -n " TASK_EXE=\"$TEST_EXENAME\""
|
|
||||||
echo -n " TEST_MAX_TIME=$MAX_TIME"
|
|
||||||
)
|
|
||||||
# Additional size number 0 added
|
|
||||||
i=0
|
|
||||||
while [ $i -le $TEST_DIMS ]; do
|
|
||||||
sizes[$i]=1
|
|
||||||
i=$(( i + 1 ))
|
|
||||||
done
|
|
||||||
counter=0
|
|
||||||
totalSize=1
|
|
||||||
while [ $(( sizes[0] )) -eq 1 ]; do
|
|
||||||
PROC_GRID=
|
|
||||||
if [ $IS_FORTRAN -eq 0 ]; then
|
|
||||||
i=1
|
|
||||||
while [ $i -le $TEST_DIMS ]; do
|
|
||||||
PROC_GRID="$PROC_GRID $((sizes[i]))"
|
|
||||||
i=$(( i + 1 ))
|
|
||||||
done
|
|
||||||
else
|
|
||||||
i=$TEST_DIMS
|
|
||||||
while [ $i -ge 1 ]; do
|
|
||||||
PROC_GRID="$PROC_GRID $((sizes[i]))"
|
|
||||||
i=$(( i - 1 ))
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
if [ $GPU_ONLY -eq 0 ]; then
|
|
||||||
if [ $ISSUE_NOH -ne 0 ]; then
|
|
||||||
echo -n "$COMMON_PART" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_DIR=\"$NOH_DIR\"" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_NOH_FLAG=1" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " CPUS_PER_PROC=1" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " PROC_GRID=\"$PROC_GRID\"" >&$TASK_PROCESSOR_FD
|
|
||||||
counter=$(( counter + 1 ))
|
|
||||||
echo >&$TASK_PROCESSOR_FD
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ $DVM_ONLY -eq 0 ]; then
|
|
||||||
# Single-device and single-threaded configurations
|
|
||||||
if [ $GPU_ONLY -eq 0 ]; then
|
|
||||||
if [ $ISSUE_H -ne 0 ]; then
|
|
||||||
echo -n "$COMMON_PART" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_DIR=\"$H_DIR\"" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " CPUS_PER_PROC=1" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " PROC_GRID=\"$PROC_GRID\"" >&$TASK_PROCESSOR_FD
|
|
||||||
counter=$(( counter + 1 ))
|
|
||||||
echo >&$TASK_PROCESSOR_FD
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ $CUDAS_PER_NODE -gt 0 ]; then
|
|
||||||
if [ $ISSUE_H -ne 0 ]; then
|
|
||||||
echo -n "$COMMON_PART" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_DIR=\"$H_DIR\"" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " CUDAS_PER_PROC=1" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " PROC_GRID=\"$PROC_GRID\"" >&$TASK_PROCESSOR_FD
|
|
||||||
counter=$(( counter + 1 ))
|
|
||||||
echo >&$TASK_PROCESSOR_FD
|
|
||||||
fi
|
|
||||||
if [ $ISSUE_AUTOTFM -ne 0 ]; then
|
|
||||||
echo -n "$COMMON_PART" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_DIR=\"$AUTOTFM_DIR\"" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_AUTOTFM_FLAG=1" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " CUDAS_PER_PROC=1" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " PROC_GRID=\"$PROC_GRID\"" >&$TASK_PROCESSOR_FD
|
|
||||||
counter=$(( counter + 1 ))
|
|
||||||
echo >&$TASK_PROCESSOR_FD
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# Multi-device and multi-threaded configurations
|
|
||||||
MAX_DEVS_PER_PROC=$((sizes[1]))
|
|
||||||
DEVS_PER_PROC=2
|
|
||||||
while [ $DEVS_PER_PROC -le $MAX_DEVS_PER_PROC ]; do
|
|
||||||
if [ $(( MAX_DEVS_PER_PROC % DEVS_PER_PROC )) -ne 0 ]; then
|
|
||||||
DEVS_PER_PROC=$(( $DEVS_PER_PROC + 1 ))
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if [ $IS_FORTRAN -eq 0 ]; then
|
|
||||||
MD_PROC_GRID=" $((MAX_DEVS_PER_PROC / DEVS_PER_PROC))"
|
|
||||||
i=2
|
|
||||||
while [ $i -le $TEST_DIMS ]; do
|
|
||||||
MD_PROC_GRID="$MD_PROC_GRID $((sizes[i]))"
|
|
||||||
i=$(( i + 1 ))
|
|
||||||
done
|
|
||||||
else
|
|
||||||
MD_PROC_GRID=
|
|
||||||
i=$TEST_DIMS
|
|
||||||
while [ $i -ge 2 ]; do
|
|
||||||
MD_PROC_GRID="$MD_PROC_GRID $((sizes[i]))"
|
|
||||||
i=$(( i - 1 ))
|
|
||||||
done
|
|
||||||
MD_PROC_GRID="$MD_PROC_GRID $((MAX_DEVS_PER_PROC / DEVS_PER_PROC))"
|
|
||||||
fi
|
|
||||||
if [ $GPU_ONLY -eq 0 ]; then
|
|
||||||
if [ $ISSUE_H -ne 0 ]; then
|
|
||||||
echo -n "$COMMON_PART" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_DIR=\"$H_DIR\"" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " CPUS_PER_PROC=$DEVS_PER_PROC" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " PROC_GRID=\"$MD_PROC_GRID\"" >&$TASK_PROCESSOR_FD
|
|
||||||
counter=$(( counter + 1 ))
|
|
||||||
echo >&$TASK_PROCESSOR_FD
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ $ALLOW_MULTIDEV -ne 0 ] && [ $CUDAS_PER_NODE -gt 0 ]; then
|
|
||||||
for ((GPUS_PER_PROC=1; GPUS_PER_PROC<=$DEVS_PER_PROC; GPUS_PER_PROC++)); do
|
|
||||||
if [ $ISSUE_H -ne 0 ]; then
|
|
||||||
echo -n "$COMMON_PART" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_DIR=\"$H_DIR\"" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " CPUS_PER_PROC=$(($DEVS_PER_PROC - $GPUS_PER_PROC))" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " CUDAS_PER_PROC=$GPUS_PER_PROC" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " PROC_GRID=\"$MD_PROC_GRID\"" >&$TASK_PROCESSOR_FD
|
|
||||||
counter=$(( counter + 1 ))
|
|
||||||
echo >&$TASK_PROCESSOR_FD
|
|
||||||
fi
|
|
||||||
if [ $ISSUE_AUTOTFM -ne 0 ]; then
|
|
||||||
echo -n "$COMMON_PART" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_DIR=\"$AUTOTFM_DIR\"" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_AUTOTFM_FLAG=1" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " CPUS_PER_PROC=$(($DEVS_PER_PROC - $GPUS_PER_PROC))" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " CUDAS_PER_PROC=$GPUS_PER_PROC" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " PROC_GRID=\"$MD_PROC_GRID\"" >&$TASK_PROCESSOR_FD
|
|
||||||
counter=$(( counter + 1 ))
|
|
||||||
echo >&$TASK_PROCESSOR_FD
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
DEVS_PER_PROC=$(( $DEVS_PER_PROC + 1 ))
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
# Advance to next configuration
|
|
||||||
i=$TEST_DIMS
|
|
||||||
while [ $i -ge 0 ]; do
|
|
||||||
sizes[$i]=$(( sizes[i] + 1 ))
|
|
||||||
totalSize=1
|
|
||||||
j=1
|
|
||||||
while [ $j -le $TEST_DIMS ]; do
|
|
||||||
totalSize=$(( totalSize * sizes[j] ))
|
|
||||||
j=$(( j + 1 ))
|
|
||||||
done
|
|
||||||
if [ $(( sizes[i] )) -le $MAX_DIM_PROC_COUNT -a $totalSize -le $MAX_PROC_COUNT ]; then
|
|
||||||
break
|
|
||||||
elif [ $i -gt 0 ]; then
|
|
||||||
sizes[$i]=1
|
|
||||||
fi
|
|
||||||
i=$(( i - 1 ))
|
|
||||||
done
|
|
||||||
done
|
|
||||||
echo "Generated $counter tasks"
|
|
||||||
COMMON_PART=$(
|
|
||||||
echo -n "TASK_TYPE=0"
|
|
||||||
echo -n " TEST_PLATFORM=$PLATFORM"
|
|
||||||
echo -n " TEST_SHORT_PATH=\"$TEST_SHORT_PATH\""
|
|
||||||
echo -n " TASK_EXE=\"$TEST_EXENAME\""
|
|
||||||
)
|
|
||||||
if [ $GPU_ONLY -eq 0 ]; then
|
|
||||||
echo -n "$COMMON_PART" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_DIR=\"$NOH_DIR\"" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_NOH_FLAG=1" >&$TASK_PROCESSOR_FD
|
|
||||||
echo >&$TASK_PROCESSOR_FD
|
|
||||||
fi
|
|
||||||
if [ $DVM_ONLY -eq 0 ]; then
|
|
||||||
echo -n "$COMMON_PART" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_DIR=\"$H_DIR\"" >&$TASK_PROCESSOR_FD
|
|
||||||
echo >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n "$COMMON_PART" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_DIR=\"$AUTOTFM_DIR\"" >&$TASK_PROCESSOR_FD
|
|
||||||
echo -n " TASK_AUTOTFM_FLAG=1" >&$TASK_PROCESSOR_FD
|
|
||||||
echo >&$TASK_PROCESSOR_FD
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
traverse_tests() {
|
|
||||||
CUR_DIR="$1"
|
|
||||||
if [ -f "$CUR_DIR/$SETTINGS_FILE" ]; then
|
|
||||||
. "$CUR_DIR/$SETTINGS_FILE"
|
|
||||||
fi
|
|
||||||
if [ -f "$CUR_DIR/$ANALYZER_FILE" ]; then
|
|
||||||
TEST_ANALYZER="$CUR_DIR/$ANALYZER_FILE"
|
|
||||||
fi
|
|
||||||
TESTS=`mktemp`
|
|
||||||
find "$CUR_DIR" -mindepth 1 -maxdepth 1 -regex '.*[.]\(c\|cdv\|f\|f90\|fdv\)' | LC_ALL=C sort >$TESTS
|
|
||||||
DIRS=`mktemp`
|
|
||||||
find "$CUR_DIR" -mindepth 1 -maxdepth 1 -type d -regex '.*/[^.]*' | LC_ALL=C sort >$DIRS
|
|
||||||
while IFS= read -r f; do
|
|
||||||
( do_test "$f" )
|
|
||||||
done <$TESTS
|
|
||||||
while IFS= read -r d; do
|
|
||||||
( traverse_tests "$d" )
|
|
||||||
done <$DIRS
|
|
||||||
rm $DIRS $TESTS
|
|
||||||
}
|
|
||||||
|
|
||||||
set_default_settings() {
|
|
||||||
MAX_PROC_COUNT=1
|
|
||||||
MAX_DIM_PROC_COUNT=0
|
|
||||||
SHARE_RESOURCES=0
|
|
||||||
ALLOW_MULTIDEV=1
|
|
||||||
DVM_ONLY=0
|
|
||||||
GPU_ONLY=0
|
|
||||||
TEST_ANALYZER="$MY_DIR/default-test-analyzer.sh"
|
|
||||||
MAX_TIME=300
|
|
||||||
}
|
|
||||||
|
|
||||||
set_default_settings
|
|
||||||
(traverse_tests "$TEST_SUITE")
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
th, td {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
div.passed, a.passed {
|
|
||||||
color: green;
|
|
||||||
}
|
|
||||||
div.failed, a.failed {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
a.details {
|
|
||||||
text-decoration: none;
|
|
||||||
font-size: 50%;
|
|
||||||
border-bottom: 1px dashed;
|
|
||||||
}
|
|
||||||
span.details {
|
|
||||||
font-size: 200%;
|
|
||||||
line-height: normal;
|
|
||||||
}
|
|
||||||
table.details0 {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
table.details1 {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
function toggleElem(id) {
|
|
||||||
var e = document.getElementById(id);
|
|
||||||
if(e.style.display == 'block')
|
|
||||||
e.style.display = 'none';
|
|
||||||
else
|
|
||||||
e.style.display = 'block';
|
|
||||||
}
|
|
||||||
@@ -1,366 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Bash is required due to usage of 'disown' command
|
|
||||||
|
|
||||||
SAVE_DIR=`pwd`
|
|
||||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
|
||||||
|
|
||||||
RESULTS_DIR="$1"
|
|
||||||
|
|
||||||
. "$MY_DIR/machine-config.sh"
|
|
||||||
|
|
||||||
if [ -f "$SAVE_DIR/machine-config.sh" ]; then
|
|
||||||
. "$SAVE_DIR/machine-config.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
. "$MY_DIR/configure-run.sh"
|
|
||||||
|
|
||||||
if [ -f "$SAVE_DIR/configure-run.sh" ]; then
|
|
||||||
. "$SAVE_DIR/configure-run.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
. "$MY_DIR/test-utils.sh"
|
|
||||||
|
|
||||||
if [ $INTERACTIVE -ne 0 ]; then
|
|
||||||
stdout_fn() {
|
|
||||||
echo "$1.stdout"
|
|
||||||
}
|
|
||||||
stderr_fn() {
|
|
||||||
echo "$1.stderr"
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $HAS_RES_MANAGER -eq 0 ]; then
|
|
||||||
RES_MAN_DIR=`mktemp -d`
|
|
||||||
fi
|
|
||||||
|
|
||||||
resources_freed() {
|
|
||||||
FN=`mktemp`
|
|
||||||
if [ $SHARE_RESOURCES -eq 0 ]; then
|
|
||||||
FREED_CPUS=$(( CPUS_PER_NODE * MAX_CPU_SHARING_FACTOR ))
|
|
||||||
FREED_CUDAS=$(( CUDAS_PER_NODE * MAX_CUDA_SHARING_FACTOR ))
|
|
||||||
else
|
|
||||||
FREED_CPUS=$(( totalProcs * CPUS_PER_PROC ))
|
|
||||||
FREED_CUDAS=$(( totalProcs * CUDAS_PER_PROC ))
|
|
||||||
fi
|
|
||||||
echo "FREED_CPUS=$FREED_CPUS" >>$FN
|
|
||||||
echo "FREED_CUDAS=$FREED_CUDAS" >>$FN
|
|
||||||
# echo "rm $FN" >>$FN
|
|
||||||
mv $FN $RES_MAN_DIR/
|
|
||||||
}
|
|
||||||
|
|
||||||
interactive_launcher() {
|
|
||||||
cd "$LAUNCH_DIR"
|
|
||||||
STDOUT_FN=`stdout_fn "$LAUNCH_NAME"`
|
|
||||||
STDERR_FN=`stderr_fn "$LAUNCH_NAME"`
|
|
||||||
:>$STDOUT_FN
|
|
||||||
:>$STDERR_FN
|
|
||||||
set -m
|
|
||||||
# echo ./dvm run $PROC_GRID "$TASK_EXE"
|
|
||||||
START_T=`date +%s`
|
|
||||||
if [ -f "run.sh" ]; then
|
|
||||||
PATH="$LAUNCH_DIR:$PATH" PROC_GRID="$PROC_GRID" DVMH_PPN=$LAUNCH_PPN DVMH_NUM_THREADS=$CPUS_PER_PROC DVMH_NUM_CUDAS=$CUDAS_PER_PROC ./run.sh </dev/null >"$STDOUT_FN" 2>"$STDERR_FN" &
|
|
||||||
LAUNCH_PID=$!
|
|
||||||
else
|
|
||||||
DVMH_PPN=$LAUNCH_PPN DVMH_NUM_THREADS=$CPUS_PER_PROC DVMH_NUM_CUDAS=$CUDAS_PER_PROC ./dvm run $PROC_GRID "$TASK_EXE" </dev/null >"$STDOUT_FN" 2>"$STDERR_FN" &
|
|
||||||
LAUNCH_PID=$!
|
|
||||||
fi
|
|
||||||
if [ $TEST_MAX_TIME -gt 0 ]; then
|
|
||||||
# echo "Setting proc_killer to process $LAUNCH_PID for $TEST_MAX_TIME"
|
|
||||||
proc_killer -$LAUNCH_PID $TEST_MAX_TIME </dev/null >/dev/null 2>& 1 &
|
|
||||||
KILLER_PID=$!
|
|
||||||
disown
|
|
||||||
fi
|
|
||||||
wait $LAUNCH_PID
|
|
||||||
START_RES=$?
|
|
||||||
END_T=`date +%s`
|
|
||||||
CALC_TIME=$(( END_T - START_T ))
|
|
||||||
if [ $TEST_MAX_TIME -gt 0 ]; then
|
|
||||||
kill -2 $KILLER_PID >/dev/null 2>& 1
|
|
||||||
kill -15 $KILLER_PID >/dev/null 2>& 1
|
|
||||||
kill -9 $KILLER_PID >/dev/null 2>& 1
|
|
||||||
fi
|
|
||||||
if [ $HAS_RES_MANAGER -eq 0 ]; then
|
|
||||||
resources_freed
|
|
||||||
fi
|
|
||||||
echo "$START_RES $CALC_TIME" >"$TASK_EXE.finished"
|
|
||||||
}
|
|
||||||
|
|
||||||
non_interactive_launcher() {
|
|
||||||
cd "$LAUNCH_DIR"
|
|
||||||
STDOUT_FN=`mktemp`
|
|
||||||
STDERR_FN=`mktemp`
|
|
||||||
# echo ./dvm run $PROC_GRID "$TASK_EXE"
|
|
||||||
if [ $TEST_MAX_TIME -gt 0 ]; then
|
|
||||||
export maxtime=$(( (TEST_MAX_TIME + 59) / 60))
|
|
||||||
fi
|
|
||||||
if [ -f "run.sh" ]; then
|
|
||||||
PATH="$LAUNCH_DIR:$PATH" PROC_GRID="$PROC_GRID" DVMH_PPN=$LAUNCH_PPN DVMH_NUM_THREADS=$CPUS_PER_PROC DVMH_NUM_CUDAS=$CUDAS_PER_PROC ./run.sh >$STDOUT_FN 2>$STDERR_FN
|
|
||||||
START_RES=$?
|
|
||||||
else
|
|
||||||
DVMH_PPN=$LAUNCH_PPN DVMH_NUM_THREADS=$CPUS_PER_PROC DVMH_NUM_CUDAS=$CUDAS_PER_PROC ./dvm run $PROC_GRID "$TASK_EXE" >$STDOUT_FN 2>$STDERR_FN
|
|
||||||
START_RES=$?
|
|
||||||
fi
|
|
||||||
unset maxtime
|
|
||||||
:>"$TASK_EXE.committed"
|
|
||||||
IS_LAUNCHED=`is_launched $STDOUT_FN $STDERR_FN`
|
|
||||||
rm $STDOUT_FN $STDERR_FN
|
|
||||||
if [ $START_RES -eq 0 -a $IS_LAUNCHED -ne 0 ]; then
|
|
||||||
while [ `is_finished "$LAUNCH_NAME"` -eq 0 ]; do
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
CALC_TIME=`get_elapsed_time "$LAUNCH_NAME"`
|
|
||||||
fi
|
|
||||||
if [ $HAS_RES_MANAGER -eq 0 ]; then
|
|
||||||
resources_freed
|
|
||||||
fi
|
|
||||||
echo "$START_RES $CALC_TIME" >"$TASK_EXE.finished"
|
|
||||||
}
|
|
||||||
|
|
||||||
already_analyzed() {
|
|
||||||
# echo -n "PLATFORM=\"$TEST_PLATFORM\""
|
|
||||||
# echo -n " NOH_FLAG=$TASK_NOH_FLAG"
|
|
||||||
# echo -n " AUTOTFM_FLAG=$TASK_AUTOTFM_FLAG"
|
|
||||||
# echo -n " PROC_GRID=\"$PROC_GRID\""
|
|
||||||
# echo -n " CPUS_PER_PROC=$CPUS_PER_PROC"
|
|
||||||
# echo -n " CUDAS_PER_PROC=$CUDAS_PER_PROC"
|
|
||||||
local res
|
|
||||||
res=0
|
|
||||||
if [ -f "$RESULTS_DIR/$TEST_SHORT_PATH.result" ]; then
|
|
||||||
if [ $( cat "$RESULTS_DIR/$TEST_SHORT_PATH.result" | grep "PLATFORM=\"$TEST_PLATFORM\"" | grep "NOH_FLAG=$TASK_NOH_FLAG" | grep "AUTOTFM_FLAG=$TASK_AUTOTFM_FLAG" | grep "PROC_GRID=\"$PROC_GRID\"" | grep "CPUS_PER_PROC=$CPUS_PER_PROC" | grep "CUDAS_PER_PROC=$CUDAS_PER_PROC" | wc -l ) -gt 0 ]; then
|
|
||||||
res=1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo $res
|
|
||||||
}
|
|
||||||
|
|
||||||
launcher() {
|
|
||||||
counter=0
|
|
||||||
if [ $HAS_RES_MANAGER -eq 0 ]; then
|
|
||||||
if [ $MAX_NODES_PER_TASK -gt 1 ]; then
|
|
||||||
echo "Can manage resources only for one-node system"
|
|
||||||
MAX_NODES_PER_TASK=1
|
|
||||||
fi
|
|
||||||
FREE_CPUS=$(( CPUS_PER_NODE * MAX_CPU_SHARING_FACTOR ))
|
|
||||||
FREE_CUDAS=$(( CUDAS_PER_NODE * MAX_CUDA_SHARING_FACTOR ))
|
|
||||||
fi
|
|
||||||
exec 4>$1
|
|
||||||
while IFS= read -r TASK_SPEC; do
|
|
||||||
TEST_PLATFORM=Unknown
|
|
||||||
TASK_NOH_FLAG=0
|
|
||||||
TASK_AUTOTFM_FLAG=0
|
|
||||||
PROC_GRID=0
|
|
||||||
CPUS_PER_PROC=0
|
|
||||||
CUDAS_PER_PROC=0
|
|
||||||
eval $TASK_SPEC
|
|
||||||
LAUNCHED_FLAG=0
|
|
||||||
ALREADY_ANALYZED=$( already_analyzed )
|
|
||||||
if [ $TASK_TYPE -eq 1 -a $ALREADY_ANALYZED -eq 0 ]; then
|
|
||||||
CAN_CPUS=$CPUS_PER_NODE
|
|
||||||
CAN_CUDAS=$CUDAS_PER_NODE
|
|
||||||
if [ $SHARE_RESOURCES -ne 0 ]; then
|
|
||||||
CAN_CPUS=$(( CAN_CPUS * MAX_CPU_SHARING_FACTOR ))
|
|
||||||
CAN_CUDAS=$(( CAN_CUDAS * MAX_CUDA_SHARING_FACTOR ))
|
|
||||||
fi
|
|
||||||
LAUNCH_PPN=$MAX_PPN
|
|
||||||
CUR_PPN=$LAUNCH_PPN
|
|
||||||
if [ $CPUS_PER_PROC -gt 0 ]; then
|
|
||||||
CUR_PPN=$(( CAN_CPUS / $CPUS_PER_PROC ))
|
|
||||||
fi
|
|
||||||
if [ $CUR_PPN -lt $LAUNCH_PPN ]; then
|
|
||||||
LAUNCH_PPN=$CUR_PPN
|
|
||||||
fi
|
|
||||||
if [ $CUDAS_PER_PROC -gt 0 ]; then
|
|
||||||
CUR_PPN=$(( CAN_CUDAS / $CUDAS_PER_PROC ))
|
|
||||||
fi
|
|
||||||
if [ $CUR_PPN -lt $LAUNCH_PPN ]; then
|
|
||||||
LAUNCH_PPN=$CUR_PPN
|
|
||||||
fi
|
|
||||||
totalProcs=1
|
|
||||||
for proc in $PROC_GRID; do
|
|
||||||
totalProcs=$(( totalProcs * proc ))
|
|
||||||
done
|
|
||||||
if [ $LAUNCH_PPN -gt 0 ]; then
|
|
||||||
USE_NODES=$(( ( totalProcs + LAUNCH_PPN - 1 ) / LAUNCH_PPN ))
|
|
||||||
else
|
|
||||||
LAUNCH_PPN=1
|
|
||||||
USE_NODES=$(( MAX_NODES_PER_TASK + 1 ))
|
|
||||||
fi
|
|
||||||
NEED_CPUS=$(( totalProcs * CPUS_PER_PROC ))
|
|
||||||
NEED_CUDAS=$(( totalProcs * CUDAS_PER_PROC ))
|
|
||||||
if [ $USE_NODES -le $MAX_NODES_PER_TASK ]; then
|
|
||||||
# Launch
|
|
||||||
counter=$(( counter + 1 ))
|
|
||||||
LAUNCH_DIR=`mktemp -d`
|
|
||||||
cp -r $TASK_DIR/* $LAUNCH_DIR/
|
|
||||||
TASK_SPEC=$( echo -n "$TASK_SPEC" ; echo " LAUNCH_DIR=\"$LAUNCH_DIR\"" )
|
|
||||||
if [ $HAS_RES_MANAGER -eq 0 ]; then
|
|
||||||
LAUNCH_NAME="$LAUNCH_DIR/$TASK_EXE"
|
|
||||||
else
|
|
||||||
LAUNCH_NAME="$LAUNCH_DIR/$TASK_EXE.$totalProcs.1"
|
|
||||||
fi
|
|
||||||
TASK_SPEC=$( echo -n "$TASK_SPEC" ; echo " LAUNCH_NAME=\"$LAUNCH_NAME\"" )
|
|
||||||
while true; do
|
|
||||||
if [ -f "$SAVE_DIR/dvm-tester.pause" ] && [ "$(cat "$SAVE_DIR/dvm-tester.pause")" = "Immediate" ]; then
|
|
||||||
:
|
|
||||||
elif [ -f "$MY_DIR/dvm-tester.pause" ] && [ "$(cat "$MY_DIR/dvm-tester.pause")" = "Immediate" ]; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 60
|
|
||||||
done
|
|
||||||
if [ $HAS_RES_MANAGER -ne 0 ]; then
|
|
||||||
while [ `can_launch` -eq 0 ]; do
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
else
|
|
||||||
if [ $SHARE_RESOURCES -eq 0 ]; then
|
|
||||||
NEED_CPUS=$(( CPUS_PER_NODE * MAX_CPU_SHARING_FACTOR ))
|
|
||||||
NEED_CUDAS=$(( CUDAS_PER_NODE * MAX_CUDA_SHARING_FACTOR ))
|
|
||||||
fi
|
|
||||||
cd "$RES_MAN_DIR"
|
|
||||||
while [ $FREE_CPUS -lt $NEED_CPUS -o $FREE_CUDAS -lt $NEED_CUDAS ]; do
|
|
||||||
FOUND_SMTH=0
|
|
||||||
for f in `ls`; do
|
|
||||||
FREED_CPUS=
|
|
||||||
FREED_CUDAS=
|
|
||||||
. ./$f
|
|
||||||
if [ -n "$FREED_CPUS" -a -n "$FREED_CUDAS" ]; then
|
|
||||||
FOUND_SMTH=1
|
|
||||||
FREE_CPUS=$(( FREE_CPUS + FREED_CPUS ))
|
|
||||||
FREE_CUDAS=$(( FREE_CUDAS + FREED_CUDAS ))
|
|
||||||
rm $f
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ $FOUND_SMTH -eq 0 ]; then
|
|
||||||
sleep 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
FREE_CPUS=$(( FREE_CPUS - NEED_CPUS ))
|
|
||||||
FREE_CUDAS=$(( FREE_CUDAS - NEED_CUDAS ))
|
|
||||||
fi
|
|
||||||
# Actually launch
|
|
||||||
if [ $INTERACTIVE -ne 0 ]; then
|
|
||||||
interactive_launcher &
|
|
||||||
else
|
|
||||||
non_interactive_launcher &
|
|
||||||
if [ $HAS_RES_MANAGER -ne 0 ]; then
|
|
||||||
while [ ! -f "$LAUNCH_DIR/$TASK_EXE.committed" ]; do
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
LAUNCHED_FLAG=1
|
|
||||||
else
|
|
||||||
# Can not launch such big task
|
|
||||||
echo "Discarding too big task: $TASK_SPEC"
|
|
||||||
fi
|
|
||||||
elif [ $TASK_TYPE -eq 0 ]; then
|
|
||||||
LAUNCHED_FLAG=1
|
|
||||||
else
|
|
||||||
echo "Discarding task: $TASK_SPEC"
|
|
||||||
fi
|
|
||||||
if [ $LAUNCHED_FLAG -ne 0 ]; then
|
|
||||||
echo "$TASK_SPEC" >& 4
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
echo ":" >& 4
|
|
||||||
exec 4>&-
|
|
||||||
echo "Total tasks launched: $counter"
|
|
||||||
}
|
|
||||||
|
|
||||||
print_result_line() {
|
|
||||||
echo -n "PLATFORM=\"$TEST_PLATFORM\""
|
|
||||||
echo -n " NOH_FLAG=$TASK_NOH_FLAG"
|
|
||||||
echo -n " AUTOTFM_FLAG=$TASK_AUTOTFM_FLAG"
|
|
||||||
echo -n " PROC_GRID=\"$PROC_GRID\""
|
|
||||||
echo -n " CPUS_PER_PROC=$CPUS_PER_PROC"
|
|
||||||
echo -n " CUDAS_PER_PROC=$CUDAS_PER_PROC"
|
|
||||||
echo -n " CALC_TIME=$TASK_CALC_TIME"
|
|
||||||
echo -n " TEST_PASSED=$TEST_PASSED"
|
|
||||||
echo -n " RESULT_COMMENT=\"$RESULT_COMMENT\""
|
|
||||||
echo " ERROR_LEVEL=$ERROR_LEVEL"
|
|
||||||
}
|
|
||||||
|
|
||||||
analyzer() {
|
|
||||||
counter=0
|
|
||||||
FIFO_NAME="$1"
|
|
||||||
while IFS= read -r TASK_SPEC; do
|
|
||||||
if [ "$TASK_SPEC" = ":" ]; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
CPUS_PER_PROC=0
|
|
||||||
CUDAS_PER_PROC=0
|
|
||||||
TASK_NOH_FLAG=0
|
|
||||||
TASK_AUTOTFM_FLAG=0
|
|
||||||
eval $TASK_SPEC
|
|
||||||
if [ $TASK_TYPE -eq 0 ]; then
|
|
||||||
if [ ! -f "$TASK_DIR/$TASK_EXE" ]; then
|
|
||||||
# Report compilation error
|
|
||||||
if [ `basename "$TEST_SHORT_PATH"` != "$TEST_SHORT_PATH" ]; then
|
|
||||||
mkdir -p "$RESULTS_DIR/$(dirname "$TEST_SHORT_PATH")"
|
|
||||||
fi
|
|
||||||
PROC_GRID=
|
|
||||||
CPUS_PER_PROC=
|
|
||||||
CUDAS_PER_PROC=
|
|
||||||
TASK_CALC_TIME=
|
|
||||||
TEST_PASSED=0
|
|
||||||
RESULT_COMMENT="Compilation error"
|
|
||||||
ERROR_LEVEL=255
|
|
||||||
print_result_line >>"$RESULTS_DIR/$TEST_SHORT_PATH.result"
|
|
||||||
fi
|
|
||||||
# Cleanup all the test's stuff
|
|
||||||
rm -rf "$TASK_DIR"
|
|
||||||
else
|
|
||||||
counter=$(( counter + 1 ))
|
|
||||||
cd "$LAUNCH_DIR"
|
|
||||||
while [ ! -f "$TASK_EXE.finished" ]; do
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
read LAUNCH_EXIT_CODE TASK_CALC_TIME <"$TASK_EXE.finished"
|
|
||||||
STDOUT_FN=`stdout_fn "$LAUNCH_NAME"`
|
|
||||||
STDERR_FN=`stderr_fn "$LAUNCH_NAME"`
|
|
||||||
SUBTEST_COUNT=0
|
|
||||||
. $TEST_ANALYZER
|
|
||||||
if [ `basename "$TEST_SHORT_PATH"` != "$TEST_SHORT_PATH" ]; then
|
|
||||||
mkdir -p "$RESULTS_DIR/$(dirname "$TEST_SHORT_PATH")"
|
|
||||||
fi
|
|
||||||
print_result_line >>"$RESULTS_DIR/$TEST_SHORT_PATH.result"
|
|
||||||
if [ $SUBTEST_COUNT -gt 0 ]; then
|
|
||||||
mkdir -p $RESULTS_DIR/$TEST_SHORT_PATH
|
|
||||||
for i in `seq $SUBTEST_COUNT`; do
|
|
||||||
SUBTEST_NAME=$i
|
|
||||||
analyze_subtest $i
|
|
||||||
print_result_line >>"$RESULTS_DIR/$TEST_SHORT_PATH/$SUBTEST_NAME.result"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
# if [ $LAUNCH_EXIT_CODE -ne 0 -o "$RESULT_COMMENT" = "Crash" ]; then
|
|
||||||
# echo "Test's $TEST_SHORT_PATH stdout:"
|
|
||||||
# cat "$STDOUT_FN"
|
|
||||||
# echo "Test's $TEST_SHORT_PATH stderr:"
|
|
||||||
# cat "$STDERR_FN"
|
|
||||||
# fi
|
|
||||||
rm -rf "$LAUNCH_DIR"
|
|
||||||
fi
|
|
||||||
done <$FIFO_NAME
|
|
||||||
echo "Total tasks analyzed: $counter"
|
|
||||||
}
|
|
||||||
|
|
||||||
FIFO_NAME="$(mktemp -u).launch-fifo"
|
|
||||||
mkfifo $FIFO_NAME
|
|
||||||
|
|
||||||
analyzer $FIFO_NAME &
|
|
||||||
launcher $FIFO_NAME
|
|
||||||
|
|
||||||
wait
|
|
||||||
|
|
||||||
rm $FIFO_NAME
|
|
||||||
|
|
||||||
if [ $HAS_RES_MANAGER -eq 0 ]; then
|
|
||||||
cd "$RES_MAN_DIR"
|
|
||||||
for f in `ls`; do
|
|
||||||
. ./$f
|
|
||||||
done
|
|
||||||
cd "$SAVE_DIR"
|
|
||||||
rm -rf "$RES_MAN_DIR"
|
|
||||||
fi
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
unset CDPATH
|
|
||||||
|
|
||||||
SAVE_DIR=`pwd`
|
|
||||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
|
||||||
|
|
||||||
DVMSYS_DIR=
|
|
||||||
if [ -f ./dvm ]; then
|
|
||||||
DVMSYS_DIR_CMD="DVMSYS_DIR=$(grep 'dvmdir=' <./dvm | sed -s 's/export //g' | sed -s 's/dvmdir=//g')"
|
|
||||||
eval $DVMSYS_DIR_CMD
|
|
||||||
fi
|
|
||||||
TEST_SUITE=test-suite
|
|
||||||
RESULTS_DIR=
|
|
||||||
APPEND_RESULTS=0
|
|
||||||
|
|
||||||
parse_params() {
|
|
||||||
while [ -n "$1" ]; do
|
|
||||||
if [ "$1" = "--dvm_sys" ]; then
|
|
||||||
DVMSYS_DIR="$2"
|
|
||||||
shift
|
|
||||||
elif [ "$1" = "--test-suite" ]; then
|
|
||||||
TEST_SUITE="$2"
|
|
||||||
shift
|
|
||||||
elif [ "$1" = "--append-results" ]; then
|
|
||||||
APPEND_RESULTS=1
|
|
||||||
RESULTS_DIR="$2"
|
|
||||||
shift
|
|
||||||
else
|
|
||||||
echo "Unknown option '$1'"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
parse_params $@ || exit 1
|
|
||||||
|
|
||||||
# Check settings
|
|
||||||
cd "$SAVE_DIR"
|
|
||||||
if [ ! -d "$DVMSYS_DIR" -o ! -d "$DVMSYS_DIR/user" -o ! -f "$DVMSYS_DIR/user/dvm" -o ! -d "$TEST_SUITE" ]; then
|
|
||||||
MY_NAME=`basename "$0"`
|
|
||||||
echo "Usage: $0 [<options>]"
|
|
||||||
echo " --dvm_sys Directory of already installed DVM-system. Note that it is a directory, which contains directory 'user' directly. Usually it is .../dvm_current/dvm_sys. By default $MY_NAME searches for 'dvm' file in current directory and makes attempt to use its DVM-system"
|
|
||||||
echo " --test-suite Directory with test suite, which is formed in special way. By default 'test-suite' directory is used."
|
|
||||||
echo " --append-results Directory with partial results, which will be appended. By default new directory will be created."
|
|
||||||
echo "Exiting"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Make them global paths
|
|
||||||
DVMSYS_DIR=$(cd "$DVMSYS_DIR" && pwd)
|
|
||||||
TEST_SUITE=$(cd "$TEST_SUITE" && pwd)
|
|
||||||
|
|
||||||
if [ $APPEND_RESULTS -eq 0 ]; then
|
|
||||||
RESULTS_DIR="$SAVE_DIR/$(basename "$TEST_SUITE").results"
|
|
||||||
else
|
|
||||||
RESULTS_DIR=$(cd "$RESULTS_DIR" && pwd)
|
|
||||||
fi
|
|
||||||
export TMPDIR="$SAVE_DIR/$(basename "$TEST_SUITE").work"
|
|
||||||
if [ -d "/home/scratch" ]; then
|
|
||||||
TEMPL_NAME="/home/scratch/$(basename "$TMPDIR").XXX"
|
|
||||||
TMPDIR=$(mktemp -d "$TEMPL_NAME")
|
|
||||||
fi
|
|
||||||
mkdir -p "$TMPDIR"
|
|
||||||
|
|
||||||
# Launch task processor
|
|
||||||
TASK_FIFO="$(mktemp -u).task-fifo"
|
|
||||||
mkfifo "$TASK_FIFO"
|
|
||||||
if [ $APPEND_RESULTS -eq 0 ]; then
|
|
||||||
if [ -e "$RESULTS_DIR" ]; then
|
|
||||||
echo -n "$RESULTS_DIR already exists. Do you want to rewrite it (Y/n)? "
|
|
||||||
ans=n
|
|
||||||
read ans
|
|
||||||
if [ "$ans" != "y" -a "$ans" != "Y" ]; then
|
|
||||||
echo "Exiting"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
rm -rf "$RESULTS_DIR"
|
|
||||||
fi
|
|
||||||
mkdir -p "$RESULTS_DIR"
|
|
||||||
cd "$SAVE_DIR"
|
|
||||||
"$MY_DIR/task-processor.sh" "$RESULTS_DIR" <"$TASK_FIFO" &
|
|
||||||
|
|
||||||
# Sequentially feed task processor from our test-suite
|
|
||||||
exec 4>"$TASK_FIFO"
|
|
||||||
cd "$SAVE_DIR"
|
|
||||||
"$MY_DIR/perform-tests.sh" "$DVMSYS_DIR" "$TEST_SUITE" 4
|
|
||||||
exec 4>&-
|
|
||||||
|
|
||||||
# Wait for task processor to finish
|
|
||||||
wait
|
|
||||||
|
|
||||||
# Cleanup stuff
|
|
||||||
rm "$TASK_FIFO"
|
|
||||||
|
|
||||||
# Generate final report
|
|
||||||
cd "$SAVE_DIR"
|
|
||||||
"$MY_DIR/gen-report.sh" "$TEST_SUITE" "$RESULTS_DIR"
|
|
||||||
|
|
||||||
echo "Results can be seen in $RESULTS_DIR directory"
|
|
||||||
rm -rf "$TMPDIR"
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
proc_killer() {
|
|
||||||
local PROC
|
|
||||||
local TIMEOUT
|
|
||||||
local counter
|
|
||||||
PROC="$1"
|
|
||||||
TIMEOUT=$2
|
|
||||||
counter=0
|
|
||||||
while [ $counter -lt $TIMEOUT ]; do
|
|
||||||
sleep 10
|
|
||||||
counter=$(( counter + 10 ))
|
|
||||||
done
|
|
||||||
kill -2 $PROC >/dev/null 2>& 1
|
|
||||||
sleep 10
|
|
||||||
kill -15 $PROC >/dev/null 2>& 1
|
|
||||||
sleep 10
|
|
||||||
kill -9 $PROC >/dev/null 2>& 1
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,538 +0,0 @@
|
|||||||
/* ACR11
|
|
||||||
|
|
||||||
TESTING OF THE ACROSS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N) IS TO HAVE DIFFERENT
|
|
||||||
FLOW-DEP-LENGTH ON BOTH SIDES */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) (((a) < (b)) ? (a) : (b))
|
|
||||||
|
|
||||||
static void acr1101();
|
|
||||||
static void acr1102();
|
|
||||||
static void acr1103();
|
|
||||||
static void acr1104();
|
|
||||||
static void acr1105();
|
|
||||||
static void acr1106();
|
|
||||||
static void acr1107();
|
|
||||||
static void acr1108();
|
|
||||||
static void acr1109();
|
|
||||||
static void acr1110();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int i;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("===START OF ACR11========================\n");
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1101();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1102();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1103();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1104();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1105();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1106();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1107();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1108();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1109();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1110();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
|
|
||||||
printf("=== END OF ACR11 =========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR1101*/
|
|
||||||
void acr1101()
|
|
||||||
{
|
|
||||||
#define N 8
|
|
||||||
#define NL 1000
|
|
||||||
char tname[] = "ACR1101 ";
|
|
||||||
int nloop;
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A;
|
|
||||||
A = (int (*))malloc(N * sizeof(int));
|
|
||||||
int *C;
|
|
||||||
C = (int (*))malloc(N * sizeof(int));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
C[i] = NNL + i;
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
C[i] = C[i - 1] + C[i + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloop)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) across(A[1:1])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
A[i] = A[i - 1] + A[i + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloop))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR1102 */
|
|
||||||
void acr1102()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define NL 1000
|
|
||||||
char tname[] = "ACR1102 ";
|
|
||||||
int nloop;
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A;
|
|
||||||
A = (int (*))malloc(N * sizeof(int));
|
|
||||||
int *C;
|
|
||||||
C = (int (*))malloc(N * sizeof(int));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
C[i] = NNL + i;
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
C[i] = C[i] + C[i + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloop)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) across(A[0:1])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
A[i] = A[i] + A[i + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloop))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR1103 */
|
|
||||||
void acr1103()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define NL 1000
|
|
||||||
char tname[] = "ACR1103 ";
|
|
||||||
int nloop;
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A;
|
|
||||||
A = (int (*))malloc(N * sizeof(int));
|
|
||||||
int *C;
|
|
||||||
C = (int (*))malloc(N * sizeof(int));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
C[i] = NNL + i;
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
C[i] = C[i - 1] + C[i];
|
|
||||||
#pragma dvm actual(nloop)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) across(A[1:0])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
A[i] = A[i - 1] + A[i];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloop))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR1104 */
|
|
||||||
void acr1104()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define NL 1000
|
|
||||||
char tname[] = "ACR1104 ";
|
|
||||||
int nloop;
|
|
||||||
#pragma dvm array distribute[block], shadow[2:2]
|
|
||||||
int *A;
|
|
||||||
A = (int (*))malloc(N * sizeof(int));
|
|
||||||
int *C;
|
|
||||||
C = (int (*))malloc(N * sizeof(int));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
C[i] = NNL + i;
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
C[i] = C[i - 1] + C[i + 1] + C[i + 2] + C[i - 2];
|
|
||||||
#pragma dvm actual(nloop)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) across(A[2:2])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i] = A[i - 1] + A[i + 1] + A[i + 2] + A[i - 2];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloop))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR1105 */
|
|
||||||
void acr1105()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define NL 1000
|
|
||||||
char tname[] = "ACR1105 ";
|
|
||||||
int nloop;
|
|
||||||
#pragma dvm array distribute[block], shadow[2:2]
|
|
||||||
int *A;
|
|
||||||
A = (int (*))malloc(N * sizeof(int));
|
|
||||||
int *C;
|
|
||||||
C = (int (*))malloc(N * sizeof(int));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
C[i] = NNL + i;
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 2; i++)
|
|
||||||
C[i] = C[i + 1] + C[i + 2];
|
|
||||||
#pragma dvm actual(nloop)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) across(A[0:2])
|
|
||||||
for (i = 1; i < N - 2; i++)
|
|
||||||
A[i] = A[i + 1] + A[i + 2];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloop))
|
|
||||||
for (i = 1; i < N - 2; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR1106 */
|
|
||||||
void acr1106()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define NL 1000
|
|
||||||
char tname[] = "ACR1106 ";
|
|
||||||
int nloop;
|
|
||||||
#pragma dvm array distribute[block], shadow[2:2]
|
|
||||||
int *A;
|
|
||||||
A = (int (*))malloc(N * sizeof(int));
|
|
||||||
int *C;
|
|
||||||
C = (int (*))malloc(N * sizeof(int));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
C[i] = NNL + i;
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N; i++)
|
|
||||||
C[i] = C[i - 1] + C[i - 2];
|
|
||||||
#pragma dvm actual(nloop)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) across(A[2:0])
|
|
||||||
for (i = 2; i < N; i++)
|
|
||||||
A[i] = A[i - 1] + A[i - 2];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloop))
|
|
||||||
for (i = 2; i < N; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR1107 */
|
|
||||||
void acr1107()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define NL 1000
|
|
||||||
char tname[] = "ACR1107 ";
|
|
||||||
int nloop;
|
|
||||||
#pragma dvm array distribute[block], shadow[3:3]
|
|
||||||
int *A;
|
|
||||||
A = (int (*))malloc(N * sizeof(int));
|
|
||||||
int *C;
|
|
||||||
C = (int (*))malloc(N * sizeof(int));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
C[i] = NNL + i;
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
C[i] = C[i - 1] + C[i + 1] + C[i + 2] + C[i - 2] + C[i - 3] + C[i + 3];
|
|
||||||
#pragma dvm actual(nloop)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) across(A[3:3])
|
|
||||||
for (i = 3; i < N - 3; i ++)
|
|
||||||
A[i] = A[i - 1] + A[i + 1] + A[i + 2] + A[i - 2] + A[i - 3] + A[i + 3];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloop))
|
|
||||||
for (i = 3; i < N - 3; i ++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR1108 */
|
|
||||||
void acr1108()
|
|
||||||
{
|
|
||||||
#define N 24
|
|
||||||
#define NL 1000
|
|
||||||
char tname[] = "ACR1108 ";
|
|
||||||
int nloop;
|
|
||||||
#pragma dvm array distribute[block], shadow[3:3]
|
|
||||||
int *A;
|
|
||||||
A = (int (*))malloc(N * sizeof(int));
|
|
||||||
int *C;
|
|
||||||
C = (int (*))malloc(N * sizeof(int));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
C[i] = NNL + i;
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 3; i++)
|
|
||||||
C[i] = C[i + 1] + C[i + 2] + C[i + 3];
|
|
||||||
#pragma dvm actual(nloop)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) across(A[0:3])
|
|
||||||
for (i = 1; i < N - 3; i ++)
|
|
||||||
A[i] = A[i + 1] + A[i + 2] + A[i + 3];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloop))
|
|
||||||
for (i = 1; i < N - 3; i ++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR1109 */
|
|
||||||
void acr1109()
|
|
||||||
{
|
|
||||||
#define N 24
|
|
||||||
#define NL 1000
|
|
||||||
char tname[] = "ACR1109 ";
|
|
||||||
int nloop;
|
|
||||||
#pragma dvm array distribute[block], shadow[3:3]
|
|
||||||
int *A;
|
|
||||||
A = (int (*))malloc(N * sizeof(int));
|
|
||||||
int *C;
|
|
||||||
C = (int (*))malloc(N * sizeof(int));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
C[i] = NNL + i;
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N; i++)
|
|
||||||
C[i] = C[i - 1] + C[i - 2] + C[i - 3];
|
|
||||||
#pragma dvm actual(nloop)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) across(A[3:0])
|
|
||||||
for (i = 3; i < N; i ++)
|
|
||||||
A[i] = A[i - 1] + A[i - 2] + A[i - 3];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloop))
|
|
||||||
for (i = 3; i < N; i ++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR1110 */
|
|
||||||
void acr1110()
|
|
||||||
{
|
|
||||||
#define N 60
|
|
||||||
#define NL 1000
|
|
||||||
char tname[] = "ACR1110 ";
|
|
||||||
int nloop;
|
|
||||||
#pragma dvm array distribute[block], shadow[11:11]
|
|
||||||
int *A;
|
|
||||||
A = (int (*))malloc(N * sizeof(int));
|
|
||||||
int *C;
|
|
||||||
C = (int (*))malloc(N * sizeof(int));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
C[i] = NNL + i;
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
C[i] = C[i - 9] + C[i + 9] + C[i + 10] + C[i - 10] + C[i - 11] + C[i + 11];
|
|
||||||
#pragma dvm actual(nloop)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) across(A[11:11])
|
|
||||||
for (i = 11; i < N - 11; i ++)
|
|
||||||
A[i] = A[i - 9] + A[i + 9] + A[i + 10] + A[i - 10] + A[i - 11] + A[i + 11];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloop))
|
|
||||||
for (i = 11; i < N - 11; i ++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
/* ----------------------------------------------- */
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,939 +0,0 @@
|
|||||||
/* ACR12
|
|
||||||
|
|
||||||
TESTING OF THE ACROSS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N, M) IS TO HAVE 1 DISTRIBUTED DIMENSION AND DIFFERENT
|
|
||||||
FLOW-DEP-LENGTH ON BOTH SIDES */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) (((a) < (b)) ? (a) : (b))
|
|
||||||
|
|
||||||
static void acr1201();
|
|
||||||
static void acr1202();
|
|
||||||
static void acr1203();
|
|
||||||
static void acr1204();
|
|
||||||
static void acr1205();
|
|
||||||
static void acr1206();
|
|
||||||
static void acr1207();
|
|
||||||
static void acr1208();
|
|
||||||
static void acr1209();
|
|
||||||
static void acr1210();
|
|
||||||
static void acr1211();
|
|
||||||
static void acr1212();
|
|
||||||
static void acr1213();
|
|
||||||
static void acr1214();
|
|
||||||
static void acr1215();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int i, j;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("===START OF ACR12========================\n");
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1201();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1202();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1203();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1204();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1205();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1206();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1207();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1208();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1209();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1210();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1211();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1212();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1213();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1214();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr1215();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
|
|
||||||
printf("=== END OF ACR12 =========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1201*/
|
|
||||||
void acr1201()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1201 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int (*A)[M];
|
|
||||||
A = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
C[i][j] = C[i + 1][j] + C[i][j + 1] + C[i - 1][j] + C[i][j - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj, C)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[1:1][1:1])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
A[i][j] = A[i + 1][j] + A[i][j + 1] + A[i - 1][j] + A[i][j - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1202*/
|
|
||||||
void acr1202()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1202 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
C[i][j] = C[i + 1][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:1][0:0])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
A[i][j] = A[i + 1][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1203*/
|
|
||||||
void acr1203()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1203 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
C[i][j] = C[i - 1][j] + C[i][j + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj, C)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[1:0][0:1])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
A[i][j] = A[i - 1][j] + A[i][j + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1204*/
|
|
||||||
void acr1204()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1204 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][*], shadow[1:1][0:1]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
C[i][j] = C[i + 1][j] + C[i][j + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj, C)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:1][0:1])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
A[i][j] = A[i + 1][j] + A[i][j + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi, nloopj)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1205*/
|
|
||||||
void acr1205()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1205 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[*][block], shadow[0:1][1:1]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
C[i][j] = C[i][j - 1] + C[i + 1][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:1][1:0])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
A[i][j] = A[i][j - 1] + A[i + 1][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1206*/
|
|
||||||
void acr1206()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1206 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][*], shadow[2:2][2:2]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i + 2][j] + C[i][j + 2] + C[i + 2][j] + C[i - 2][j] + C[i][j - 2];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[2:2][2:2])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i + 2][j] + A[i][j + 2] + A[i + 2][j] + A[i - 2][j] + A[i][j - 2];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1207*/
|
|
||||||
void acr1207()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1207 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[*][block], shadow[2:2][2:2]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i + 2][j] + C[i][j + 2] + C[i][j - 2];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:2][2:2])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i + 2][j] + A[i][j + 2] + A[i][j - 2];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1208*/
|
|
||||||
void acr1208()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1208 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][*], shadow[2:2][2:2]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i - 1][j] + C[i][j - 1] + C[i - 2][j] + C[i + 2][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[2:2][2:0])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i - 1][j] + A[i][j - 1] + A[i - 2][j] + A[i + 2][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1209*/
|
|
||||||
void acr1209()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1209 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[*][block], shadow[2:2][0:2]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i][j + 2] + C[i + 1][j] + C[i + 2][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[2:2][0:2])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i][j + 2] + A[i + 1][j] + A[i + 2][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1210*/
|
|
||||||
void acr1210()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1210 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][*], shadow[3:3][3:3]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
C[i][j] = C[i + 1][j] + C[i][j + 2] + C[i + 3][j] + C[i][j -3 ] + C[i - 2][j] + C[i][j - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[3:3][3:3])
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
A[i][j] = A[i + 1][j] + A[i][j + 2] + A[i + 3][j] + A[i][j - 3] + A[i - 2][j] + A[i][j - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1211*/
|
|
||||||
void acr1211()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1211 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[*][block], shadow[3:3][0:3]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i][j] + C[i][j + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:0][0:1])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i][j] + A[i][j + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1212*/
|
|
||||||
void acr1212()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1212 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][*], shadow[0:3][3:3]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i][j] + C[i + 1][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:1][0:0])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i][j] + A[i + 1][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1213*/
|
|
||||||
void acr1213()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1213 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[*][block], shadow[3:3][3:0]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
C[i][j] = C[i][j - 3] + C[i + 3][j] + C[i - 3][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[3:3][3:0])
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
A[i][j] = A[i][j - 3] + A[i + 3][j] + A[i - 3][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1214*/
|
|
||||||
void acr1214()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "acr1214 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][*], shadow[3:0][3:3]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
C[i][j] = C[i - 3][j] + C[i][j + 3];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[3:0][3:3])
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
A[i][j] = A[i - 3][j] + A[i][j + 3];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------acr1215*/
|
|
||||||
void acr1215()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 59
|
|
||||||
#define M 59
|
|
||||||
char tname[] = "acr1215 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[*][block], shadow[11:11][11:11]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
C[i][j] = C[i + 11][j] + C[i][j + 10] + C[i + 9][j] + C[i][j - 11] + C[i - 10][j] + C[i][j - 9];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[10:11][11:10])
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
A[i][j] = A[i + 11][j] + A[i][j + 10] + A[i + 9][j] + A[i][j - 11] + A[i - 10][j] + A[i][j - 9];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ----------------------------------------------- */
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,939 +0,0 @@
|
|||||||
/* ACR22
|
|
||||||
|
|
||||||
TESTING OF THE ACROSS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M) IS TO HAVE DIFFERENT
|
|
||||||
FLOW-DEP-LENGTH ON BOTH SIDES */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) (((a) < (b)) ? (a) : (b))
|
|
||||||
|
|
||||||
static void acr2201();
|
|
||||||
static void acr2202();
|
|
||||||
static void acr2203();
|
|
||||||
static void acr2204();
|
|
||||||
static void acr2205();
|
|
||||||
static void acr2206();
|
|
||||||
static void acr2207();
|
|
||||||
static void acr2208();
|
|
||||||
static void acr2209();
|
|
||||||
static void acr2210();
|
|
||||||
static void acr2211();
|
|
||||||
static void acr2212();
|
|
||||||
static void acr2213();
|
|
||||||
static void acr2214();
|
|
||||||
static void acr2215();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int i, j;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("===START OF ACR22========================\n");
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2201();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2202();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2203();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2204();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2205();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2206();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2207();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2208();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2209();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2210();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2211();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2212();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2213();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2214();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2215();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
|
|
||||||
printf("=== END OF ACR22 =========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2201*/
|
|
||||||
void acr2201()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2201 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int (*A)[M];
|
|
||||||
A = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
C[i][j] = C[i + 1][j] + C[i][j + 1] + C[i - 1][j] + C[i][j - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj, C)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[1:1][1:1])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
A[i][j] = A[i + 1][j] + A[i][j + 1] + A[i - 1][j] + A[i][j - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2202*/
|
|
||||||
void acr2202()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2202 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
C[i][j] = C[i + 1][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:1][0:0])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
A[i][j] = A[i + 1][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2203*/
|
|
||||||
void acr2203()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2203 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
C[i][j] = C[i - 1][j] + C[i][j + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj, C)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[1:0][0:1])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
A[i][j] = A[i - 1][j] + A[i][j + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2204*/
|
|
||||||
void acr2204()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2204 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[1:1][0:1]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
C[i][j] = C[i + 1][j] + C[i][j + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj, C)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:1][0:1])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
A[i][j] = A[i + 1][j] + A[i][j + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi, nloopj)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2205*/
|
|
||||||
void acr2205()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2205 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[0:1][1:1]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
C[i][j] = C[i][j - 1] + C[i + 1][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:1][1:0])
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
A[i][j] = A[i][j - 1] + A[i + 1][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2206*/
|
|
||||||
void acr2206()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2206 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[2:2][2:2]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i + 2][j] + C[i][j + 2] + C[i + 2][j] + C[i - 2][j] + C[i][j - 2];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[2:2][2:2])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i + 2][j] + A[i][j + 2] + A[i + 2][j] + A[i - 2][j] + A[i][j - 2];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2207*/
|
|
||||||
void acr2207()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2207 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[2:2][2:2]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i + 2][j] + C[i][j + 2] + C[i][j - 2];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:2][2:2])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i + 2][j] + A[i][j + 2] + A[i][j - 2];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2208*/
|
|
||||||
void acr2208()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2208 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[2:2][2:2]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i - 1][j] + C[i][j - 1] + C[i - 2][j] + C[i + 2][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[2:2][2:0])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i - 1][j] + A[i][j - 1] + A[i - 2][j] + A[i + 2][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2209*/
|
|
||||||
void acr2209()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2209 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[2:2][0:2]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i][j + 2] + C[i + 1][j] + C[i + 2][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[2:2][0:2])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i][j + 2] + A[i + 1][j] + A[i + 2][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2210*/
|
|
||||||
void acr2210()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2210 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[3:3][3:3]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
C[i][j] = C[i + 1][j] + C[i][j + 2] + C[i + 3][j] + C[i][j -3 ] + C[i - 2][j] + C[i][j - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[3:3][3:3])
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
A[i][j] = A[i + 1][j] + A[i][j + 2] + A[i + 3][j] + A[i][j - 3] + A[i - 2][j] + A[i][j - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2211*/
|
|
||||||
void acr2211()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2211 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[3:3][0:3]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i][j] + C[i][j + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:0][0:1])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i][j] + A[i][j + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2212*/
|
|
||||||
void acr2212()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2212 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[0:3][3:3]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
C[i][j] = C[i][j] + C[i + 1][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[0:1][0:0])
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
A[i][j] = A[i][j] + A[i + 1][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2213*/
|
|
||||||
void acr2213()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2213 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[3:3][3:0]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
C[i][j] = C[i][j - 3] + C[i + 3][j] + C[i - 3][j];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[3:3][3:0])
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
A[i][j] = A[i][j - 3] + A[i + 3][j] + A[i - 3][j];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2214*/
|
|
||||||
void acr2214()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
char tname[] = "ACR2214 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[3:0][3:3]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
C[i][j] = C[i - 3][j] + C[i][j + 3];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[3:0][3:3])
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
A[i][j] = A[i - 3][j] + A[i][j + 3];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2215*/
|
|
||||||
void acr2215()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 59
|
|
||||||
#define M 59
|
|
||||||
char tname[] = "ACR2215 ";
|
|
||||||
int nloopi, nloopj;
|
|
||||||
#pragma dvm array distribute[block][block], shadow[11:11][11:11]
|
|
||||||
int A[N][M];
|
|
||||||
int (*C)[M];
|
|
||||||
C = (int (*)[M])malloc(N * sizeof(int[M]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
C[i][j] = NNL + i + j;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
C[i][j] = C[i + 11][j] + C[i][j + 10] + C[i + 9][j] + C[i][j - 11] + C[i - 10][j] + C[i][j - 9];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) across(A[10:11][11:10])
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
A[i][j] = A[i + 11][j] + A[i][j + 10] + A[i + 9][j] + A[i][j - 11] + A[i - 10][j] + A[i][j - 9];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
/* ----------------------------------------------- */
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,675 +0,0 @@
|
|||||||
/* ACR23
|
|
||||||
|
|
||||||
TESTING OF THE ACROSS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M,K) IS TO HAVE DIFFERENT
|
|
||||||
FLOW-DEP-LENGTH ON BOTH SIDES */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) (((a) < (b)) ? (a) : (b))
|
|
||||||
|
|
||||||
static void acr2301();
|
|
||||||
static void acr2302();
|
|
||||||
static void acr2303();
|
|
||||||
static void acr2304();
|
|
||||||
static void acr2305();
|
|
||||||
static void acr2306();
|
|
||||||
static void acr2307();
|
|
||||||
static void acr2308();
|
|
||||||
static void acr2309();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int i, j, ii;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("===START OF ACR23========================\n");
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2301();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2302();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2303();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2304();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2305();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2306();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2307();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2308();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr2309();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
|
|
||||||
printf("=== END OF ACR23 =========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2301*/
|
|
||||||
void acr2301()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 8
|
|
||||||
#define K 8
|
|
||||||
char tname[] = "ACR2301 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[*][block][block]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
C[i][j][ii] = C[i + 1][j][ii] + C[i][j + 1][ii] + C[i][j][ii + 1] + C[i - 1][j][ii] + C[i][j - 1][ii] + C[i][j][ii - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj, C)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[1:1][1:1][1:1])
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
A[i][j][ii] = A[i + 1][j][ii] + A[i][j + 1][ii] + A[i][j][ii + 1] + A[i - 1][j][ii] + A[i][j - 1][ii] + A[i][j][ii - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2302*/
|
|
||||||
void acr2302()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
char tname[] = "ACR2302 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][*][block], shadow[2:2][2:2][2:2]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
C[i][j][ii] = C[i + 2][j][ii] + C[i][j - 2][ii] + C[i][j][ii - 1] + C[i - 1][j][ii] + C[i + 1][j][ii] + C[i][j - 1][ii] + C[i][j + 2][ii] + C[i][j][ii + 2];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[1:2][2:2][1:2])
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii] = A[i + 2][j][ii] + A[i][j - 2][ii] + A[i][j][ii - 1] + A[i - 1][j][ii] + A[i + 1][j][ii] + A[i][j - 1][ii] + A[i][j + 2][ii] + A[i][j][ii + 2];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2303*/
|
|
||||||
void acr2303()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
char tname[] = "ACR2303 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][*], shadow[2:2][2:2][2:2]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
C[i][j][ii] = C[i + 2][j][ii] + C[i][j + 2][ii] + C[i][j][ii + 2] + C[i][j - 2][ii] + C[i][j - 1][ii] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i][j][ii + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[0:2][2:2][0:2])
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii] = A[i + 2][j][ii] + A[i][j + 2][ii] + A[i][j][ii + 2] + A[i][j - 2][ii] + A[i][j - 1][ii] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i][j][ii + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2304*/
|
|
||||||
void acr2304()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
char tname[] = "ACR2304 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[*][block][block], shadow[2:2][2:2][2:2]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
C[i][j][ii] = C[i + 2][j][ii] + C[i][j][ii - 2] + C[i - 2][j][ii] + C[i][j - 2][ii] + C[i - 1][j][ii] + C[i][j - 1][ii] + C[i][j][ii - 1] + C[i + 1][j][ii];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[2:2][2:0][2:0])
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii] = A[i + 2][j][ii] + A[i][j][ii - 2] + A[i - 2][j][ii] + A[i][j - 2][ii] + A[i - 1][j][ii] + A[i][j - 1][ii] + A[i][j][ii - 1] + A[i + 1][j][ii];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2305*/
|
|
||||||
void acr2305()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
char tname[] = "ACR2305 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][*][block], shadow[0:2][2:2][0:2]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
C[i][j][ii] = C[i + 2][j][ii] + C[i][j + 2][ii] + C[i][j][ii + 2] + C[i][j - 2][ii] + C[i][j - 1][ii] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i][j][ii + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[0:2][2:2][0:2])
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii] = A[i + 2][j][ii] + A[i][j + 2][ii] + A[i][j][ii + 2] + A[i][j - 2][ii] + A[i][j - 1][ii] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i][j][ii + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2306*/
|
|
||||||
void acr2306()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
char tname[] = "ACR2306 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][*], shadow[3:3][3:3][3:3]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
C[i][j][ii] = C[i + 3][j][ii] + C[i][j + 3][ii] + C[i][j][ii + 3] + C[i - 3][j][ii] + C[i][j - 3][ii] + C[i][j][ii - 3] + C[i + 2][j][ii] + C[i][j + 2][ii] + C[i][j][ii + 2] + C[i - 2][j][ii] + C[i][j - 2][ii] + C[i][j][ii - 2] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i][j][ii + 1] + C[i - 1][j][ii] + C[i][j - 1][ii] + C[i][j][ii - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[3:3][3:3][3:3])
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
A[i][j][ii] = A[i + 3][j][ii] + A[i][j + 3][ii] + A[i][j][ii + 3] + A[i - 3][j][ii] + A[i][j - 3][ii] + A[i][j][ii - 3] + A[i + 2][j][ii] + A[i][j + 2][ii] + A[i][j][ii + 2] + A[i - 2][j][ii] + A[i][j - 2][ii] + A[i][j][ii - 2] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i][j][ii + 1] + A[i - 1][j][ii] + A[i][j - 1][ii] + A[i][j][ii - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2307*/
|
|
||||||
void acr2307()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
char tname[] = "ACR2307 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[*][block][block], shadow[3:3][0:3][3:0]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
C[i][j][ii] = C[i + 3][j][ii] + C[i][j + 3][ii] + C[i - 3][j][ii] + C[i][j][ii - 3] + C[i + 2][j][ii] + C[i][j + 2][ii] + C[i - 2][j][ii] + C[i][j][ii - 2] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i - 1][j][ii] + C[i][j][ii - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[3:3][0:3][3:0])
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
A[i][j][ii] = A[i + 3][j][ii] + A[i][j + 3][ii] + A[i - 3][j][ii] + A[i][j][ii - 3] + A[i + 2][j][ii] + A[i][j + 2][ii] + A[i - 2][j][ii] + A[i][j][ii - 2] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i - 1][j][ii] + A[i][j][ii - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2308*/
|
|
||||||
void acr2308()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
char tname[] = "ACR2308 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][*][block], shadow[0:3][0:3][0:3]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N - 3; i++)
|
|
||||||
for (j = 0; j < M - 3; j++)
|
|
||||||
for (ii = 0; ii < K - 3; ii++)
|
|
||||||
C[i][j][ii] = C[i + 3][j][ii] + C[i][j + 3][ii] + C[i][j][ii + 3] + C[i + 2][j][ii] + C[i][j + 2][ii] + C[i][j][ii + 2] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i][j][ii + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[0:3][0:3][0:3])
|
|
||||||
for (ii = 0; ii < K - 3; ii++)
|
|
||||||
for (j = 0; j < M - 3; j++)
|
|
||||||
for (i = 0; i < N - 3; i++)
|
|
||||||
A[i][j][ii] = A[i + 3][j][ii] + A[i][j + 3][ii] + A[i][j][ii + 3] + A[i + 2][j][ii] + A[i][j + 2][ii] + A[i][j][ii + 2] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i][j][ii + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 0; ii < K - 3; ii++)
|
|
||||||
for (j = 0; j < M - 3; j++)
|
|
||||||
for (i = 0; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR2309*/
|
|
||||||
void acr2309()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 59
|
|
||||||
#define M 59
|
|
||||||
#define K 59
|
|
||||||
char tname[] = "ACR2309 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][*], shadow[11:11][11:11][11:11]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
C[i][j][ii] = C[i + 11][j][ii] + C[i][j + 11][ii] + C[i][j][ii + 11] + C[i - 11][j][ii] + C[i][j - 11][ii] + C[i][j][ii - 11] + C[i + 10][j][ii] + C[i][j + 10][ii] + C[i][j][ii + 10] + C[i - 10][j][ii] + C[i][j - 10][ii] + C[i][j][ii - 10] + C[i - 9][j][ii] + C[i][j - 9][ii] + C[i][j][ii - 9] + C[i + 9][j][ii] + C[i][j + 9][ii] + C[i][j][ii + 9];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[11:11][11:11][11:11])
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
A[i][j][ii] = A[i + 11][j][ii] + A[i][j + 11][ii] + A[i][j][ii + 11] + A[i - 11][j][ii] + A[i][j - 11][ii] + A[i][j][ii - 11] + A[i + 10][j][ii] + A[i][j + 10][ii] + A[i][j][ii + 10] + A[i - 10][j][ii] + A[i][j - 10][ii] + A[i][j][ii - 10] + A[i - 9][j][ii] + A[i][j - 9][ii] + A[i][j][ii - 9] + A[i + 9][j][ii] + A[i][j + 9][ii] + A[i][j][ii + 9];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ----------------------------------------------- */
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,675 +0,0 @@
|
|||||||
/* ACR33
|
|
||||||
|
|
||||||
TESTING OF THE ACROSS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M,K) IS TO HAVE DIFFERENT
|
|
||||||
FLOW-DEP-LENGTH ON BOTH SIDES */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) (((a) < (b)) ? (a) : (b))
|
|
||||||
|
|
||||||
static void acr3301();
|
|
||||||
static void acr3302();
|
|
||||||
static void acr3303();
|
|
||||||
static void acr3304();
|
|
||||||
static void acr3305();
|
|
||||||
static void acr3306();
|
|
||||||
static void acr3307();
|
|
||||||
static void acr3308();
|
|
||||||
static void acr3309();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int i, j, ii;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("===START OF ACR33========================\n");
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3301();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3302();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3303();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3304();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3305();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3306();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3307();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3308();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3309();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
|
|
||||||
printf("=== END OF ACR33 =========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3301*/
|
|
||||||
void acr3301()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 8
|
|
||||||
#define K 8
|
|
||||||
char tname[] = "ACR3301 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
C[i][j][ii] = C[i + 1][j][ii] + C[i][j + 1][ii] + C[i][j][ii + 1] + C[i - 1][j][ii] + C[i][j - 1][ii] + C[i][j][ii - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj, C)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[1:1][1:1][1:1])
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
A[i][j][ii] = A[i + 1][j][ii] + A[i][j + 1][ii] + A[i][j][ii + 1] + A[i - 1][j][ii] + A[i][j - 1][ii] + A[i][j][ii - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3302*/
|
|
||||||
void acr3302()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
char tname[] = "ACR3302 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][block], shadow[2:2][2:2][2:2]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
C[i][j][ii] = C[i + 2][j][ii] + C[i][j - 2][ii] + C[i][j][ii - 1] + C[i - 1][j][ii] + C[i + 1][j][ii] + C[i][j - 1][ii] + C[i][j + 2][ii] + C[i][j][ii + 2];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[1:2][2:2][1:2])
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii] = A[i + 2][j][ii] + A[i][j - 2][ii] + A[i][j][ii - 1] + A[i - 1][j][ii] + A[i + 1][j][ii] + A[i][j - 1][ii] + A[i][j + 2][ii] + A[i][j][ii + 2];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3303*/
|
|
||||||
void acr3303()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
char tname[] = "ACR3303 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][block], shadow[2:2][2:2][2:2]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
C[i][j][ii] = C[i + 2][j][ii] + C[i][j + 2][ii] + C[i][j][ii + 2] + C[i][j - 2][ii] + C[i][j - 1][ii] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i][j][ii + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[0:2][2:2][0:2])
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii] = A[i + 2][j][ii] + A[i][j + 2][ii] + A[i][j][ii + 2] + A[i][j - 2][ii] + A[i][j - 1][ii] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i][j][ii + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3304*/
|
|
||||||
void acr3304()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
char tname[] = "ACR3304 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][block], shadow[2:2][2:2][2:2]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
C[i][j][ii] = C[i + 2][j][ii] + C[i][j][ii - 2] + C[i - 2][j][ii] + C[i][j - 2][ii] + C[i - 1][j][ii] + C[i][j - 1][ii] + C[i][j][ii - 1] + C[i + 1][j][ii];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[2:2][2:0][2:0])
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii] = A[i + 2][j][ii] + A[i][j][ii - 2] + A[i - 2][j][ii] + A[i][j - 2][ii] + A[i - 1][j][ii] + A[i][j - 1][ii] + A[i][j][ii - 1] + A[i + 1][j][ii];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3305*/
|
|
||||||
void acr3305()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
char tname[] = "ACR3305 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][block], shadow[0:2][2:2][0:2]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
C[i][j][ii] = C[i + 2][j][ii] + C[i][j + 2][ii] + C[i][j][ii + 2] + C[i][j - 2][ii] + C[i][j - 1][ii] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i][j][ii + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[0:2][2:2][0:2])
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii] = A[i + 2][j][ii] + A[i][j + 2][ii] + A[i][j][ii + 2] + A[i][j - 2][ii] + A[i][j - 1][ii] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i][j][ii + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3306*/
|
|
||||||
void acr3306()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
char tname[] = "ACR3306 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][block], shadow[3:3][3:3][3:3]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
C[i][j][ii] = C[i + 3][j][ii] + C[i][j + 3][ii] + C[i][j][ii + 3] + C[i - 3][j][ii] + C[i][j - 3][ii] + C[i][j][ii - 3] + C[i + 2][j][ii] + C[i][j + 2][ii] + C[i][j][ii + 2] + C[i - 2][j][ii] + C[i][j - 2][ii] + C[i][j][ii - 2] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i][j][ii + 1] + C[i - 1][j][ii] + C[i][j - 1][ii] + C[i][j][ii - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[3:3][3:3][3:3])
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
A[i][j][ii] = A[i + 3][j][ii] + A[i][j + 3][ii] + A[i][j][ii + 3] + A[i - 3][j][ii] + A[i][j - 3][ii] + A[i][j][ii - 3] + A[i + 2][j][ii] + A[i][j + 2][ii] + A[i][j][ii + 2] + A[i - 2][j][ii] + A[i][j - 2][ii] + A[i][j][ii - 2] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i][j][ii + 1] + A[i - 1][j][ii] + A[i][j - 1][ii] + A[i][j][ii - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3307*/
|
|
||||||
void acr3307()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
char tname[] = "ACR3307 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][block], shadow[3:3][0:3][3:0]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
C[i][j][ii] = C[i + 3][j][ii] + C[i][j + 3][ii] + C[i - 3][j][ii] + C[i][j][ii - 3] + C[i + 2][j][ii] + C[i][j + 2][ii] + C[i - 2][j][ii] + C[i][j][ii - 2] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i - 1][j][ii] + C[i][j][ii - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[3:3][0:3][3:0])
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
A[i][j][ii] = A[i + 3][j][ii] + A[i][j + 3][ii] + A[i - 3][j][ii] + A[i][j][ii - 3] + A[i + 2][j][ii] + A[i][j + 2][ii] + A[i - 2][j][ii] + A[i][j][ii - 2] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i - 1][j][ii] + A[i][j][ii - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3308*/
|
|
||||||
void acr3308()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
char tname[] = "ACR3308 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][block], shadow[0:3][0:3][0:3]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N - 3; i++)
|
|
||||||
for (j = 0; j < M - 3; j++)
|
|
||||||
for (ii = 0; ii < K - 3; ii++)
|
|
||||||
C[i][j][ii] = C[i + 3][j][ii] + C[i][j + 3][ii] + C[i][j][ii + 3] + C[i + 2][j][ii] + C[i][j + 2][ii] + C[i][j][ii + 2] + C[i + 1][j][ii] + C[i][j + 1][ii] + C[i][j][ii + 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[0:3][0:3][0:3])
|
|
||||||
for (ii = 0; ii < K - 3; ii++)
|
|
||||||
for (j = 0; j < M - 3; j++)
|
|
||||||
for (i = 0; i < N - 3; i++)
|
|
||||||
A[i][j][ii] = A[i + 3][j][ii] + A[i][j + 3][ii] + A[i][j][ii + 3] + A[i + 2][j][ii] + A[i][j + 2][ii] + A[i][j][ii + 2] + A[i + 1][j][ii] + A[i][j + 1][ii] + A[i][j][ii + 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 0; ii < K - 3; ii++)
|
|
||||||
for (j = 0; j < M - 3; j++)
|
|
||||||
for (i = 0; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3309*/
|
|
||||||
void acr3309()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 59
|
|
||||||
#define M 59
|
|
||||||
#define K 59
|
|
||||||
char tname[] = "ACR3309 ";
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
#pragma dvm array distribute[block][block][block], shadow[11:11][11:11][11:11]
|
|
||||||
int (*A)[M][K];
|
|
||||||
A = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int (*C)[M][K];
|
|
||||||
C = (int (*)[M][K])malloc(N * sizeof(int[M][K]));
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
C[i][j][ii] = NNL + i + j + ii;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
C[i][j][ii] = C[i + 11][j][ii] + C[i][j + 11][ii] + C[i][j][ii + 11] + C[i - 11][j][ii] + C[i][j - 11][ii] + C[i][j][ii - 11] + C[i + 10][j][ii] + C[i][j + 10][ii] + C[i][j][ii + 10] + C[i - 10][j][ii] + C[i][j - 10][ii] + C[i][j][ii - 10] + C[i - 9][j][ii] + C[i][j - 9][ii] + C[i][j][ii - 9] + C[i + 9][j][ii] + C[i][j + 9][ii] + C[i][j][ii + 9];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii])
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) across(A[11:11][11:11][11:11])
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
A[i][j][ii] = A[i + 11][j][ii] + A[i][j + 11][ii] + A[i][j][ii + 11] + A[i - 11][j][ii] + A[i][j - 11][ii] + A[i][j][ii - 11] + A[i + 10][j][ii] + A[i][j + 10][ii] + A[i][j][ii + 10] + A[i - 10][j][ii] + A[i][j - 10][ii] + A[i][j][ii - 10] + A[i - 9][j][ii] + A[i][j - 9][ii] + A[i][j][ii - 9] + A[i + 9][j][ii] + A[i][j + 9][ii] + A[i][j][ii + 9];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([ii][j][i] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
}
|
|
||||||
/* ----------------------------------------------- */
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,723 +0,0 @@
|
|||||||
/* ACR34
|
|
||||||
|
|
||||||
TESTING OF THE ACROSS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M,K,L) IS TO HAVE DIFFERENT
|
|
||||||
FLOW-DEP-LENGTH ON BOTH SIDES */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) (((a) < (b)) ? (a) : (b))
|
|
||||||
|
|
||||||
static void acr3401();
|
|
||||||
static void acr3402();
|
|
||||||
static void acr3403();
|
|
||||||
static void acr3404();
|
|
||||||
static void acr3405();
|
|
||||||
static void acr3406();
|
|
||||||
static void acr3407();
|
|
||||||
static void acr3408();
|
|
||||||
static void acr3409();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int i, j, ii, jj;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("===START OF ACR34========================\n");
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3401();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3402();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3403();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3404();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3405();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3406();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3407();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3408();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr3409();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
|
|
||||||
printf("=== END OF ACR34 =========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3401*/
|
|
||||||
void acr3401()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 8
|
|
||||||
#define K 8
|
|
||||||
#define L 8
|
|
||||||
char tname[] = "ACR3401 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[*][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
printf("1234r5\n");
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 1][j][ii][jj] + C[i][j + 1][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj + 1] + C[i - 1][j][ii][jj] + C[i][j - 1][ii][jj] + C[i][j][ii - 1][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[1:1][1:1][1:1][1:1])
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 1][j][ii][jj] + A[i][j + 1][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj + 1] + A[i - 1][j][ii][jj] + A[i][j - 1][ii][jj] + A[i][j][ii - 1][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3402*/
|
|
||||||
void acr3402()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
#define L 10
|
|
||||||
char tname[] = "ACR3402 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[*][block][block][block], shadow[2:2][2:2][2:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 2][j][ii][jj] + C[i][j + 2][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj + 2] + C[i - 1][j][ii][jj] + C[i][j - 2][ii][jj] + C[i][j][ii - 2][jj] + C[i][j][ii][jj - 1] + C[i + 1][j][ii][jj] + C[i][j + 1][ii][jj] + C[i][j][ii][jj + 1] + C[i][j - 1][ii][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[1:2][2:2][2:1][1:2])
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 2][j][ii][jj] + A[i][j + 2][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj + 2] + A[i - 1][j][ii][jj] + A[i][j - 2][ii][jj] + A[i][j][ii - 2][jj] + A[i][j][ii][jj - 1] + A[i + 1][j][ii][jj] + A[i][j + 1][ii][jj] + A[i][j][ii][jj + 1] + A[i][j - 1][ii][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3403*/
|
|
||||||
void acr3403()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
#define L 10
|
|
||||||
char tname[] = "ACR3403 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[*][block][block][block], shadow[2:2][2:2][2:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i - 2][j][ii][jj] + C[i][j - 2][ii][jj] + C[i][j][ii - 2][jj] + C[i][j][ii][jj - 2] + C[i - 1][j][ii][jj] + C[i][j - 1][ii][jj] + C[i][j][ii - 1][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj, C)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[2:0][2:2][2:0][2:0])
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii][jj] = A[i - 2][j][ii][jj] + A[i][j - 2][ii][jj] + A[i][j][ii - 2][jj] + A[i][j][ii][jj - 2] + A[i - 1][j][ii][jj] + A[i][j - 1][ii][jj] + A[i][j][ii - 1][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3404*/
|
|
||||||
void acr3404()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
#define L 10
|
|
||||||
char tname[] = "ACR3404 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[*][block][block][block], shadow[2:2][2:2][2:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 2][j][ii][jj] + C[i][j][ii][jj + 2] + C[i - 2][j][ii][jj] + C[i][j - 2][ii][jj] + C[i][j][ii - 2][jj] + C[i + 1][j][ii][jj] + C[i][j][ii][jj + 1] + C[i - 1][j][ii][jj] + C[i][j - 1][ii][jj] + C[i][j][ii - 1][jj];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[2:2][2:0][2:0][0:2])
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 2][j][ii][jj] + A[i][j][ii][jj + 2] + A[i - 2][j][ii][jj] + A[i][j - 2][ii][jj] + A[i][j][ii - 2][jj] + A[i + 1][j][ii][jj] + A[i][j][ii][jj + 1] + A[i - 1][j][ii][jj] + A[i][j - 1][ii][jj] + A[i][j][ii - 1][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3405*/
|
|
||||||
void acr3405()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
char tname[] = "ACR3405 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[*][block][block][block], shadow[2:2][2:0][0:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 2][j][ii][jj] + C[i][j][ii + 2][jj] + C[i][j][ii][jj + 2] + C[i - 2][j][ii][jj] + C[i][j - 2][ii][jj] + C[i][j][ii][jj - 2] + C[i + 1][j][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj + 1] + C[i - 1][j][ii][jj] + C[i][j - 1][ii][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region inout(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[2:2][2:0][0:2][2:2])
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 2][j][ii][jj] + A[i][j][ii + 2][jj] + A[i][j][ii][jj + 2] + A[i - 2][j][ii][jj] + A[i][j - 2][ii][jj] + A[i][j][ii][jj - 2] + A[i + 1][j][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj + 1] + A[i - 1][j][ii][jj] + A[i][j - 1][ii][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3406*/
|
|
||||||
void acr3406()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 32
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
char tname[] = "ACR3406 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[*][block][block][block], shadow[3:3][3:3][3:3][3:3]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 3][j][ii][jj] + C[i][j + 3][ii][jj] + C[i][j][ii + 3][jj] + C[i][j][ii][jj + 3] + C[i - 3][j][ii][jj] + C[i][j - 3][ii][jj] + C[i][j][ii - 3][jj] + C[i][j][ii][jj - 3] + C[i + 2][j][ii][jj] + C[i][j + 2][ii][jj] + C[i][j][ii + 2][jj] + C[i][j][ii][jj + 2] + C[i - 2][j][ii][jj] + C[i][j - 2][ii][jj] + C[i][j][ii - 2][jj] + C[i][j][ii][jj - 2] + C[i + 1][j][ii][jj] + C[i][j + 1][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj + 1] + C[i - 1][j][ii][jj] + C[i][j - 1][ii][jj] + C[i][j][ii - 1][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[3:3][3:3][3:3][3:3])
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 3][j][ii][jj] + A[i][j + 3][ii][jj] + A[i][j][ii + 3][jj] + A[i][j][ii][jj + 3] + A[i - 3][j][ii][jj] + A[i][j - 3][ii][jj] + A[i][j][ii - 3][jj] + A[i][j][ii][jj - 3] + A[i + 2][j][ii][jj] + A[i][j + 2][ii][jj] + A[i][j][ii + 2][jj] + A[i][j][ii][jj + 2] + A[i - 2][j][ii][jj] + A[i][j - 2][ii][jj] + A[i][j][ii - 2][jj] + A[i][j][ii][jj - 2] + A[i + 1][j][ii][jj] + A[i][j + 1][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj + 1] + A[i - 1][j][ii][jj] + A[i][j - 1][ii][jj] + A[i][j][ii - 1][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3407*/
|
|
||||||
void acr3407()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
char tname[] = "ACR3407 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[*][block][block][block], shadow[0:3][3:3][0:3][0:3]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 3][j][ii][jj] + C[i][j + 3][ii][jj] + C[i][j][ii + 3][jj] + C[i][j][ii][jj + 3] + C[i][j - 3][ii][jj] + C[i + 2][j][ii][jj] + C[i][j + 2][ii][jj] + C[i][j][ii + 2][jj] + C[i][j][ii][jj + 2] + C[i][j - 2][ii][jj] + C[i + 1][j][ii][jj] + C[i][j + 1][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj + 1] + C[i][j - 1][ii][jj];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[0:3][3:3][0:3][0:3])
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 3][j][ii][jj] + A[i][j + 3][ii][jj] + A[i][j][ii + 3][jj] + A[i][j][ii][jj + 3] + A[i][j - 3][ii][jj] + A[i + 2][j][ii][jj] + A[i][j + 2][ii][jj] + A[i][j][ii + 2][jj] + A[i][j][ii][jj + 2] + A[i][j - 2][ii][jj] + A[i + 1][j][ii][jj] + A[i][j + 1][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj + 1] + A[i][j - 1][ii][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3408*/
|
|
||||||
void acr3408()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
char tname[] = "ACR3408 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[*][block][block][block], shadow[0:3][3:3][0:3][3:0]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 3][j][ii][jj] + C[i][j + 3][ii][jj] + C[i][j][ii + 3][jj] + C[i][j][ii][jj - 3] + C[i + 2][j][ii][jj] + C[i][j + 2][ii][jj] + C[i][j][ii + 2][jj] + C[i][j][ii][jj - 2] + C[i + 1][j][ii][jj] + C[i][j + 1][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[0:3][0:3][0:3][3:0])
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 3][j][ii][jj] + A[i][j + 3][ii][jj] + A[i][j][ii + 3][jj] + A[i][j][ii][jj - 3] + A[i + 2][j][ii][jj] + A[i][j + 2][ii][jj] + A[i][j][ii + 2][jj] + A[i][j][ii][jj - 2] + A[i + 1][j][ii][jj] + A[i][j + 1][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR3409*/
|
|
||||||
void acr3409()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 59
|
|
||||||
#define M 59
|
|
||||||
#define K 59
|
|
||||||
#define L 59
|
|
||||||
char tname[] = "ACR3409 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[*][block][block][block], shadow[11:11][11:11][11:11][11:11]
|
|
||||||
int (*A)[M][K][L];
|
|
||||||
int (*C)[M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
A = malloc(N * M * K * L * sizeof(int));
|
|
||||||
C = malloc(N * M * K * L * sizeof(int));
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
for (jj = 11; jj < L - 11; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 11][j][ii][jj] + C[i][j + 11][ii][jj] + C[i][j][ii + 11][jj] + C[i][j][ii][jj + 11] + C[i - 11][j][ii][jj] + C[i][j - 11][ii][jj] + C[i][j][ii - 11][jj] + C[i][j][ii][jj - 11];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[11:11][11:11][11:11][11:11])
|
|
||||||
for (jj = 11; jj < L - 11; jj++)
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 11][j][ii][jj] + A[i][j + 11][ii][jj] + A[i][j][ii + 11][jj] + A[i][j][ii][jj + 11] + A[i - 11][j][ii][jj] + A[i][j - 11][ii][jj] + A[i][j][ii - 11][jj] + A[i][j][ii][jj - 11];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 11; jj < L - 11; jj++)
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ----------------------------------------------- */
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,723 +0,0 @@
|
|||||||
/* ACR44
|
|
||||||
|
|
||||||
TESTING OF THE ACROSS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M,K,L) IS TO HAVE DIFFERENT
|
|
||||||
FLOW-DEP-LENGTH ON BOTH SIDES */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) (((a) < (b)) ? (a) : (b))
|
|
||||||
|
|
||||||
static void acr4401();
|
|
||||||
static void acr4402();
|
|
||||||
static void acr4403();
|
|
||||||
static void acr4404();
|
|
||||||
static void acr4405();
|
|
||||||
static void acr4406();
|
|
||||||
static void acr4407();
|
|
||||||
static void acr4408();
|
|
||||||
static void acr4409();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int i, j, ii, jj;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("===START OF ACR44========================\n");
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr4401();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr4402();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr4403();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr4404();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr4405();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr4406();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr4407();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr4408();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
acr4409();
|
|
||||||
/* ---------------------------------------- */
|
|
||||||
|
|
||||||
printf("=== END OF ACR44 =========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR4401*/
|
|
||||||
void acr4401()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 8
|
|
||||||
#define K 8
|
|
||||||
#define L 8
|
|
||||||
char tname[] = "ACR4401 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
printf("1234r5\n");
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 1][j][ii][jj] + C[i][j + 1][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj + 1] + C[i - 1][j][ii][jj] + C[i][j - 1][ii][jj] + C[i][j][ii - 1][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[1:1][1:1][1:1][1:1])
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 1][j][ii][jj] + A[i][j + 1][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj + 1] + A[i - 1][j][ii][jj] + A[i][j - 1][ii][jj] + A[i][j][ii - 1][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR4402*/
|
|
||||||
void acr4402()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
#define L 10
|
|
||||||
char tname[] = "ACR4402 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[block][block][block][block], shadow[2:2][2:2][2:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 2][j][ii][jj] + C[i][j + 2][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj + 2] + C[i - 1][j][ii][jj] + C[i][j - 2][ii][jj] + C[i][j][ii - 2][jj] + C[i][j][ii][jj - 1] + C[i + 1][j][ii][jj] + C[i][j + 1][ii][jj] + C[i][j][ii][jj + 1] + C[i][j - 1][ii][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[1:2][2:2][2:1][1:2])
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 2][j][ii][jj] + A[i][j + 2][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj + 2] + A[i - 1][j][ii][jj] + A[i][j - 2][ii][jj] + A[i][j][ii - 2][jj] + A[i][j][ii][jj - 1] + A[i + 1][j][ii][jj] + A[i][j + 1][ii][jj] + A[i][j][ii][jj + 1] + A[i][j - 1][ii][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR4403*/
|
|
||||||
void acr4403()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
#define L 10
|
|
||||||
char tname[] = "ACR4403 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[block][block][block][block], shadow[2:2][2:2][2:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i - 2][j][ii][jj] + C[i][j - 2][ii][jj] + C[i][j][ii - 2][jj] + C[i][j][ii][jj - 2] + C[i - 1][j][ii][jj] + C[i][j - 1][ii][jj] + C[i][j][ii - 1][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, nloopj, C)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[2:0][2:2][2:0][2:0])
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii][jj] = A[i - 2][j][ii][jj] + A[i][j - 2][ii][jj] + A[i][j][ii - 2][jj] + A[i][j][ii][jj - 2] + A[i - 1][j][ii][jj] + A[i][j - 1][ii][jj] + A[i][j][ii - 1][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR4404*/
|
|
||||||
void acr4404()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 10
|
|
||||||
#define K 10
|
|
||||||
#define L 10
|
|
||||||
char tname[] = "ACR4404 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[block][block][block][block], shadow[2:2][2:2][2:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 2][j][ii][jj] + C[i][j][ii][jj + 2] + C[i - 2][j][ii][jj] + C[i][j - 2][ii][jj] + C[i][j][ii - 2][jj] + C[i + 1][j][ii][jj] + C[i][j][ii][jj + 1] + C[i - 1][j][ii][jj] + C[i][j - 1][ii][jj] + C[i][j][ii - 1][jj];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[2:2][2:0][2:0][0:2])
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 2][j][ii][jj] + A[i][j][ii][jj + 2] + A[i - 2][j][ii][jj] + A[i][j - 2][ii][jj] + A[i][j][ii - 2][jj] + A[i + 1][j][ii][jj] + A[i][j][ii][jj + 1] + A[i - 1][j][ii][jj] + A[i][j - 1][ii][jj] + A[i][j][ii - 1][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR4405*/
|
|
||||||
void acr4405()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
char tname[] = "ACR4405 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[block][block][block][block], shadow[2:2][2:0][0:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 2][j][ii][jj] + C[i][j][ii + 2][jj] + C[i][j][ii][jj + 2] + C[i - 2][j][ii][jj] + C[i][j - 2][ii][jj] + C[i][j][ii][jj - 2] + C[i + 1][j][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj + 1] + C[i - 1][j][ii][jj] + C[i][j - 1][ii][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region inout(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[2:2][2:0][0:2][2:2])
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 2][j][ii][jj] + A[i][j][ii + 2][jj] + A[i][j][ii][jj + 2] + A[i - 2][j][ii][jj] + A[i][j - 2][ii][jj] + A[i][j][ii][jj - 2] + A[i + 1][j][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj + 1] + A[i - 1][j][ii][jj] + A[i][j - 1][ii][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR4406*/
|
|
||||||
void acr4406()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 32
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
char tname[] = "ACR4406 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[block][block][block][block], shadow[3:3][3:3][3:3][3:3]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 3][j][ii][jj] + C[i][j + 3][ii][jj] + C[i][j][ii + 3][jj] + C[i][j][ii][jj + 3] + C[i - 3][j][ii][jj] + C[i][j - 3][ii][jj] + C[i][j][ii - 3][jj] + C[i][j][ii][jj - 3] + C[i + 2][j][ii][jj] + C[i][j + 2][ii][jj] + C[i][j][ii + 2][jj] + C[i][j][ii][jj + 2] + C[i - 2][j][ii][jj] + C[i][j - 2][ii][jj] + C[i][j][ii - 2][jj] + C[i][j][ii][jj - 2] + C[i + 1][j][ii][jj] + C[i][j + 1][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj + 1] + C[i - 1][j][ii][jj] + C[i][j - 1][ii][jj] + C[i][j][ii - 1][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[3:3][3:3][3:3][3:3])
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 3][j][ii][jj] + A[i][j + 3][ii][jj] + A[i][j][ii + 3][jj] + A[i][j][ii][jj + 3] + A[i - 3][j][ii][jj] + A[i][j - 3][ii][jj] + A[i][j][ii - 3][jj] + A[i][j][ii][jj - 3] + A[i + 2][j][ii][jj] + A[i][j + 2][ii][jj] + A[i][j][ii + 2][jj] + A[i][j][ii][jj + 2] + A[i - 2][j][ii][jj] + A[i][j - 2][ii][jj] + A[i][j][ii - 2][jj] + A[i][j][ii][jj - 2] + A[i + 1][j][ii][jj] + A[i][j + 1][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj + 1] + A[i - 1][j][ii][jj] + A[i][j - 1][ii][jj] + A[i][j][ii - 1][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR4407*/
|
|
||||||
void acr4407()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
char tname[] = "ACR4407 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[block][block][block][block], shadow[0:3][3:3][0:3][0:3]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 3][j][ii][jj] + C[i][j + 3][ii][jj] + C[i][j][ii + 3][jj] + C[i][j][ii][jj + 3] + C[i][j - 3][ii][jj] + C[i + 2][j][ii][jj] + C[i][j + 2][ii][jj] + C[i][j][ii + 2][jj] + C[i][j][ii][jj + 2] + C[i][j - 2][ii][jj] + C[i + 1][j][ii][jj] + C[i][j + 1][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj + 1] + C[i][j - 1][ii][jj];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[0:3][3:3][0:3][0:3])
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 3][j][ii][jj] + A[i][j + 3][ii][jj] + A[i][j][ii + 3][jj] + A[i][j][ii][jj + 3] + A[i][j - 3][ii][jj] + A[i + 2][j][ii][jj] + A[i][j + 2][ii][jj] + A[i][j][ii + 2][jj] + A[i][j][ii][jj + 2] + A[i][j - 2][ii][jj] + A[i + 1][j][ii][jj] + A[i][j + 1][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj + 1] + A[i][j - 1][ii][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR4408*/
|
|
||||||
void acr4408()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
char tname[] = "ACR4408 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[block][block][block][block], shadow[0:3][3:3][0:3][3:0]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 3][j][ii][jj] + C[i][j + 3][ii][jj] + C[i][j][ii + 3][jj] + C[i][j][ii][jj - 3] + C[i + 2][j][ii][jj] + C[i][j + 2][ii][jj] + C[i][j][ii + 2][jj] + C[i][j][ii][jj - 2] + C[i + 1][j][ii][jj] + C[i][j + 1][ii][jj] + C[i][j][ii + 1][jj] + C[i][j][ii][jj - 1];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region inout(C), out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[0:3][0:3][0:3][3:0])
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 3][j][ii][jj] + A[i][j + 3][ii][jj] + A[i][j][ii + 3][jj] + A[i][j][ii][jj - 3] + A[i + 2][j][ii][jj] + A[i][j + 2][ii][jj] + A[i][j][ii + 2][jj] + A[i][j][ii][jj - 2] + A[i + 1][j][ii][jj] + A[i][j + 1][ii][jj] + A[i][j][ii + 1][jj] + A[i][j][ii][jj - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ACR4409*/
|
|
||||||
void acr4409()
|
|
||||||
{
|
|
||||||
#define NL 1000
|
|
||||||
#define N 59
|
|
||||||
#define M 59
|
|
||||||
#define K 59
|
|
||||||
#define L 59
|
|
||||||
char tname[] = "ACR4409 ";
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
#pragma dvm array distribute[block][block][block][block], shadow[11:11][11:11][11:11][11:11]
|
|
||||||
int (*A)[M][K][L];
|
|
||||||
int (*C)[M][K][L];
|
|
||||||
int NNL = NL;
|
|
||||||
A = malloc(N * M * K * L * sizeof(int));
|
|
||||||
C = malloc(N * M * K * L * sizeof(int));
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
for (jj = 11; jj < L - 11; jj++)
|
|
||||||
C[i][j][ii][jj] = C[i + 11][j][ii][jj] + C[i][j + 11][ii][jj] + C[i][j][ii + 11][jj] + C[i][j][ii][jj + 11] + C[i - 11][j][ii][jj] + C[i][j - 11][ii][jj] + C[i][j][ii - 11][jj] + C[i][j][ii][jj - 11];
|
|
||||||
|
|
||||||
#pragma dvm actual(nloopi, C)
|
|
||||||
#pragma dvm region in(C)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj])
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) across(A[11:11][11:11][11:11][11:11])
|
|
||||||
for (jj = 11; jj < L - 11; jj++)
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
A[i][j][ii][jj] = A[i + 11][j][ii][jj] + A[i][j + 11][ii][jj] + A[i][j][ii + 11][jj] + A[i][j][ii][jj + 11] + A[i - 11][j][ii][jj] + A[i][j - 11][ii][jj] + A[i][j][ii - 11][jj] + A[i][j][ii][jj - 11];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
#pragma dvm parallel([jj][ii][j][i] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (jj = 11; jj < L - 11; jj++)
|
|
||||||
for (ii = 11; ii < K - 11; ii++)
|
|
||||||
for (j = 11; j < M - 11; j++)
|
|
||||||
for (i = 11; i < N - 11; i++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
nloopi = Min(nloopi, i);
|
|
||||||
nloopj = Min(nloopj, j);
|
|
||||||
nloopii = Min(nloopii, ii);
|
|
||||||
nloopjj = Min(nloopjj, jj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(nloopi)
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(C);
|
|
||||||
free(A);
|
|
||||||
#undef NL
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ----------------------------------------------- */
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
ALLOW_MULTIDEV=0
|
|
||||||
@@ -1,415 +0,0 @@
|
|||||||
/* ALIGN11
|
|
||||||
TESTING align CLAUSE */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void align111();
|
|
||||||
static void align1111();
|
|
||||||
static void align1112();
|
|
||||||
static void align112();
|
|
||||||
static void align113();
|
|
||||||
static void align114();
|
|
||||||
static void align115();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF ALIGN11 ======================\n");
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i] normal*/
|
|
||||||
align111();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i] small array*/
|
|
||||||
align1111();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2 * i+3] small array*/
|
|
||||||
align1112();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i + 4] shift along i*/
|
|
||||||
align112();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[-i + 7] reverse on i*/
|
|
||||||
// align113();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2 * i + 8] stretching along i*/
|
|
||||||
align114();
|
|
||||||
/* ALIGN arrB[] WITH arrA[]*/
|
|
||||||
align115();
|
|
||||||
|
|
||||||
printf("=== END OF ALIGN11 ========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN111*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i] normal*/
|
|
||||||
void align111()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
#define AN1 8
|
|
||||||
#define BN1 8
|
|
||||||
int k1i = 1;
|
|
||||||
int li = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
char tname[] = "align111 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN1111*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i] small array*/
|
|
||||||
void align1111()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
#define AN1 5
|
|
||||||
#define BN1 2
|
|
||||||
int k1i = 1;
|
|
||||||
int li = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
char tname[] = "align1111";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN1112*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2 * i + 1] small array*/
|
|
||||||
void align1112()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
#define AN1 5
|
|
||||||
#define BN1 2
|
|
||||||
int k1i = 2;
|
|
||||||
int li = 1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
char tname[] = "align1112";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN112*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i + 4] shift along i*/
|
|
||||||
void align112()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
#define AN1 8
|
|
||||||
#define BN1 4
|
|
||||||
int k1i = 1;
|
|
||||||
int li = 4;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
char tname[] = "align112 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN113*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[-i + 7] reverse on i*/
|
|
||||||
void align113()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
#define AN1 8
|
|
||||||
#define BN1 8
|
|
||||||
int k1i = -1;
|
|
||||||
int li = 7;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
char tname[] = "align113 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN114*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2 * i + 8] stretching along i*/
|
|
||||||
void align114()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
#define AN1 24
|
|
||||||
#define BN1 8
|
|
||||||
int k1i = 2;
|
|
||||||
int li = 8;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
char tname[] = "align114 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A1, B1), inout(erri)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN115*/
|
|
||||||
/* ALIGN arrB[] WITH arrA[]*/
|
|
||||||
void align115()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
#define AN1 24
|
|
||||||
#define BN1 8
|
|
||||||
int k1i = 0;
|
|
||||||
int li = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([] with A1[])
|
|
||||||
int B1[BN1];
|
|
||||||
char tname[] = "align115 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = i;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), private(j)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < BN1; j++)
|
|
||||||
if (B1[j] != (j))
|
|
||||||
if (erri > j) erri = j;
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,228 +0,0 @@
|
|||||||
/* ALIGN12
|
|
||||||
TESTING align CLAUSE*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void align121();
|
|
||||||
static void align122();
|
|
||||||
static void align123();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
static int s, cs, erri, i, j, ia, ja, ib, jb;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF ALIGN12 ======================\n");
|
|
||||||
/* ALIGN arrB[][i] WITH arrA[i]*/
|
|
||||||
align121();
|
|
||||||
/* ALIGN arrB[i][] WITH arrA[2 * i + 1]*/
|
|
||||||
align122();
|
|
||||||
/* ALIGN arrB[][] WITH arrA[]*/
|
|
||||||
align123();
|
|
||||||
|
|
||||||
printf("=== END OF ALIGN12 ========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN121*/
|
|
||||||
/* ALIGN arrB[][i] WITH arrA[i]*/
|
|
||||||
void align121()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[][i] WITH arrA[k1i * i + li]*/
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 0
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 1;
|
|
||||||
int li = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([][i] with A1[k1i * i + li])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align121";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A1, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib, jb, j)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
for (j = 0; j < BN1; j++)
|
|
||||||
{
|
|
||||||
if (((i - li) ==(((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN2))
|
|
||||||
{
|
|
||||||
ib = j;
|
|
||||||
jb = (i - li) / k1i;
|
|
||||||
B2[ib][jb] = ib * NL + jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j;
|
|
||||||
s = s + B2[i][j];
|
|
||||||
if (B2[i][j] != i * NL + j)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
cs = cs + i * NL + j;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN122*/
|
|
||||||
/* ALIGN arrB[i][] WITH arrA[2 * i + 1]*/
|
|
||||||
void align122()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][] WITH arrA[k1i * i + li]*/
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 0
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 2;
|
|
||||||
int li = 1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i][] with A1[k1i * i + li])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align122";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A1, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib, jb, j)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
for (j = 0; j < BN1; j++)
|
|
||||||
{
|
|
||||||
if (((i - li) ==(((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN2))
|
|
||||||
{
|
|
||||||
jb = j;
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B2[ib][jb] = ib * NL + jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j;
|
|
||||||
s = s + B2[i][j];
|
|
||||||
if (B2[i][j] != (i * NL + j))
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
cs = cs + i * NL + j;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN123*/
|
|
||||||
/* ALIGN arrB[][] WITH arrA[]*/
|
|
||||||
void align123()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[][] WITH arrA[]*/
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 0
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 0;
|
|
||||||
int li = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([][] with A1[])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align123";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A1, B2)
|
|
||||||
{
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = i * NL + j;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (ib = 0; ib < BN1; ib++)
|
|
||||||
for (jb = 0; jb < BN2; jb++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j;
|
|
||||||
if (B2[ib][jb] != ib * NL + jb)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,727 +0,0 @@
|
|||||||
/* ALIGN214
|
|
||||||
TESTING align CLAUSE*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void align211();
|
|
||||||
static void align212();
|
|
||||||
static void align213();
|
|
||||||
static void align214();
|
|
||||||
|
|
||||||
static void align241();
|
|
||||||
static void align2421();
|
|
||||||
static void align2422();
|
|
||||||
static void align243();
|
|
||||||
static void align244();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
static int s, cs, erri, i, j, n, m, k, ia, ja, na, ma, ib, jb, nb, mb, Avalue, Bvalue;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF ALIGN214 ======================\n");
|
|
||||||
|
|
||||||
/* ALIGN arrB[i] WITH arrA[1][i] vector arrB on section
|
|
||||||
(the first line of arrA)*/
|
|
||||||
align211();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2 * i + 2][2] vector arrB on section
|
|
||||||
(the second column of arrA) with stretching and shift*/
|
|
||||||
align212();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[][i] vector replication on every line of arrA*/
|
|
||||||
align213();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2 * i + 2][] vector arrB on replication on
|
|
||||||
every column of arrA with stretching and shift*/
|
|
||||||
align214();
|
|
||||||
|
|
||||||
/* ALIGN arrB[i][j][][] WITH arrA[i][j]
|
|
||||||
matrix compression*/
|
|
||||||
align241();
|
|
||||||
/* ALIGN arrB[][i][][j] WITH arrA[j+4][2*i] matrix compression*/
|
|
||||||
align2421();
|
|
||||||
/* ALIGN arrB[][i][][j] WITH arrA[j+1][2*i] small array*/
|
|
||||||
align2422();
|
|
||||||
/* ALIGN arrB[][][i][] WITH arrA[1][i] matrix compression
|
|
||||||
and replication*/
|
|
||||||
align243();
|
|
||||||
/* ALIGN arrB[][][][i] WITH arrA[i][] matrix compression
|
|
||||||
and replication*/
|
|
||||||
align244();
|
|
||||||
|
|
||||||
printf("=== END OF ALIGN214 ========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN211 */
|
|
||||||
/* ALIGN arrB[i] WITH arrA[1][i] vector arrB on section
|
|
||||||
(the first line of arrA)*/
|
|
||||||
void align211()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[1][i]*/
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define BN1 4
|
|
||||||
int k1i = 0, k2i = 0, li = 1;
|
|
||||||
int k1j = 1, k2j = 0, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i] with A2[1][i])
|
|
||||||
int B1[BN1];
|
|
||||||
char tname[] = "align211";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A2, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if ((i == 1) && (j < BN1))
|
|
||||||
{
|
|
||||||
ib = j;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = 1;
|
|
||||||
ja = i;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN212*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2*i+2][2] vector arrB on section
|
|
||||||
(the second column of arrA) with stretching and shift*/
|
|
||||||
void align212()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[2*i+2][2]*/
|
|
||||||
#define AN1 14
|
|
||||||
#define AN2 3
|
|
||||||
#define BN1 6
|
|
||||||
int k1i = 2, k2i = 0, li = 2;
|
|
||||||
int k1j = 0, k2j = 0, lj = 2;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i] with A2[k1i * i + li][lj])
|
|
||||||
int B1[BN1];
|
|
||||||
char tname[] = "align212";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A2, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (j == lj){
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN213*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[][i] vector replication on every line of arrA*/
|
|
||||||
void align213()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[][k1j * i + lj]*/
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define BN1 6
|
|
||||||
int k1i = 0, k2i = 0, li = 0;
|
|
||||||
int k1j = 1, k2j = 0, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i] with A2[][k1j * i + lj])
|
|
||||||
int B1[BN1];
|
|
||||||
char tname[] = "align213";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A2, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = i;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (((j - lj) == (((j - lj) / k1j) * k1j)) &&
|
|
||||||
(((j - lj) / k1j) >= 0) &&
|
|
||||||
(((j - lj) / k1j) < BN1))
|
|
||||||
{
|
|
||||||
ib = (j - lj) / k1j;
|
|
||||||
if (B1[ib] != ib)
|
|
||||||
if (erri > ib) erri = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
s = s + B1[i];
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = (0 + BN1-1) * BN1 / 2;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf("%d, %d, %d\n", erri, s, cs);
|
|
||||||
}
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN214*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2*i+2][ ] vector arrB on replication on
|
|
||||||
every column of arrA with stretching and shift*/
|
|
||||||
void align214()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i*i+li][]*/
|
|
||||||
#define AN1 28
|
|
||||||
#define AN2 8
|
|
||||||
#define BN1 5
|
|
||||||
int k1i = 2, k2i = 0, li = 2;
|
|
||||||
int k1j = 0, k2j = 0, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i] with A2[k1i * i + li][])
|
|
||||||
int B1[BN1];
|
|
||||||
char tname[] = "align214";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A2, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = i;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
if (B1[ib] != ib)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
s = s + B1[i];
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = (0 + BN1-1) * BN1 / 2;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN241 */
|
|
||||||
/* ALIGN arrB[i][j][][] WITH arrA[i][j]
|
|
||||||
matrix compression*/
|
|
||||||
void align241()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j][][] WITH arrA[k1i*i+li][k2j*j+lj]*/
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 5
|
|
||||||
#define BN1 2
|
|
||||||
#define BN2 2
|
|
||||||
#define BN3 2
|
|
||||||
#define BN4 2
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, k4i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 1, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j][][] with A2[k1i*i+li][k2j*j+lj])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align241 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A2, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb, n, m, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL / 10 + j;
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
nb = n;
|
|
||||||
mb = m;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] != val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN2421*/
|
|
||||||
/* ALIGN arrB[][i][][j] WITH arrA[j+4][2*i] matrix compression*/
|
|
||||||
void align2421()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[][i][][j] WITH arrA[k2i*j+li][k1j*i+lj]*/
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 9
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
#define BN3 4
|
|
||||||
#define BN4 4
|
|
||||||
int k1i = 0, k2i = 1, k3i = 0, k4i = 0, li = 4;
|
|
||||||
int k1j = 2, k2j = 0, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([][i][][j] with A2[k2i*j+li][k1j*i+lj])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align2421";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A2, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb, n, m, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL / 10 + j;
|
|
||||||
for (n = 0; n < BN1; n++)
|
|
||||||
for (m = 0; m < BN3; m++)
|
|
||||||
{
|
|
||||||
if (((i - li) == (((i - li) / k2i) * k2i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k1j) * k1j)) &&
|
|
||||||
(((i - li) / k2i) >= 0) &&
|
|
||||||
(((j - lj) / k1j) >= 0) &&
|
|
||||||
(((i - li) / k2i) < BN4) &&
|
|
||||||
(((j - lj) / k1j) < BN2))
|
|
||||||
{
|
|
||||||
ib = n;
|
|
||||||
jb = (j - lj) / k1j;
|
|
||||||
nb = m;
|
|
||||||
mb = (i - li) / k2i;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] != val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN2422*/
|
|
||||||
/* ALIGN arrB[][i][][j] WITH arrA[j+1][2*i] small array*/
|
|
||||||
void align2422()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[][i][][j] WITH arrA[k2i*j+li][k1j*i+lj]*/
|
|
||||||
#define AN1 3
|
|
||||||
#define AN2 4
|
|
||||||
#define BN1 2
|
|
||||||
#define BN2 2
|
|
||||||
#define BN3 2
|
|
||||||
#define BN4 2
|
|
||||||
int k1i = 0, k2i = 1, k3i = 0, k4i = 0, li = 1;
|
|
||||||
int k1j = 2, k2j = 0, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([][i][][j] with A2[k2i*j+li][k1j*i+lj])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align2422";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A2, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb, n, m, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL / 10 + j;
|
|
||||||
for (n = 0; n < BN1; n++)
|
|
||||||
for (m = 0; m < BN3; m++)
|
|
||||||
{
|
|
||||||
if (((i - li) == (((i - li) / k2i) * k2i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k1j) * k1j)) &&
|
|
||||||
(((i - li) / k2i) >= 0) &&
|
|
||||||
(((j - lj) / k1j) >= 0) &&
|
|
||||||
(((i - li) / k2i) < BN4) &&
|
|
||||||
(((j - lj) / k1j) < BN2))
|
|
||||||
{
|
|
||||||
ib = n;
|
|
||||||
jb = (j - lj) / k1j;
|
|
||||||
nb = m;
|
|
||||||
mb = (i - li) / k2i;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] != val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN243*/
|
|
||||||
/* ALIGN arrB[][][i][] WITH arrA[1][i] matrix compression
|
|
||||||
and replication*/
|
|
||||||
void align243()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[][][i][] WITH arrA[li][k1j*i+lj]*/
|
|
||||||
#define AN1 3
|
|
||||||
#define AN2 4
|
|
||||||
#define BN1 2
|
|
||||||
#define BN2 2
|
|
||||||
#define BN3 2
|
|
||||||
#define BN4 2
|
|
||||||
int k1i = 0, k2i = 0, k3i = 0, k4i = 0, li = 1;
|
|
||||||
int k1j = 1, k2j = 0, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([][][i][] with A2[li][k1j*i+lj])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align243 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A2, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb, k, n, m, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL / 10 + j;
|
|
||||||
if (i == li)
|
|
||||||
for (n = 0; n < BN1; n++)
|
|
||||||
for (m = 0; m < BN2; m++)
|
|
||||||
for (k = 0; k < BN4; k++)
|
|
||||||
{
|
|
||||||
if (((j - lj) == (((j - lj) / k1j) * k1j)) &&
|
|
||||||
(((j - lj) / k1j) >= 0) &&
|
|
||||||
(((j - lj) / k1j) < BN3))
|
|
||||||
{
|
|
||||||
ib = n;
|
|
||||||
jb = m;
|
|
||||||
nb = ((j - lj) / k1j);
|
|
||||||
mb = k;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] != val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN244*/
|
|
||||||
/* ALIGN arrB[][][][i] WITH arrA[i][] matrix compression
|
|
||||||
and replication*/
|
|
||||||
void align244()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[][][i][] WITH arrA[k1i*i+li][]*/
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 9
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
#define BN3 4
|
|
||||||
#define BN4 4
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, k4i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 0, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([][][i][] with A2[k1i * i + li][])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align244 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A2, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), private(ib, jb, m, n, k, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL / 10 + j;
|
|
||||||
for (n = 0; n < BN1; n++)
|
|
||||||
for (m = 0; m < BN2; m++)
|
|
||||||
for (k = 0; k < BN4; k++)
|
|
||||||
{
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN3))
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
ib = n;
|
|
||||||
jb = m;
|
|
||||||
nb = ((i - li) / k1i);
|
|
||||||
mb = k;
|
|
||||||
if (B4[ib][jb][nb][mb] != ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,600 +0,0 @@
|
|||||||
/* ALIGN22
|
|
||||||
TESTING align CLAUSE*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void align221();
|
|
||||||
static void align222();
|
|
||||||
static void align223();
|
|
||||||
static void align224();
|
|
||||||
static void align225();
|
|
||||||
static void align2251();
|
|
||||||
static void align226();
|
|
||||||
static void align227();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
static int s, cs, erri, i, j, ia, ja, ib, jb;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF ALIGN22 ======================\n");
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][j] normal*/
|
|
||||||
align221();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][2 * j] stretching along j*/
|
|
||||||
align222();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i + 4][j] shift along i*/
|
|
||||||
align223();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[-i + 9][j] reverse on i*/
|
|
||||||
// align224();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i + 4][j + 4] shift along i and j*/
|
|
||||||
align225();
|
|
||||||
/* */
|
|
||||||
align2251();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j][i] rotation*/
|
|
||||||
align226();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j + 1][i] rotation and shift*/
|
|
||||||
align227();
|
|
||||||
|
|
||||||
printf("=== END OF ALIGN22 ========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN221*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][j] normal*/
|
|
||||||
void align221()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k1i * i + li][k2j * j + lj]*/
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define BN1 8
|
|
||||||
#define BN2 8
|
|
||||||
int k1i = 1, k2i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 1, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k1i * i + li][k2j * j + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align221 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A2, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for(j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
B2[ib][jb] = ib * NL + jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i * NL + j))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN222*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][2*j] stretching along j*/
|
|
||||||
void align222()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k1i * i + li][k2j * j + lj]*/
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define BN1 8
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 1, k2i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 2, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k1i * i + li][k2j * j + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align222 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A2, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for(j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
B2[ib][jb] = ib * NL + jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i * NL + j))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN223*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i+4][j] shift along i*/
|
|
||||||
void align223()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k1i * i + li][k2j * j + lj]*/
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 8
|
|
||||||
int k1i = 1, k2i = 0, li = 4;
|
|
||||||
int k1j = 0, k2j = 1, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k1i * i + li][k2j * j + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align223 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A2, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for(j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
B2[ib][jb] = ib * NL + jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i * NL + j))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN224*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[-i+9][j] reverse on i*/
|
|
||||||
void align224()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k1i * i + li][k2j * j + lj]*/
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 8
|
|
||||||
#define BN1 8
|
|
||||||
#define BN2 8
|
|
||||||
int k1i = -1, k2i = 0, li = 9;
|
|
||||||
int k1j = 0, k2j = 1, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k1i * i + li][k2j * j + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align224 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A2, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for(j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
B2[ib][jb] = ib * NL + jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i * NL + j))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN225*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i+4][j+4]shift along i and j*/
|
|
||||||
void align225()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k1i * i + li][k2j * j + lj]*/
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 1, k2i = 0, li = 4;
|
|
||||||
int k1j = 0, k2j = 1, lj = 4;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k1i * i + li][k2j * j + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align225 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A2, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for(j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
B2[ib][jb] = ib * NL + jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i * NL + j))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN2251*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i+1][2*j] small arrays*/
|
|
||||||
void align2251()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k1i * i + li][k2j * j + lj]*/
|
|
||||||
#define AN1 3
|
|
||||||
#define AN2 5
|
|
||||||
#define BN1 2
|
|
||||||
#define BN2 3
|
|
||||||
int k1i = 1, k2i = 0, li = 1;
|
|
||||||
int k1j = 0, k2j = 2, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k1i * i + li][k2j * j + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align2251";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A2, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for(j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
B2[ib][jb] = ib * NL + jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i * NL + j))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN226*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j][i] rotation*/
|
|
||||||
void align226()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k2i * j + li][k1j * i + lj]*/
|
|
||||||
#define AN1 4
|
|
||||||
#define AN2 4
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 0, k2i = 1, li = 0;
|
|
||||||
int k1j = 1, k2j = 0, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k2i * j + li][k1j * i + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align226 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A2, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (((i - li) == (((i - li) / k2i) * k2i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k1j) * k1j)) &&
|
|
||||||
(((i - li) / k2i) >= 0) &&
|
|
||||||
(((j - lj) / k1j) >= 0) &&
|
|
||||||
(((i - li) / k2i) < BN2) &&
|
|
||||||
(((j - lj) / k1j) < BN1))
|
|
||||||
{
|
|
||||||
jb = (i - li) / k2i;
|
|
||||||
ib = (j - lj) / k1j;
|
|
||||||
B2[ib][jb] = ib * NL + jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i * NL + j))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
ia = k2i * j + li;
|
|
||||||
ja = k1j * i + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN227*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j+1][i] rotation and shift*/
|
|
||||||
void align227()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k2i*j+li][k1j*i+lj]*/
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 0, k2i = 1, li = 1;
|
|
||||||
int k1j = 1, k2j = 0, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k2i * j + li][k1j * i + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align227 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region local(A2, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (((i - li) == (((i - li) / k2i) * k2i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k1j) * k1j)) &&
|
|
||||||
(((i - li) / k2i) >= 0) &&
|
|
||||||
(((j - lj) / k1j) >= 0) &&
|
|
||||||
(((i - li) / k2i) < BN2) &&
|
|
||||||
(((j - lj) / k1j) < BN1))
|
|
||||||
{
|
|
||||||
jb = (i - li) / k2i;
|
|
||||||
ib = (j - lj) / k1j;
|
|
||||||
B2[ib][jb] = ib * NL + jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i * NL + j))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
ia = k2i * j + li;
|
|
||||||
ja = k1j * i + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
if (erri > i * NL / 10 + j) erri = i * NL / 10 + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,600 +0,0 @@
|
|||||||
/* ALIGN32
|
|
||||||
TESTING align CLAUSE*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void align321();
|
|
||||||
static void align322();
|
|
||||||
static void align323();
|
|
||||||
static void align324();
|
|
||||||
static void align325();
|
|
||||||
static void align326();
|
|
||||||
static void align327();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
static int s, cs, erri, i, j, n, m, k, l, ia, ja, na, ma, ib, jb, nb, mb, Avalue, Bvalue;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF ALIGN32 ======================\n");
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][j][1] matrix on section*/
|
|
||||||
align321();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j][i][5] matrix on section with rotation*/
|
|
||||||
align322();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j][1][2*i] matrix on section with
|
|
||||||
rotation and stretching*/
|
|
||||||
align323();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[][i][j] matrix replication*/
|
|
||||||
align324();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i+4][][j] matrix replication with shift*/
|
|
||||||
align325();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[-i+8][j][] matrix replication with reverse*/
|
|
||||||
// align326();
|
|
||||||
/* ALIGN arrB[][] WITH arrA[][][]*/
|
|
||||||
align327();
|
|
||||||
printf("=== END OF ALIGN32 ========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN321*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][j][1] matrix on section*/
|
|
||||||
void align321()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j]
|
|
||||||
WITH arrA[k1i*i+li][k2j*j+lj][ln]*/
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 5
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 1, k3j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 0, ln = 1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j] with A3[k1i*i+li][k2j*j+lj][ln])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align321";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A3, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n;
|
|
||||||
if ((n == ln ) &&
|
|
||||||
((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
B2[ib][jb] = ib * NL / 10 + jb * NL / 100;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri), sum(s)), private(ia, ja, na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100;
|
|
||||||
s = s + B2[i][j];
|
|
||||||
if (B2[i][j] != val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
na = ln;
|
|
||||||
if (A3[ia][ja][na] != ia * NL / 10 + ja * NL / 100 + na)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN322*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j][i][5] matrix on section with rotation*/
|
|
||||||
void align322()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j]
|
|
||||||
WITH arrA[k2i*j+li][k1j*i+lj][ln]*/
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 6
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 0, k2i = 1, k3i = 0, li = 0;
|
|
||||||
int k1j = 1, k2j = 0, k3j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 0, ln = 5;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j] with A3[k2i*j+li][k1j*i+lj][ln])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align322";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A3, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n;
|
|
||||||
if ((n == ln ) &&
|
|
||||||
((i - li) == (((i - li) / k2i) * k2i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k1j) * k1j)) &&
|
|
||||||
(((i - li) / k2i) >= 0) &&
|
|
||||||
(((j - lj) / k1j) >= 0) &&
|
|
||||||
(((i - li) / k2i) < BN2) &&
|
|
||||||
(((j - lj) / k1j) < BN1))
|
|
||||||
{
|
|
||||||
ib = (j - lj) / k1j;
|
|
||||||
jb = (i - li) / k2i;
|
|
||||||
B2[ib][jb] = ib * NL / 10 + jb * NL / 100;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri), sum(s)), private(ia, ja, na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100;
|
|
||||||
s = s + B2[i][j];
|
|
||||||
if (B2[i][j] != val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
ia = k2i * j + li;
|
|
||||||
ja = k1j * i + lj;
|
|
||||||
na = ln;
|
|
||||||
if (A3[ia][ja][na] != ia * NL / 10 + ja * NL / 100 + na)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN323*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j][1][2*i] matrix on section with
|
|
||||||
rotation and stretching*/
|
|
||||||
void align323()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j]
|
|
||||||
WITH arrA[k2i*j+li][lj][k1n*i+ln]*/
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 2
|
|
||||||
#define AN3 7
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 0, k2i = 1, k3i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 0, k3j = 0, lj = 1;
|
|
||||||
int k1n = 2, k2n = 0, k3n = 0, ln = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j] with A3[k2i*j+li][lj][k1n*i+ln])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align323";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A3, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n;
|
|
||||||
if ((j == lj) &&
|
|
||||||
((i - li) == (((i - li) / k2i) * k2i)) &&
|
|
||||||
((n - ln) == (((n - ln) / k1n) * k1n)) &&
|
|
||||||
(((i - li) / k2i) >= 0) &&
|
|
||||||
(((n - ln) / k1n) >= 0) &&
|
|
||||||
(((i - li) / k2i) < BN2) &&
|
|
||||||
(((n - ln) / k1n) < BN1))
|
|
||||||
{
|
|
||||||
ib = (n - ln) / k1n;
|
|
||||||
jb = (i - li) / k2i;
|
|
||||||
B2[ib][jb] = ib * NL / 10 + jb * NL / 100;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri), sum(s)), private(ia, ja, na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100;
|
|
||||||
s = s + B2[i][j];
|
|
||||||
if (B2[i][j] != val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
ia = k2i * j + li;
|
|
||||||
ja = lj;
|
|
||||||
na = k1n * i + ln;
|
|
||||||
if (A3[ia][ja][na] != ia * NL / 10 + ja * NL / 100 + na)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN324*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[][i][j] matrix replication*/
|
|
||||||
void align324()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j]
|
|
||||||
WITH arrA[][k1j*i+lj][k2n*j+ln]*/
|
|
||||||
#define AN1 4
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 0, k2i = 0, k3i = 0, li = 0;
|
|
||||||
int k1j = 1, k2j = 0, k3j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 1, k3n = 0, ln = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j] with A3[][k1j*i+lj][k2n*j+ln])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align324";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A3, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = i * NL / 10 + j * NL / 100;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) reduction(min(erri)), private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n;
|
|
||||||
if (((n - ln) == (((n - ln) / k2n) * k2n)) &&
|
|
||||||
((j - lj) == (((j - lj) / k1j) * k1j)) &&
|
|
||||||
(((n - ln) / k2n) >= 0) &&
|
|
||||||
(((j - lj) / k1j) >= 0) &&
|
|
||||||
(((n - ln) / k2n) < BN2) &&
|
|
||||||
(((j - lj) / k1j) < BN1))
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100;
|
|
||||||
ib = (j - lj) / k1j;
|
|
||||||
jb = (n - ln) / k2n;
|
|
||||||
if (B2[ib][jb] != ib * NL / 10 + jb * NL / 100)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri), sum(s)), private(ia, ja, na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100;
|
|
||||||
s = s + B2[i][j];
|
|
||||||
if (B2[i][j] != val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN325*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i+4][][j] matrix replication with shift*/
|
|
||||||
void align325()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j]
|
|
||||||
WITH arrA[k1i*i+li][][k2n * j + ln]*/
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, li = 4;
|
|
||||||
int k1j = 1, k2j = 0, k3j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 1, k3n = 0, ln = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j] with A3[k1i*i+li][][k2n*j+ln])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align325";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A3, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = i * NL / 10 + j * NL / 100;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) reduction(min(erri)), private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = i*NL/10 + j*NL/100 + n;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((n - ln) == (((n - ln) / k2n) * k2n)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((n - ln) / k2n) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((n - ln) / k2n) < BN2))
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100;
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (n - ln) / k2n;
|
|
||||||
if (B2[ib][jb] != ib * NL / 10 + jb * NL / 100)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri), sum(s)), private(ia, ja, na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100;
|
|
||||||
s = s + B2[i][j];
|
|
||||||
if (B2[i][j] != val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN326*/
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[-i+8][j][] matrix replication with reverse*/
|
|
||||||
void align326()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j]
|
|
||||||
WITH arrA[k1i*i+li][k2j*j+lj][]*/
|
|
||||||
#define AN1 9
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 5
|
|
||||||
#define BN1 7
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = -1, k2i = 0, k3i = 0, li = 8;
|
|
||||||
int k1j = 0, k2j = 1, k3j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 0, ln = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j] with A3[k1i*i+li][k2j*j+lj][])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align326";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A3, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = i * NL / 10 + j * NL / 100;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) reduction(min(erri)), private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j -lj) / k2j) * k2j)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2n) < BN2))
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100;
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
if (B2[ib][jb] != ib * NL / 10 + jb * NL / 100)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erri), sum(s)), private(ia, ja, na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100;
|
|
||||||
s = s + B2[i][j];
|
|
||||||
if (B2[i][j] != val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN327*/
|
|
||||||
/* ALIGN arrB[][] WITH arrA[][][]*/
|
|
||||||
void align327()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[][]
|
|
||||||
WITH arrA[][][]*/
|
|
||||||
#define AN1 7
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 5
|
|
||||||
#define BN1 7
|
|
||||||
#define BN2 4
|
|
||||||
int k1i = 0, k2i = 0, k3i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 0, k3j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 0, ln = 1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([][] with A3[][][])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
char tname[] = "align327";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A3, B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = i * NL / 10 + j * NL / 100;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) reduction(min(erri)), private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n;
|
|
||||||
for (ib = 0; ib < BN1; ib++)
|
|
||||||
for (jb = 0; jb < BN2; jb++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100;
|
|
||||||
if (B2[ib][jb] != ib * NL / 10 + jb * NL / 100)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,197 +0,0 @@
|
|||||||
/* ALIGN33
|
|
||||||
TESTING align CLAUSE*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void align331();
|
|
||||||
static void align332();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
static int s, cs, erri, i, j, n, m, k, l, ia, ja, na, ma, ib, jb, nb, mb, Avalue, Bvalue;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF ALIGN33 ======================\n");
|
|
||||||
/* ALIGN arrB[i][j][k] WITH arrA[i][j][k] normal*/
|
|
||||||
align331();
|
|
||||||
/* ALIGN arrB[][i][] WITH arrA[][lj][i]*/
|
|
||||||
align332();
|
|
||||||
printf("=== END OF ALIGN33 ========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN331*/
|
|
||||||
/* ALIGN arrB[i][j][n] WITH arrA[i][j][n] normal*/
|
|
||||||
void align331()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j][n]
|
|
||||||
WITH arrA[k1i*i+li][k2j*j+lj][k3n*n+ln]*/
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 5
|
|
||||||
#define BN1 2
|
|
||||||
#define BN2 2
|
|
||||||
#define BN3 2
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 1, k3j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 1, ln = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j][n] with A3[k1i*i+li][k2j*j+lj][k3n*n+ln])
|
|
||||||
int B3[BN1][BN2][BN3];
|
|
||||||
char tname[] = "align331";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A3, B3)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
B3[i][j][n] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) private(ib, jb, nb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
((n - ln) == (((n - ln) / k3n) * k3n)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((n - ln) / k3n) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) /k2j) < BN2) &&
|
|
||||||
(((n - ln) / k3n) < BN3))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
nb = (n - ln) / k3n;
|
|
||||||
B3[ib][jb][nb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
s = s + B3[i][j][n];
|
|
||||||
if (B3[i][j][n] != val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN332*/
|
|
||||||
/* ALIGN arrB[][i][] WITH arrA[][lj][i]*/
|
|
||||||
void align332()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[][i][]
|
|
||||||
WITH arrA[][lj][k3n*n+ln]*/
|
|
||||||
#define AN1 4
|
|
||||||
#define AN2 4
|
|
||||||
#define AN3 4
|
|
||||||
#define BN1 2
|
|
||||||
#define BN2 2
|
|
||||||
#define BN3 2
|
|
||||||
int k1i = 0, k2i = 0, k3i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 0, k3j = 0, lj = 3;
|
|
||||||
int k1n = 1, k2n = 0, k3n = 0, ln = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([][i][] with A3[][lj][k1n*i+ln])
|
|
||||||
int B3[BN1][BN2][BN3];
|
|
||||||
char tname[] = "align332";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A3, B3)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
B3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) private(ib, jb, nb, k, l), reduction(min(erri))
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
if (j == lj)
|
|
||||||
{
|
|
||||||
for (k = 0; k < BN1; k++)
|
|
||||||
for (l = 0; l < BN3; l++)
|
|
||||||
{
|
|
||||||
if (((n - ln) == (((n - ln) / k1n) * k1n)) &&
|
|
||||||
(((n - ln) / k1n) >= 0) &&
|
|
||||||
(((n - ln) / k1n) < BN2))
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
ib = k;
|
|
||||||
jb = (n - ln) / k1n;
|
|
||||||
nb = l;
|
|
||||||
if (B3[ib][jb][nb] != ib * NL / 10 + jb * NL / 100 + nb * NL / 1000)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,855 +0,0 @@
|
|||||||
/* ALIGN44
|
|
||||||
TESTING align CLAUSE*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void align441();
|
|
||||||
static void align442();
|
|
||||||
static void align443();
|
|
||||||
static void align444();
|
|
||||||
static void align445();
|
|
||||||
static void align446();
|
|
||||||
static void align447();
|
|
||||||
static void align448();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
static int s, cs, erri, i, j, n, m, k, l, ia, ja, na, ma, ib, jb, nb, mb, Avalue, Bvalue;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF ALIGN44 ======================\n");
|
|
||||||
/* ALIGN arrB[i][j][k][l] WITH arrA[i][j][k][l] normal*/
|
|
||||||
align441();
|
|
||||||
/* ALIGN arrB[i][j][k][l] WITH arrA[l][i][j][k] rotation*/
|
|
||||||
align442();
|
|
||||||
/* ALIGN arrB[i][j][k][l] WITH arrA[i][2* j][k][3*l] stretching*/
|
|
||||||
align443();
|
|
||||||
/* ALIGN arrB[i][j][k][l] WITH arrA[i+2][j][k][l+3] shift*/
|
|
||||||
align444();
|
|
||||||
/* ALIGN arrB[i][j][k][l] WITH arrA[i][j][-k+8][l+8] reverse*/
|
|
||||||
// align445();
|
|
||||||
/* ALIGN arrB[i][j][][l] WITH arrA[i][j][2][l]
|
|
||||||
compression and replication*/
|
|
||||||
align446();
|
|
||||||
/* ALIGN arrB[][j][k][i] WITH arrA[i][j][][k]
|
|
||||||
compression and replication*/
|
|
||||||
align447();
|
|
||||||
/* ALIGN arrB[][i][j][] WITH arrA[i][j][1][3]
|
|
||||||
compression and replication*/
|
|
||||||
align448();
|
|
||||||
printf("=== END OF ALIGN44 ========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN441*/
|
|
||||||
/* ALIGN arrB[i][j][n][m] WITH arrA[i][ j][n][m] normal*/
|
|
||||||
void align441()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j][n][m]
|
|
||||||
WITH arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm]*/
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 5
|
|
||||||
#define AN4 5
|
|
||||||
#define BN1 2
|
|
||||||
#define BN2 2
|
|
||||||
#define BN3 2
|
|
||||||
#define BN4 2
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, k4i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 1, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 1, k4n = 0, ln = 0;
|
|
||||||
int k1m = 0, k2m = 0, k3m = 0, k4m = 1, lm = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
#pragma dvm array align([i][j][n][m] with A4[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align441";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A4, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
((n - ln) == (((n - ln) / k3n) * k3n)) &&
|
|
||||||
((m - lm) == (((m - lm) / k4m) * k4m)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((n - ln) / k3n) >= 0) &&
|
|
||||||
(((m - lm) / k4m) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2) &&
|
|
||||||
(((n - ln) / k3n) < BN3) &&
|
|
||||||
(((m - lm) / k4m) < BN4))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
nb = (n - ln) / k3n;
|
|
||||||
mb = (m - lm) / k4m;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] !=val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN442*/
|
|
||||||
/* ALIGN arrB[i][j][k][l] WITH arrA[l][i][j][k] rotation*/
|
|
||||||
void align442()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j][n][m]
|
|
||||||
WITH arrA4[k4i*n+li][k1j*i+lj][k2n*j+ln][k3m*n+lm]*/
|
|
||||||
#define AN1 4
|
|
||||||
#define AN2 4
|
|
||||||
#define AN3 4
|
|
||||||
#define AN4 4
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
#define BN3 4
|
|
||||||
#define BN4 4
|
|
||||||
int k1i = 0, k2i = 0, k3i = 0, k4i = 1, li = 0;
|
|
||||||
int k1j = 1, k2j = 0, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 1, k3n = 0, k4n = 0, ln = 0;
|
|
||||||
int k1m = 0, k2m = 0, k3m = 1, k4m = 0, lm = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
#pragma dvm array align([i][j][n][m] with A4[k4i*m+li][k1j*i+lj][k2n*j+ln][k3m*n+lm])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align442";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A4, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if (((i - li) == (((i - li) / k4i) * k4i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k1j) * k1j)) &&
|
|
||||||
((n - ln) == (((n - ln) / k2n) * k2n)) &&
|
|
||||||
((m - lm) == (((m - lm) / k3m) * k3m)) &&
|
|
||||||
(((i - li) / k4i) >= 0) &&
|
|
||||||
(((j - lj) / k1j) >= 0) &&
|
|
||||||
(((n - ln) / k2n) >= 0) &&
|
|
||||||
(((m - lm) / k3m) >= 0) &&
|
|
||||||
(((i - li) / k4i) < BN4) &&
|
|
||||||
(((j - lj) / k1j) < BN1) &&
|
|
||||||
(((n - ln) / k2n) < BN2) &&
|
|
||||||
(((m - lm) / k3m) < BN3))
|
|
||||||
{
|
|
||||||
mb = (i - li) / k4i;
|
|
||||||
ib = (j - lj) / k1j;
|
|
||||||
jb = (n - ln) / k2n;
|
|
||||||
nb = (m - lm) / k3m;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] !=val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN443*/
|
|
||||||
/* ALIGN arrB[i][j][k][l] WITH arrA[i][2* j][k][3*l] stretching*/
|
|
||||||
void align443()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j][n][m]
|
|
||||||
WITH arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm]*/
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 4
|
|
||||||
#define AN3 3
|
|
||||||
#define AN4 7
|
|
||||||
#define BN1 3
|
|
||||||
#define BN2 2
|
|
||||||
#define BN3 2
|
|
||||||
#define BN4 3
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, k4i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 2, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 1, k4n = 0, ln = 0;
|
|
||||||
int k1m = 0, k2m = 0, k3m = 0, k4m = 3, lm = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
#pragma dvm array align([i][j][n][m] with A4[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align443";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A4, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
((n - ln) == (((n - ln) / k3n) * k3n)) &&
|
|
||||||
((m - lm) == (((m - lm) / k4m) * k4m)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((n - ln) / k3n) >= 0) &&
|
|
||||||
(((m - lm) / k4m) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2) &&
|
|
||||||
(((n - ln) / k3n) < BN3) &&
|
|
||||||
(((m - lm) / k4m) < BN4))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
nb = (n - ln) / k3n;
|
|
||||||
mb = (m - lm) / k4m;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] !=val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN444*/
|
|
||||||
/* ALIGN arrB[i][j][k][l] WITH arrA[i+2][j][k][l+3] shift*/
|
|
||||||
void align444()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j][n][m]
|
|
||||||
WITH arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm]*/
|
|
||||||
#define AN1 4
|
|
||||||
#define AN2 4
|
|
||||||
#define AN3 3
|
|
||||||
#define AN4 6
|
|
||||||
#define BN1 2
|
|
||||||
#define BN2 2
|
|
||||||
#define BN3 2
|
|
||||||
#define BN4 2
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, k4i = 0, li = 2;
|
|
||||||
int k1j = 0, k2j = 1, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 1, k4n = 0, ln = 0;
|
|
||||||
int k1m = 0, k2m = 0, k3m = 0, k4m = 1, lm = 3;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
#pragma dvm array align([i][j][n][m] with A4[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align444";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A4, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
((n - ln) == (((n - ln) / k3n) * k3n)) &&
|
|
||||||
((m - lm) == (((m - lm) / k4m) * k4m)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((n - ln) / k3n) >= 0) &&
|
|
||||||
(((m - lm) / k4m) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2) &&
|
|
||||||
(((n - ln) / k3n) < BN3) &&
|
|
||||||
(((m - lm) / k4m) < BN4))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
nb = (n - ln) / k3n;
|
|
||||||
mb = (m - lm) / k4m;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] !=val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN445*/
|
|
||||||
/* ALIGN arrB[i][j][k][l] WITH arrA[i][j][-k+4][-l+3] reverse*/
|
|
||||||
void align445()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j][n][m]
|
|
||||||
WITH arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm]*/
|
|
||||||
#define AN1 4
|
|
||||||
#define AN2 4
|
|
||||||
#define AN3 8
|
|
||||||
#define AN4 6
|
|
||||||
#define BN1 3
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 5
|
|
||||||
#define BN4 4
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, k4i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 1, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = -1, k4n = 0, ln = 4;
|
|
||||||
int k1m = 0, k2m = 0, k3m = 0, k4m = -1, lm = 3;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
#pragma dvm array align([i][j][n][m] with A4[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align445";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A4, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
((n - ln) == (((n - ln) / k3n) * k3n)) &&
|
|
||||||
((m - lm) == (((m - lm) / k4m) * k4m)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((n - ln) / k3n) >= 0) &&
|
|
||||||
(((m - lm) / k4m) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2) &&
|
|
||||||
(((n - ln) / k3n) < BN3) &&
|
|
||||||
(((m - lm) / k4m) < BN4))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
nb = (n - ln) / k3n;
|
|
||||||
mb = (m - lm) / k4m;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] !=val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN446*/
|
|
||||||
/* ALIGN arrB[i][j][][l] WITH arrA[i][j][2][l]
|
|
||||||
compression and replication*/
|
|
||||||
void align446()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i][j][][m] WITH arrA4[k1i*i+li][k2j*j+lj][ln][k4m*m+lm]*/
|
|
||||||
#define AN1 4
|
|
||||||
#define AN2 4
|
|
||||||
#define AN3 4
|
|
||||||
#define AN4 4
|
|
||||||
#define BN1 2
|
|
||||||
#define BN2 2
|
|
||||||
#define BN3 2
|
|
||||||
#define BN4 2
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, k4i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 1, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 0, k4n = 0, ln = 2;
|
|
||||||
int k1m = 0, k2m = 0, k3m = 0, k4m = 1, lm = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
#pragma dvm array align([i][j][][m] with A4[k1i*i+li][k2j*j+lj][ln][k4m*m+lm])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align446";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A4, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb, k)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if (n == ln)
|
|
||||||
{
|
|
||||||
for (k = 0; k < BN3; k++)
|
|
||||||
{
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
((m - lm) == (((m - lm) / k4m) * k4m)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((m - lm) / k4m) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2) &&
|
|
||||||
(((m - lm) / k4m) < BN4))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
nb = k;
|
|
||||||
mb = (m - lm) / k4m;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] !=val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN447*/
|
|
||||||
/* ALIGN arrB[][j][k][i] WITH arrA[i][j][][k]
|
|
||||||
compression and replication*/
|
|
||||||
void align447()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[][j][n][i] WITH arrA4[k1i*i+li][k2j*j+lj][][k3m*n+lm]*/
|
|
||||||
#define AN1 4
|
|
||||||
#define AN2 4
|
|
||||||
#define AN3 4
|
|
||||||
#define AN4 4
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
#define BN3 4
|
|
||||||
#define BN4 4
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, k4i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 1, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 0, k4n = 0, ln = 0;
|
|
||||||
int k1m = 0, k2m = 0, k3m = 1, k4m = 0, lm = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
#pragma dvm array align([][j][n][i] with A4[k1i*i+li][k2j*j+lj][][k3m*n+lm])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align447";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A4, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb, k)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
for (k = 0; k < BN1; k++)
|
|
||||||
{
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
((m - lm) == (((m - lm) / k3m) * k3m)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((m - lm) / k3m) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN4) &&
|
|
||||||
(((j - lj) / k2j) < BN2) &&
|
|
||||||
(((m - lm) / k3m) < BN3))
|
|
||||||
{
|
|
||||||
mb = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
ib = k;
|
|
||||||
nb = (m - lm) / k3m;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] !=val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN448*/
|
|
||||||
/* ALIGN arrB[][i][j][] WITH arrA[i][j][1][3]
|
|
||||||
compression and replication*/
|
|
||||||
void align448()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[][i][j][]
|
|
||||||
WITH arrA[k1i*i+li][k2j*j+lj][ln][lm]*/
|
|
||||||
#define AN1 4
|
|
||||||
#define AN2 4
|
|
||||||
#define AN3 4
|
|
||||||
#define AN4 6
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
#define BN3 4
|
|
||||||
#define BN4 4
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, k4i = 0, li = 0;
|
|
||||||
int k1j = 0, k2j = 1, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 0, k4n = 0, ln = 1;
|
|
||||||
int k1m = 0, k2m = 0, k3m = 0, k4m = 0, lm = 3;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
#pragma dvm array align([][i][j][] with A4[k1i*i+li][k2j*j+lj][ln][lm])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "align448";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erri, s)
|
|
||||||
#pragma dvm region local(A4, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb, k, l)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((n == ln) && (m == lm))
|
|
||||||
{
|
|
||||||
for (k = 0; k < BN1; k++)
|
|
||||||
for (l = 0; l < BN4; l++)
|
|
||||||
{
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN2) &&
|
|
||||||
(((j - lj) / k2j) < BN3))
|
|
||||||
{
|
|
||||||
ib = k;
|
|
||||||
jb = (i - li) / k1i;
|
|
||||||
nb = (j - lj) / k2j;
|
|
||||||
mb = l;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erri), sum(s))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s = s + B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] !=val)
|
|
||||||
if (erri > val) erri = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if ((erri == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,422 +0,0 @@
|
|||||||
/* ALIGNDYN11
|
|
||||||
TESTING align CLAUSE for dynamic arrays*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void align111();
|
|
||||||
static void align1111();
|
|
||||||
static void align1112();
|
|
||||||
static void align112();
|
|
||||||
static void align113();
|
|
||||||
static void align114();
|
|
||||||
static void align115();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF ALIGNDYN11 ===================\n");
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i] normal*/
|
|
||||||
align111();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i] small array*/
|
|
||||||
align1111();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2*i+3] small array*/
|
|
||||||
align1112();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i+4] shift along i*/
|
|
||||||
align112();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[-i+8] reverse on i*/
|
|
||||||
// align113();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2*i+8] stretching along i*/
|
|
||||||
align114();
|
|
||||||
/* ALIGN arrB[] WITH arrA[]*/
|
|
||||||
align115();
|
|
||||||
printf("=== END OF ALIGNDYN11 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN111*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i] normal*/
|
|
||||||
void align111()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
int AN1 = 8;
|
|
||||||
int BN1 = 8;
|
|
||||||
int k1i = 1;
|
|
||||||
int k2i = 0;
|
|
||||||
int li = 0;
|
|
||||||
char tname[] = "align111 ";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
#pragma dvm array
|
|
||||||
int *B1;
|
|
||||||
|
|
||||||
/* create arrays */
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
B1 = malloc(BN1 * sizeof(int));
|
|
||||||
#pragma dvm realign(B1[i] with A1[k1i * i + li])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(B1);
|
|
||||||
free(A1);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN1111*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i] small array*/
|
|
||||||
void align1111()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
int AN1 = 5;
|
|
||||||
int BN1 = 2;
|
|
||||||
int k1i = 1;
|
|
||||||
int k2i = 0;
|
|
||||||
int li = 0;
|
|
||||||
char tname[] = "align1111";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
#pragma dvm array
|
|
||||||
int *B1;
|
|
||||||
|
|
||||||
/* create arrays */
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
B1 = malloc(BN1 * sizeof(int));
|
|
||||||
#pragma dvm realign(B1[i] with A1[k1i * i + li])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(B1);
|
|
||||||
free(A1);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN1112*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2*i+1] small array*/
|
|
||||||
void align1112()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
int AN1 = 5;
|
|
||||||
int BN1 = 2;
|
|
||||||
int k1i = 2;
|
|
||||||
int k2i = 0;
|
|
||||||
int li = 1;
|
|
||||||
char tname[] = "align1112";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
#pragma dvm array
|
|
||||||
int *B1;
|
|
||||||
|
|
||||||
/* create arrays */
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
B1 = malloc(BN1 * sizeof(int));
|
|
||||||
#pragma dvm realign(B1[i] with A1[k1i * i + li])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(B1);
|
|
||||||
free(A1);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN112*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i+4] shift along i*/
|
|
||||||
void align112()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
int AN1 = 8;
|
|
||||||
int BN1 = 4;
|
|
||||||
int k1i = 1;
|
|
||||||
int k2i = 0;
|
|
||||||
int li = 4;
|
|
||||||
char tname[] = "align112 ";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
#pragma dvm array
|
|
||||||
int *B1;
|
|
||||||
|
|
||||||
/* create arrays */
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
B1 = malloc(BN1 * sizeof(int));
|
|
||||||
#pragma dvm realign(B1[i] with A1[k1i * i + li])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(B1);
|
|
||||||
free(A1);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN113*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[-i+8] reverse on i*/
|
|
||||||
void align113()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
int AN1 = 8;
|
|
||||||
int BN1 = 8;
|
|
||||||
int k1i = -1;
|
|
||||||
int k2i = 0;
|
|
||||||
int li = 8;
|
|
||||||
char tname[] = "align113 ";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
#pragma dvm array
|
|
||||||
int *B1;
|
|
||||||
|
|
||||||
/* create arrays */
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
B1 = malloc(BN1 * sizeof(int));
|
|
||||||
#pragma dvm realign(B1[i] with A1[k1i * i + li])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(B1);
|
|
||||||
free(A1);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN114*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2*i+8] stretching along i*/
|
|
||||||
void align114()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li] */
|
|
||||||
int AN1 = 24;
|
|
||||||
int BN1 = 8;
|
|
||||||
int k1i = 2;
|
|
||||||
int k2i = 0;
|
|
||||||
int li = 8;
|
|
||||||
char tname[] = "align114 ";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
#pragma dvm array
|
|
||||||
int *B1;
|
|
||||||
|
|
||||||
/* create arrays */
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
B1 = malloc(BN1 * sizeof(int));
|
|
||||||
#pragma dvm realign(B1[i] with A1[k1i * i + li])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erri)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
if (erri > i) erri = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(B1);
|
|
||||||
free(A1);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------ALIGN115*/
|
|
||||||
/* ALIGN arrB[] WITH arrA[]*/
|
|
||||||
void align115()
|
|
||||||
{
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i * i + li]*/
|
|
||||||
int AN1 = 24;
|
|
||||||
int BN1 = 8;
|
|
||||||
int k1i = 0;
|
|
||||||
int k2i = 0;
|
|
||||||
int li = 0;
|
|
||||||
char tname[] = "align115 ";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B1);
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
B1 = malloc(BN1 * sizeof(int));
|
|
||||||
#pragma dvm realign(B1[] with A1[])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = i;
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), private(j)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < BN1; j++)
|
|
||||||
{
|
|
||||||
if (B1[j] != j)
|
|
||||||
if (erri > j) erri = j;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(B1);
|
|
||||||
free(A1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,297 +0,0 @@
|
|||||||
/* DISTR1
|
|
||||||
TESTING distribute and redistribute CLAUSE*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void distr11();
|
|
||||||
static void distr12();
|
|
||||||
static void distr13();
|
|
||||||
static void distr14();
|
|
||||||
static void distr21();
|
|
||||||
static void distr22();
|
|
||||||
static void distr23();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTR1 ===================\n");
|
|
||||||
/* DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[*]*/
|
|
||||||
distr11();
|
|
||||||
/* DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[BLOCK]*/
|
|
||||||
distr12();
|
|
||||||
/* DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[*] small array*/
|
|
||||||
distr13();
|
|
||||||
/* DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[BLOCK] small array*/
|
|
||||||
distr14();
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][*] REDISTRIBUTE arrA2[*][BLOCK]*/
|
|
||||||
distr21();
|
|
||||||
/* DISTRIBUTE arrA2[*][BLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
distr22();
|
|
||||||
/* DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[*][BLOCK]*/
|
|
||||||
distr23();
|
|
||||||
printf("=== END OF DISTR1 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR11*/
|
|
||||||
/* DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[*]*/
|
|
||||||
void distr11()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
char tname[] = "distr11";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR12*/
|
|
||||||
/* DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[BLOCK]*/
|
|
||||||
void distr12()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
float A1[AN1];
|
|
||||||
char tname[] = "distr12";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR13*/
|
|
||||||
/* DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[*] small array*/
|
|
||||||
void distr13()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
double A1[AN1];
|
|
||||||
char tname[] = "distr13";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR14*/
|
|
||||||
/* DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[BLOCK] small array*/
|
|
||||||
void distr14()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
long A1[AN1];
|
|
||||||
char tname[] = "distr14";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR21*/
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][*] REDISTRIBUTE arrA2[*][BLOCK]*/
|
|
||||||
void distr21()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
char tname[] = "distr21";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[*][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR22*/
|
|
||||||
/* DISTRIBUTE arrA2[*][BLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
void distr22()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
float A2[AN1][AN2];
|
|
||||||
char tname[] = "distr22";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR23*/
|
|
||||||
/* DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[*][BLOCK]*/
|
|
||||||
void distr23()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*]
|
|
||||||
double A2[AN1][AN2];
|
|
||||||
char tname[] = "distr23";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[*][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,257 +0,0 @@
|
|||||||
/* DISTR2
|
|
||||||
TESTING distribute and redistribute CLAUSE*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void distr24();
|
|
||||||
static void distr32();
|
|
||||||
static void distr33();
|
|
||||||
static void distr41();
|
|
||||||
static void distr42();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, n, m, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTR2 ===================\n");
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][BLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
distr24();
|
|
||||||
/* DISTRIBUTE arrA3[BLOCK][*][BLOCK] REDISTRIBUTE arrA3[*][BLOCK][BLOCK] */
|
|
||||||
distr32();
|
|
||||||
/* DISTRIBUTE arrA3[BLOCK][*][BLOCK] REDISTRIBUTE arrA3[*][BLOCK][*] */
|
|
||||||
distr33();
|
|
||||||
/* DISTRIBUTE arrA4[*][*][BLOCK][BLOCK] REDISTRIBUTE arrA4[*][*][*][*]*/
|
|
||||||
distr41();
|
|
||||||
/* DISTRIBUTE arrA4[BLOCK][*][BLOCK][*] REDISTRIBUTE arrA4[*][BLOCK][BLOCK][*]*/
|
|
||||||
distr42();
|
|
||||||
printf("=== END OF DISTR2 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR24*/
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][BLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
void distr24()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
char tname[] = "distr24";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR32*/
|
|
||||||
/* DISTRIBUTE arrA3[BLOCK][*][BLOCK] REDISTRIBUTE arrA3[*][BLOCK][BLOCK]*/
|
|
||||||
void distr32()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block]
|
|
||||||
float A3[AN1][AN2][AN3];
|
|
||||||
char tname[] = "distr32";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A3[*][block][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
if (A3[i][j][n] != i * NL / 10 + j * NL / 100 + n)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR33*/
|
|
||||||
/* DISTRIBUTE arrA3[BLOCK][*][ BLOCK] REDISTRIBUTE arrA3[*][BLOCK][*] */
|
|
||||||
void distr33()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block]
|
|
||||||
double A3[AN1][AN2][AN3];
|
|
||||||
char tname[] = "distr33";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A3[*][block][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
if (A3[i][j][n] != i * NL / 10 + j * NL / 100 + n)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR41*/
|
|
||||||
/* DISTRIBUTE arrA4[*][*][BLOCK][BLOCK] REDISTRIBUTE arrA4[*][*][*][*]*/
|
|
||||||
void distr41()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 5
|
|
||||||
#define AN4 5
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
char tname[] = "distr41";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A4[*][*][*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
if (A4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR42*/
|
|
||||||
/* DISTRIBUTE arrA4[BLOCK][*][BLOCK][*] REDISTRIBUTE arrA4[*][BLOCK][BLOCK][*]*/
|
|
||||||
void distr42()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 5
|
|
||||||
#define AN4 5
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block][*]
|
|
||||||
float A4[AN1][AN2][AN3][AN4];
|
|
||||||
char tname[] = "distr42";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A4[*][block][block][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
if (A4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,125 +0,0 @@
|
|||||||
/* DISTR3
|
|
||||||
TESTING distribute and redistribute CLAUSE*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void distr31();
|
|
||||||
static void distr43();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, n, m, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTR3 ===================\n");
|
|
||||||
/* DISTRIBUTE arrA3[BLOCK][BLOCK][BLOCK] REDISTRIBUTE arrA3[*][*][*]*/
|
|
||||||
distr31();
|
|
||||||
/* DISTRIBUTE arrA4[BLOCK][*][BLOCK][BLOCK] REDISTRIBUTE arrA4[BLOCK][BLOCK][BLOCK][*]*/
|
|
||||||
distr43();
|
|
||||||
printf("=== END OF DISTR3 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR31*/
|
|
||||||
/* DISTRIBUTE arrA3[BLOCK][BLOCK][BLOCK] REDISTRIBUTE arrA3[*][*][*]*/
|
|
||||||
void distr31()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
char tname[] = "distr31";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A3[*][*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
if (A3[i][j][n] != i * NL / 10 + j * NL / 100 + n)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR43*/
|
|
||||||
/* DISTRIBUTE arrA4[BLOCK][*][BLOCK][BLOCK] REDISTRIBUTE arrA4[BLOCK][BLOCK][BLOCK][*]*/
|
|
||||||
void distr43()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 5
|
|
||||||
#define AN4 5
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block][block]
|
|
||||||
double A4[AN1][AN2][AN3][AN4];
|
|
||||||
char tname[] = "distr43";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A4[block][block][block][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
if (A4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,229 +0,0 @@
|
|||||||
/* DISTR4
|
|
||||||
TESTING distribute and redistribute CLAUSE*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void distr44();
|
|
||||||
static void distr45();
|
|
||||||
static void distr46();
|
|
||||||
static void distr47();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, n, m, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTR4 ===================\n");
|
|
||||||
/* DISTRIBUTE arrA4[*][*][*][*] REDISTRIBUTE arrA4[BLOCK][BLOCK][BLOCK][BLOCK]*/
|
|
||||||
distr44();
|
|
||||||
/* DISTRIBUTE arrA4[BLOCK][BLOCK][BLOCK][BLOCK] REDISTRIBUTE arrA4[*][*][*][*]*/
|
|
||||||
distr45();
|
|
||||||
/* DISTRIBUTE arrA4[*][*][*][*] REDISTRIBUTE arrA4[BLOCK][BLOCK][BLOCK][BLOCK]
|
|
||||||
small array*/
|
|
||||||
distr46();
|
|
||||||
/* DISTRIBUTE arrA4[BLOCK][BLOCK][BLOCK][BLOCK] REDISTRIBUTE arrA4[*][*][*][*]
|
|
||||||
small array*/
|
|
||||||
distr47();
|
|
||||||
printf("=== END OF DISTR4 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR44*/
|
|
||||||
/* DISTRIBUTE arrA4[*][*][*][*] REDISTRIBUTE arrA4[BLOCK][BLOCK][BLOCK][BLOCK]*/
|
|
||||||
void distr44()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
#define AN4 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
char tname[] = "distr44";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A4[block][block][block][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
if (A4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR45*/
|
|
||||||
/* DISTRIBUTE arrA4[BLOCK][BLOCK][BLOCK][BLOCK] REDISTRIBUTE arrA4[*][*][*][*]*/
|
|
||||||
void distr45()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 5
|
|
||||||
#define AN4 5
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
float A4[AN1][AN2][AN3][AN4];
|
|
||||||
char tname[] = "distr45";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A4[*][*][*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
if (A4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR46*/
|
|
||||||
/* DISTRIBUTE arrA4[*][*][*][*] REDISTRIBUTE arrA4[BLOCK][BLOCK][BLOCK][BLOCK]
|
|
||||||
small array*/
|
|
||||||
void distr46()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 4
|
|
||||||
#define AN3 3
|
|
||||||
#define AN4 2
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
double A4[AN1][AN2][AN3][AN4];
|
|
||||||
char tname[] = "distr46";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A4[block][block][block][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
if (A4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR47*/
|
|
||||||
/* DISTRIBUTE arrA4[BLOCK][BLOCK][BLOCK][BLOCK] REDISTRIBUTE arrA4[*][*][*][*]
|
|
||||||
small array*/
|
|
||||||
void distr47()
|
|
||||||
{
|
|
||||||
#define AN1 1
|
|
||||||
#define AN2 2
|
|
||||||
#define AN3 3
|
|
||||||
#define AN4 4
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
char tname[] = "distr47";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A4[*][*][*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
if (A4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,386 +0,0 @@
|
|||||||
/* DISTRGEN1
|
|
||||||
TESTING distribute and redistribute CLAUSE
|
|
||||||
for arrays distributed with GEN-block*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
#ifndef _DVMH
|
|
||||||
#define dvmh_get_num_procs(X) 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void distrg10();
|
|
||||||
static void distrg11();
|
|
||||||
static void distrg12();
|
|
||||||
static void distrg13();
|
|
||||||
static void distrg14();
|
|
||||||
static void distrg15();
|
|
||||||
static void distrg161();
|
|
||||||
static void distrg162();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTRGEN1 ===================\n");
|
|
||||||
/* DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[GENBLOCK]*/
|
|
||||||
distrg10();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[GENBLOCK] REDISTRIBUTE arrA1[BLOCK]*/
|
|
||||||
distrg11();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[GENBLOCK] REDISTRIBUTE arrA1[*]*/
|
|
||||||
distrg12();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[*]*/
|
|
||||||
distrg13();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[BLOCK]*/
|
|
||||||
distrg14();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[GENBLOCK]*/
|
|
||||||
distrg15();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[GENBLOCK] REDISTRIBUTE arrA1[GENBLOCK]
|
|
||||||
with 0 in BS.1*/
|
|
||||||
distrg161();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[GENBLOCK] REDISTRIBUTE arrA1[GENBLOCK]
|
|
||||||
with 0 in BS.2*/
|
|
||||||
distrg162();
|
|
||||||
|
|
||||||
printf("=== END OF DISTRGEN1 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int myRand() {
|
|
||||||
const unsigned a = 1103515245U;
|
|
||||||
const unsigned c = 12345U;
|
|
||||||
const unsigned m = ((unsigned)RAND_MAX) + 1U;
|
|
||||||
static unsigned prev = 5;
|
|
||||||
prev = (a * prev + c) % m;
|
|
||||||
return prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void genBlocksAxis(const int procCount, const int weight, const int withoutZero, int **blocks) {
|
|
||||||
*blocks = (int *)malloc(procCount * sizeof(int));
|
|
||||||
int restWeight = weight, i, zeroind = -1;
|
|
||||||
if (!withoutZero && procCount != 1)
|
|
||||||
zeroind = myRand() % (procCount - 1);
|
|
||||||
for (i = 0; i < (procCount - 1); i++) {
|
|
||||||
if (i == zeroind)
|
|
||||||
(*blocks)[i] = 0;
|
|
||||||
else
|
|
||||||
(*blocks)[i] = 1 * withoutZero + myRand() % (restWeight - (procCount - (i + 1)));
|
|
||||||
restWeight -= (*blocks)[i];
|
|
||||||
}
|
|
||||||
(*blocks)[i] = restWeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR10*/
|
|
||||||
/* DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[GENBLOCK]*/
|
|
||||||
void distrg10()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
int* BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS);
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
char tname[] = "distrg10";
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR11*/
|
|
||||||
/* DISTRIBUTE arrA1[GENBLOCK] REDISTRIBUTE arrA1[BLOCK]*/
|
|
||||||
void distrg11()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
int *BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS);
|
|
||||||
#pragma dvm array distribute[genblock(BS)]
|
|
||||||
int A1[AN1];
|
|
||||||
char tname[] = "distrg11";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR12*/
|
|
||||||
/* DISTRIBUTE arrA1[GENBLOCK] REDISTRIBUTE arrA1[*]*/
|
|
||||||
void distrg12()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
int *BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS);
|
|
||||||
#pragma dvm array distribute[genblock(BS)]
|
|
||||||
int A1[AN1];
|
|
||||||
char tname[] = "distrg12";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR13*/
|
|
||||||
/* DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[*]*/
|
|
||||||
void distrg13()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
char tname[] = "distrg13";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR14*/
|
|
||||||
/* DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[BLOCK]*/
|
|
||||||
void distrg14()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int A1[AN1];
|
|
||||||
char tname[] = "distrg14";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR15*/
|
|
||||||
/* DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[GENBLOCK]*/
|
|
||||||
void distrg15()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
int *BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS);
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int A1[AN1];
|
|
||||||
char tname[] = "distrg15";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR161*/
|
|
||||||
/* DISTRIBUTE arrA1[GENBLOCK] REDISTRIBUTE arrA1[GENBLOCK]
|
|
||||||
wtih 0 in BS.1*/
|
|
||||||
/*{0, 8} - works, {8, 0} - cycle*/
|
|
||||||
void distrg161()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
int *BS1, *BS2;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS2);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 0, &BS1);
|
|
||||||
#pragma dvm array distribute[genblock(BS1)]
|
|
||||||
int A1[AN1];
|
|
||||||
char tname[] = "distrg161";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1);
|
|
||||||
free(BS2);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR162*/
|
|
||||||
/* DISTRIBUTE arrA1[GENBLOCK] REDISTRIBUTE arrA1[GENBLOCK]
|
|
||||||
wtih 0 in BS.2*/
|
|
||||||
void distrg162()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
int *BS1, *BS2;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 0, &BS2);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1);
|
|
||||||
#pragma dvm array distribute[genblock(BS1)]
|
|
||||||
int A1[AN1];
|
|
||||||
char tname[] = "distrg162";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1);
|
|
||||||
free(BS2);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,648 +0,0 @@
|
|||||||
/* DISTRGEN2
|
|
||||||
TESTING distribute and redistribute CLAUSE
|
|
||||||
for arrays distributed with GEN-block*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
#ifndef _DVMH
|
|
||||||
#define dvmh_get_num_procs(X) 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void distrg21();
|
|
||||||
static void distrg22();
|
|
||||||
static void distrg23();
|
|
||||||
static void distrg24();
|
|
||||||
static void distrg25();
|
|
||||||
static void distrg26();
|
|
||||||
static void distrg261();
|
|
||||||
static void distrg27();
|
|
||||||
static void distrg28();
|
|
||||||
static void distrg29();
|
|
||||||
static void distrg210();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTRGEN2 ===================\n");
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][*] REDISTRIBUTE arrA2[*][GENBLOCK]*/
|
|
||||||
distrg21();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA2[*][BLOCK] REDISTRIBUTE arrA2[GENBLOCK][*]*/
|
|
||||||
distrg22();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA2[*][GENBLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
distrg23();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[GENBLOCK][*]*/
|
|
||||||
distrg24();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK] other blocks*/
|
|
||||||
distrg25();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]*/
|
|
||||||
distrg26();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA2[GEN_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][BLOCK]*/
|
|
||||||
distrg27();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][BLOCK]*/
|
|
||||||
distrg28();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[*][*]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]*/
|
|
||||||
distrg29();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA2[GEN_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA2[*][*]
|
|
||||||
REDISTRIBUTE arrA2[*][GEN_BLOCK]*/
|
|
||||||
distrg210();
|
|
||||||
|
|
||||||
printf("=== END OF DISTRGEN2 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int myRand() {
|
|
||||||
const unsigned a = 1103515245U;
|
|
||||||
const unsigned c = 12345U;
|
|
||||||
const unsigned m = ((unsigned)RAND_MAX) + 1U;
|
|
||||||
static unsigned prev = 5;
|
|
||||||
prev = (a * prev + c) % m;
|
|
||||||
return prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void genBlocksAxis(const int procCount, const int weight, const int withoutZero, int **blocks) {
|
|
||||||
*blocks = (int *)malloc(procCount * sizeof(int));
|
|
||||||
int restWeight = weight, i, zeroind = -1;
|
|
||||||
if (!withoutZero && procCount != 1)
|
|
||||||
zeroind = myRand() % (procCount - 1);
|
|
||||||
for (i = 0; i < (procCount - 1); i++) {
|
|
||||||
if (i == zeroind)
|
|
||||||
(*blocks)[i] = 0;
|
|
||||||
else
|
|
||||||
(*blocks)[i] = 1 * withoutZero + myRand() % (restWeight - (procCount - (i + 1)));
|
|
||||||
restWeight -= (*blocks)[i];
|
|
||||||
}
|
|
||||||
(*blocks)[i] = restWeight;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------DISTR21*/
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][*] REDISTRIBUTE arrA2[*][GENBLOCK]*/
|
|
||||||
void distrg21()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
int *BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN2, 1, &BS);
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int A1[AN1][AN2];
|
|
||||||
char tname[] = "distrg21";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A1[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A1[i][j] = i*NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[*][genblock(BS)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A1[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A1[i][j] != i*NL + j)
|
|
||||||
erri = Min(erri, i*NL/10 + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR22*/
|
|
||||||
/* DISTRIBUTE arrA2[*][BLOCK] REDISTRIBUTE arrA2[GENBLOCK][*]*/
|
|
||||||
void distrg22()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
int *BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS);
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int A1[AN1][AN2];
|
|
||||||
char tname[] = "distrg22";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A1[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A1[i][j] = i*NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS)][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A1[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A1[i][j] != i*NL + j)
|
|
||||||
erri = Min(erri, i*NL/10 + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR23*/
|
|
||||||
/* DISTRIBUTE arrA2[*][GENBLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
void distrg23()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
int *BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN2, 1, &BS);
|
|
||||||
#pragma dvm array distribute[*][genblock(BS)]
|
|
||||||
int A1[AN1][AN2];
|
|
||||||
char tname[] = "distrg23";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A1[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A1[i][j] = i*NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A1[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A1[i][j] != i*NL + j)
|
|
||||||
erri = Min(erri, i*NL/10 + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR24*/
|
|
||||||
/* DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[GENBLOCK][*]*/
|
|
||||||
void distrg24()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
int *BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS);
|
|
||||||
#pragma dvm array distribute[*][*]
|
|
||||||
int A1[AN1][AN2];
|
|
||||||
char tname[] = "distrg24";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A1[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A1[i][j] = i*NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS)][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A1[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A1[i][j] != i*NL + j)
|
|
||||||
erri = Min(erri, i*NL/10 + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR25*/
|
|
||||||
/* DISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK] other blocks*/
|
|
||||||
void distrg25()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 12
|
|
||||||
int *BS1i, *BS1j, *BS2i, *BS2j;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS2i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS2j);
|
|
||||||
//int BS1i[2] = {5, 5}, BS1j[2] = {7, 5};
|
|
||||||
//int BS2i[2] = {6, 4}, BS2j[2] = {5, 7};
|
|
||||||
#pragma dvm array distribute[genblock(BS1i)][genblock(BS1j)]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
char tname[] = "distrg25";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = 1;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += i*NL+j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS2i)][genblock(BS2j)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i*NL+j + 1)
|
|
||||||
erri = Min(erri, i*NL/10+j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS1j);
|
|
||||||
free(BS2i);
|
|
||||||
free(BS2j);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR26*/
|
|
||||||
/* DISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]*/
|
|
||||||
void distrg26()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 12
|
|
||||||
int *BS1i, *BS1j, *BS2i, *BS2j;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS2i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS2j);
|
|
||||||
#pragma dvm array distribute[genblock(BS1i)][genblock(BS1j)]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
char tname[] = "distrg26";
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = 1;
|
|
||||||
}
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += i*NL+j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[block][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS2i)][genblock(BS2j)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i*NL+j + 3)
|
|
||||||
erri = Min(erri, i*NL/10 + j + 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS1j);
|
|
||||||
free(BS2i);
|
|
||||||
free(BS2j);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR27*/
|
|
||||||
/* DISTRIBUTE arrA2[GEN_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][BLOCK]*/
|
|
||||||
|
|
||||||
void distrg27()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 12
|
|
||||||
int *BS1i, *BS2j, *BS3i;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS3i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS2j);
|
|
||||||
#pragma dvm array distribute[genblock(BS1i)][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
char tname[] = "distrg27";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = 1;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += i*NL+j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[block][genblock(BS2j)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS3i)][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i*NL+j + 3)
|
|
||||||
erri = Min(erri, i*NL/10+j + 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS3i);
|
|
||||||
free(BS2j);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR28*/
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][BLOCK]*/
|
|
||||||
void distrg28()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 12
|
|
||||||
int *BS1j, *BS2i;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS2i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
#pragma dvm array distribute[block][genblock(BS1j)]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
char tname[] = "distrg28";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = 1;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += i*NL+j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[block][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS2i)][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i*NL+j + 3)
|
|
||||||
erri = Min(erri, i*NL/10+j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS2i);
|
|
||||||
free(BS1j);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR29*/
|
|
||||||
/* DISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[*][*]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]*/
|
|
||||||
void distrg29()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 12
|
|
||||||
int *BS1i, *BS1j, *BS2i, *BS2j;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS2i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS2j);
|
|
||||||
#pragma dvm array distribute[genblock(BS1i)][genblock(BS1j)]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
char tname[] = "distrg29";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = 1;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += i*NL+j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS2i)][genblock(BS2j)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i*NL+j + 3)
|
|
||||||
erri = Min(erri, i*NL/10+j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS1j);
|
|
||||||
free(BS2i);
|
|
||||||
free(BS2j);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR210*/
|
|
||||||
/* DISTRIBUTE arrA2[GEN_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA2[*][*]
|
|
||||||
REDISTRIBUTE arrA2[*][GEN_BLOCK]*/
|
|
||||||
void distrg210()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 12
|
|
||||||
int *BS1i, *BS2i;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN2, 1, &BS2i);
|
|
||||||
#pragma dvm array distribute[genblock(BS1i)][*]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
char tname[] = "distrg210";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = 1;
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += i*NL+j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[*][genblock(BS2i)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i*NL+j + 3)
|
|
||||||
erri = Min(erri, i*NL/10+j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS2i);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,217 +0,0 @@
|
|||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
#ifndef _DVMH
|
|
||||||
#define dvmh_get_num_procs(X) 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void distr11();
|
|
||||||
static void distr12();
|
|
||||||
static void distr13();
|
|
||||||
static void distr14();
|
|
||||||
static void distr15();
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, k;
|
|
||||||
|
|
||||||
int main(int an, char **as) {
|
|
||||||
printf("=== START OF DELDISTR1 ===================\n");
|
|
||||||
distr11();
|
|
||||||
distr12();
|
|
||||||
distr13();
|
|
||||||
distr14();
|
|
||||||
distr15();
|
|
||||||
printf("=== END OF DELDISTR1 ===================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int myRand() {
|
|
||||||
const unsigned a = 1103515245U;
|
|
||||||
const unsigned c = 12345U;
|
|
||||||
const unsigned m = ((unsigned)RAND_MAX) + 1U;
|
|
||||||
static unsigned prev = 5;
|
|
||||||
prev = (a * prev + c) % m;
|
|
||||||
return prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void genBlocksAxis(const int procCount, const int weight, const int withoutZero, int **blocks) {
|
|
||||||
*blocks = (int *)malloc(procCount * sizeof(int));
|
|
||||||
int restWeight = weight, i, zeroind = -1;
|
|
||||||
if (!withoutZero && procCount != 1)
|
|
||||||
zeroind = myRand() % (procCount - 1);
|
|
||||||
for (i = 0; i < (procCount - 1); i++) {
|
|
||||||
if (i == zeroind)
|
|
||||||
(*blocks)[i] = 0;
|
|
||||||
else
|
|
||||||
(*blocks)[i] = 1 * withoutZero + myRand() % (restWeight - (procCount - (i + 1)));
|
|
||||||
restWeight -= (*blocks)[i];
|
|
||||||
}
|
|
||||||
(*blocks)[i] = restWeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
void distr11()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distr11";
|
|
||||||
erri = ER;
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
void distr12()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distr12";
|
|
||||||
erri = ER;
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++) {
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
void distr13()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
int* BS1;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1);
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distr13";
|
|
||||||
erri = ER;
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS1)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
void distr14()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
double wb1[8] = {1.0, 2., 2., 3.0, 1., 1., 1.5, 2.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distr14";
|
|
||||||
erri = ER;
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb1, 8)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
void distr15()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
int m1 = 4;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distr15";
|
|
||||||
erri = ER;
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[multblock(m1)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
void ansyes(const char name[]) {
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
void ansno(const char name[]) {
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,398 +0,0 @@
|
|||||||
/* DISTRMIX1
|
|
||||||
Testing DISTRIBUTE and REDISTRIBUTE directive
|
|
||||||
GEN_BLOCK, WGT_BLOCK, MULT_BLOCK distributions
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
#ifndef _DVMH
|
|
||||||
#define dvmh_get_num_procs(X) 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void distrmix11();
|
|
||||||
static void distrmix12();
|
|
||||||
static void distrmix13();
|
|
||||||
static void distrmix14();
|
|
||||||
static void distrmix15();
|
|
||||||
static void distrmix16();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, errib, i, j, k, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTRMIX1 ===================\n");
|
|
||||||
/* 11 DISTRIBUTE arrA1[MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[MULT_BLOCK]*/
|
|
||||||
distrmix11();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA3[GEN_BLOCK][GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK][GEN_BLOCK] other blocks*/
|
|
||||||
distrmix12();
|
|
||||||
/* DISTRIBUTE arrA3[GEN_BLOCK][GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK][GEN_BLOCK] other blocks*/
|
|
||||||
distrmix13();
|
|
||||||
/* DISTRIBUTE arrA3[GEN_BLOCK][GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK][GEN_BLOCK] other blocks*/
|
|
||||||
distrmix14();
|
|
||||||
/* DISTRIBUTE arrA3[GEN_BLOCK][GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK][GEN_BLOCK] other blocks*/
|
|
||||||
distrmix15();
|
|
||||||
/* DISTRIBUTE arrA3[GEN_BLOCK][GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK][GEN_BLOCK] other blocks*/
|
|
||||||
distrmix16();
|
|
||||||
|
|
||||||
printf("=== END OF DISTRMIX1 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int myRand() {
|
|
||||||
const unsigned a = 1103515245U;
|
|
||||||
const unsigned c = 12345U;
|
|
||||||
const unsigned m = ((unsigned)RAND_MAX) + 1U;
|
|
||||||
static unsigned prev = 5;
|
|
||||||
prev = (a * prev + c) % m;
|
|
||||||
return prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void genBlocksAxis(const int procCount, const int weight, const int withoutZero, int **blocks) {
|
|
||||||
*blocks = (int *)malloc(procCount * sizeof(int));
|
|
||||||
int restWeight = weight, i, zeroind = -1;
|
|
||||||
if (!withoutZero && procCount > 1)
|
|
||||||
zeroind = myRand() % (procCount - 1);
|
|
||||||
for (i = 0; i < (procCount - 1); i++) {
|
|
||||||
if (i == zeroind)
|
|
||||||
(*blocks)[i] = 0;
|
|
||||||
else
|
|
||||||
(*blocks)[i] = 1 * withoutZero + myRand() % (restWeight - (procCount - (i + 1)));
|
|
||||||
restWeight -= (*blocks)[i];
|
|
||||||
}
|
|
||||||
(*blocks)[i] = restWeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR11*/
|
|
||||||
/* 11 DISTRIBUTE arrA1[MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[MULT_BLOCK]*/
|
|
||||||
void distrmix11()
|
|
||||||
{
|
|
||||||
#define AN1 64
|
|
||||||
int m1 = 4, m2 = 2;
|
|
||||||
double wb[7] = {2.1, 4.6, 3., 2.0, 1.5, 2., 3.1};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrmix11";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[multblock(m1)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb, 7)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i + 1)
|
|
||||||
erri = Min(erri, i + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR12*/
|
|
||||||
/* DISTRIBUTE arrA1[WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[WGT_BLOCK] */
|
|
||||||
void distrmix12()
|
|
||||||
{
|
|
||||||
#define AN1 75
|
|
||||||
int m1 = 15;
|
|
||||||
double wb1[6] = {3.1, 1.6, 2., 3.0, 0.5, 2.};
|
|
||||||
double wb2[8] = {1.5, 2.1, 2.6, 4.2, 2.5, 3.5, 1., 2.1};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrmix12";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb1, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[multblock(m1)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb2, 8)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i + 1)
|
|
||||||
erri = Min(erri, i + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR13*/
|
|
||||||
/* DISTRIBUTE arrA1[MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[MULT_BLOCK] */
|
|
||||||
void distrmix13()
|
|
||||||
{
|
|
||||||
#define AN1 30
|
|
||||||
int m1 = 5, m2 = 3;
|
|
||||||
int* BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS);
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrmix13";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[multblock(m1)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i + 1)
|
|
||||||
erri = Min(erri, i + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR14*/
|
|
||||||
/* DISTRIBUTE arrA1[GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[GEN_BLOCK] */
|
|
||||||
void distrmix14()
|
|
||||||
{
|
|
||||||
#define AN1 35
|
|
||||||
int m1 = 7;
|
|
||||||
int* BS1, * BS2;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS2);
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrmix14";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS1)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[multblock(m1)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i + 1)
|
|
||||||
erri = Min(erri, i + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1);
|
|
||||||
free(BS2);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR15*/
|
|
||||||
/* DISTRIBUTE arrA1[WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[WGT_BLOCK] */
|
|
||||||
void distrmix15()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
double wb1[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
double wb2[5] = {2.0, 1., 2., 2.0, 2.};
|
|
||||||
int* BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS);
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrmix15";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb1, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb2, 5)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i + 1)
|
|
||||||
erri = Min(erri, i + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR16*/
|
|
||||||
/* DISTRIBUTE arrA1[GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA1[GEN_BLOCK]*/
|
|
||||||
void distrmix16()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
double wb[7] = {1.0, 2., 2., 3.0, 1., 1., 0.5};
|
|
||||||
int* BS1, * BS2;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS2);
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrmix16";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS1)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb, 7)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A1[genblock(BS2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i + 1)
|
|
||||||
erri = Min(erri, i + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1);
|
|
||||||
free(BS2);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,901 +0,0 @@
|
|||||||
/* DISTRMIX2
|
|
||||||
Testing DISTRIBUTE and REDISTRIBUTE directive
|
|
||||||
GEN_BLOCK, WGT_BLOCK, MULT_BLOCK distributions
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
#ifndef _DVMH
|
|
||||||
#define dvmh_get_num_procs(X) 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void distrmix21();
|
|
||||||
static void distrmix22();
|
|
||||||
static void distrmix23();
|
|
||||||
static void distrmix24();
|
|
||||||
static void distrmix25();
|
|
||||||
static void distrmix26();
|
|
||||||
static void distrmix27();
|
|
||||||
static void distrmix28();
|
|
||||||
static void distrmix29();
|
|
||||||
static void distrmix210();
|
|
||||||
static void distrmix211();
|
|
||||||
static void distrmix212();
|
|
||||||
static void distrmix213();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, errib, i, j, k, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTRMIX2 ===================\n");
|
|
||||||
|
|
||||||
/* 21 DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
distrmix21();
|
|
||||||
/* 22 DISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
distrmix22();
|
|
||||||
/* 23 DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][WGT_BLOCK]*/
|
|
||||||
distrmix23();
|
|
||||||
/* 24 DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
distrmix24();
|
|
||||||
/* 25 DISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK]*/
|
|
||||||
distrmix25();
|
|
||||||
/* 26 DISTRIBUTE arrA2[WGT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK]*/
|
|
||||||
distrmix26();
|
|
||||||
/* 27 DISTRIBUTE arrA2[BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][BLOCK]*/
|
|
||||||
distrmix27();
|
|
||||||
/* 28 DISTRIBUTE arrA2[BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [BLOCK][WGT_BLOCK]*/
|
|
||||||
distrmix28();
|
|
||||||
/* 29 DISTRIBUTE arrA2[WGT_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [BLOCK][MULT_BLOCK]*/
|
|
||||||
distrmix29();
|
|
||||||
/* 210 DISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
distrmix210();
|
|
||||||
/* 211 DISTRIBUTE arrA2[WGT_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][WGT_BLOCK]*/
|
|
||||||
distrmix211();
|
|
||||||
/* 212 DISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]*/
|
|
||||||
distrmix212();
|
|
||||||
/* 213 DISTRIBUTE arrA2[BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[WGT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][BLOCK]*/
|
|
||||||
distrmix213();
|
|
||||||
|
|
||||||
printf("=== END OF DISTRMIX2 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int myRand() {
|
|
||||||
const unsigned a = 1103515245U;
|
|
||||||
const unsigned c = 12345U;
|
|
||||||
const unsigned m = ((unsigned)RAND_MAX) + 1U;
|
|
||||||
static unsigned prev = 5;
|
|
||||||
prev = (a * prev + c) % m;
|
|
||||||
return prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void genBlocksAxis(const int procCount, const int weight, const int withoutZero, int **blocks) {
|
|
||||||
*blocks = (int *)malloc(procCount * sizeof(int));
|
|
||||||
int restWeight = weight, i, zeroind = -1;
|
|
||||||
if (!withoutZero && procCount > 1)
|
|
||||||
zeroind = myRand() % (procCount - 1);
|
|
||||||
for (i = 0; i < (procCount - 1); i++) {
|
|
||||||
if (i == zeroind)
|
|
||||||
(*blocks)[i] = 0;
|
|
||||||
else
|
|
||||||
(*blocks)[i] = 1 * withoutZero + myRand() % (restWeight - (procCount - (i + 1)));
|
|
||||||
restWeight -= (*blocks)[i];
|
|
||||||
}
|
|
||||||
(*blocks)[i] = restWeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR21*/
|
|
||||||
/*DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrmix21()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 56
|
|
||||||
int m11 = 2, m12 = 7;
|
|
||||||
int m21 = 5, m22 = 8;
|
|
||||||
double wb1[8] = {1.0, 2., 1., 3.2, 1.0, 1.5, 2.3, 2.};
|
|
||||||
double wb2[7] = {1.3, 1.5, 2.2, 1.6, 2.6, 0.5, 1.7};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix21";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[multblock(m11)][multblock(m12)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb1, 8)][wgtblock(wb2, 7)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[multblock(m21)][multblock(m22)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR22*/
|
|
||||||
/*DISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrmix22()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 32
|
|
||||||
int m1 = 2, m2 = 4;
|
|
||||||
double wb1[7] = {2.4, 1.2, 3.0, 0.2, 1.5, 2.8, 2.1};
|
|
||||||
double wb2[6] = {2.0, 1.2, 2.6, 1.6, 3.5, 0.7};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix22";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb1, 7)][wgtblock(wb2, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb2, 6)][wgtblock(wb1, 7)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR23*/
|
|
||||||
/*DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrmix23()
|
|
||||||
{
|
|
||||||
#define AN1 18
|
|
||||||
#define AN2 12
|
|
||||||
int m11 = 2, m12 = 2;
|
|
||||||
int m21 = 3, m22 = 3;
|
|
||||||
double wb1[10] = {2., 1.2, 2., 2.5, 0.2, 1.5, 1., 2.8, 2.1, 3.};
|
|
||||||
double wb2[8] = {3.0, 3.5, 2.0, 1.2, 2.6, 1.6, 3.5, 0.7};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix23";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[multblock(m11)][multblock(m12)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb1, 10)][multblock(m22)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[multblock(m21)][wgtblock(wb2, 8)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR24*/
|
|
||||||
/*DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrmix24()
|
|
||||||
{
|
|
||||||
#define AN1 30
|
|
||||||
#define AN2 30
|
|
||||||
int m1 = 3, m2 = 5;
|
|
||||||
int *BS1i, *BS1j;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix24";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][multblock(m2)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS1i)][genblock(BS1j)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[multblock(m2)][multblock(m1)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS1j);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR25*/
|
|
||||||
/*DISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK]*/
|
|
||||||
void distrmix25()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 12
|
|
||||||
int m1 = 2, m2 = 3;
|
|
||||||
int *BS1i, *BS1j, *BS2i, *BS2j;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS2i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS2j);
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix25";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS1i)][genblock(BS1j)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS2i)][genblock(BS2j)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS1j);
|
|
||||||
free(BS2i);
|
|
||||||
free(BS2j);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR26*/
|
|
||||||
/*DISTRIBUTE arrA2[WGT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK]*/
|
|
||||||
void distrmix26()
|
|
||||||
{
|
|
||||||
#define AN1 52
|
|
||||||
#define AN2 50
|
|
||||||
int m1 = 13, m2 = 5;
|
|
||||||
int *BS1i, *BS1j;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
double wb1[6] = {2.4, 2.2, 0.2, 3.5, 1.2, 1.};
|
|
||||||
double wb2[8] = {1.0, 2.5, 3.0, 2.8, 1.6, 1., 0.5, 1.7};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix26";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb1, 6)][multblock(m2)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][wgtblock(wb2, 8)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS1i)][genblock(BS1j)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS1j);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR27*/
|
|
||||||
/*DISTRIBUTE arrA2[BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][BLOCK]*/
|
|
||||||
void distrmix27()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 64
|
|
||||||
int m1 = 2, m2 = 8;
|
|
||||||
int *BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS);
|
|
||||||
double wb[7] = {2., 3.2, 2., 3.5, 1.2, 1., 4.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix27";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[block][multblock(m2)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][wgtblock(wb, 7)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS)][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR28*/
|
|
||||||
/*DISTRIBUTE arrA2[BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrmix28()
|
|
||||||
{
|
|
||||||
#define AN1 42
|
|
||||||
#define AN2 16
|
|
||||||
int m1 = 3, m2 = 2;
|
|
||||||
int *BS;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS);
|
|
||||||
double wb1[6] = {2., 3., 1.2, 1.5, 1., 1.5};
|
|
||||||
double wb2[7] = {2.2, 1.5, 3.0, 2.8, 2.6, 1.4, 0.5};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix28";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[block][genblock(BS)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb1, 6)][multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[block][wgtblock(wb2, 7)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR29*/
|
|
||||||
/*DISTRIBUTE arrA2[WGT_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE [GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE [BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrmix29()
|
|
||||||
{
|
|
||||||
#define AN1 21
|
|
||||||
#define AN2 48
|
|
||||||
int m1 = 3, m2 = 2;
|
|
||||||
int *BS1i, *BS1j;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
double wb[9] = {2.2, 1.5, 3.0, 2.8, 2.6, 1.4, 0.5, 1., 2.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix29";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb, 9)][block])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS1i)][genblock(BS1j)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[block][multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS1j);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR210*/
|
|
||||||
/*DISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrmix210()
|
|
||||||
{
|
|
||||||
#define AN1 9
|
|
||||||
#define AN2 11
|
|
||||||
|
|
||||||
int *BS1i, *BS1j;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
double wb1[6] = {1.0, 1.2, 2.5, 1.4, 2.5, 1.3};
|
|
||||||
double wb2[4] = {1.0, 2., 1.5, 1.7};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix210";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb1, 6)][wgtblock(wb2, 4)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS1i)][genblock(BS1j)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb2, 4)][wgtblock(wb1, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS1j);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR211*/
|
|
||||||
/*DISTRIBUTE arrA2[WGT_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrmix211()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 16
|
|
||||||
|
|
||||||
int *BS1i, *BS1j;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
double wb[7] = {1.0, 1.2, 2.5, 1.4, 2.5, 1.3, 2};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix211";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb, 7)][block])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS1i)][genblock(BS1j)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[block][wgtblock(wb, 7)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS1j);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR212*/
|
|
||||||
/*DISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][GEN_BLOCK]*/
|
|
||||||
void distrmix212()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 28
|
|
||||||
|
|
||||||
int *BS1i, *BS1j, *BS2i, *BS2j;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS2i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS2j);
|
|
||||||
double wb1[8] = {1.0, 1.2, 2.5, 1.4, 2.5, 1.3, 1., 2.};
|
|
||||||
double wb2[5] = {2., 1.3, 2., 1.0, 1.7};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix212";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS1i)][genblock(BS1j)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb1, 6)][wgtblock(wb2, 4)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS2i)][genblock(BS2j)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS1j);
|
|
||||||
free(BS2i);
|
|
||||||
free(BS2j);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR213*/
|
|
||||||
/*DISTRIBUTE arrA2[BLOCK][GEN_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[WGT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[GEN_BLOCK][BLOCK]*/
|
|
||||||
void distrmix213()
|
|
||||||
{
|
|
||||||
#define AN1 27
|
|
||||||
#define AN2 14
|
|
||||||
int m1 = 3, m2 = 2;
|
|
||||||
int *BS1i, *BS1j;
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(1), AN1, 1, &BS1i);
|
|
||||||
genBlocksAxis(dvmh_get_num_procs(2), AN2, 1, &BS1j);
|
|
||||||
double wb[4] = {1.2, 1.6, 2.0, 1.8};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrmix213";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[block][genblock(BS1j)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb, 4)][multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] += 1;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A2[genblock(BS1i)][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j + 1)
|
|
||||||
erri = Min(erri, i * NL + j + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(BS1i);
|
|
||||||
free(BS1j);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,474 +0,0 @@
|
|||||||
/* DISTRMULT1
|
|
||||||
TESTING distribute and redistribute directive
|
|
||||||
MULT_BLOCK distribution*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void distrm11();
|
|
||||||
static void distrm12();
|
|
||||||
static void distrm13();
|
|
||||||
static void distrm14();
|
|
||||||
static void distrm15();
|
|
||||||
static void distrm16();
|
|
||||||
static void distrm17();
|
|
||||||
static void distrm21();
|
|
||||||
static void distrm22();
|
|
||||||
static void distrm23();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, k, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTRMULT1 ===================\n");
|
|
||||||
|
|
||||||
/* 11 DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[MULT_BLOCK] */
|
|
||||||
distrm11();
|
|
||||||
/* 12 DISTRIBUTE arrA1[MULT_BLOCK] REDISTRIBUTE arrA1[BLOCK] */
|
|
||||||
distrm12();
|
|
||||||
/* 13 DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[MULT_BLOCK] small array*/
|
|
||||||
distrm13();
|
|
||||||
/* 14 DISTRIBUTE arrA1[MULT_BLOCK] REDISTRIBUTE arrA1[BLOCK] small array*/
|
|
||||||
distrm14();
|
|
||||||
/* 15 DISTRIBUTE arrA1[MULT_BLOCK] REDISTRIBUTE arrA1[MULT_BLOCK] other m*/
|
|
||||||
distrm15();
|
|
||||||
/* 16 DISTRIBUTE arrA1[MULT_BLOCK] REDISTRIBUTE arrA1[*]*/
|
|
||||||
distrm16();
|
|
||||||
/* 17 DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[MULT_BLOCK]*/
|
|
||||||
distrm17();
|
|
||||||
/* 21 DISTRIBUTE arrA2[MULT_BLOCK][*] REDISTRIBUTE arrA2[*][MULT_BLOCK]*/
|
|
||||||
distrm21();
|
|
||||||
/* 22 DISTRIBUTE arrA2[*][MULT_BLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
distrm22();
|
|
||||||
/* 23 DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[*][MULT_BLOCK]*/
|
|
||||||
distrm23();
|
|
||||||
|
|
||||||
printf("=== END OF DISTRMULT1 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR11*/
|
|
||||||
/* DISTR arrA1[BLOCK] REDISTR arrA1[MULT_BLOCK]*/
|
|
||||||
void distrm11()
|
|
||||||
{
|
|
||||||
#define AN1 25
|
|
||||||
int m = 5;
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrm11";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[multblock(m)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR12*/
|
|
||||||
/* DISTRIBUTE arrA1[MULT_BLOCK] REDISTRIBUTE arrA1[BLOCK] */
|
|
||||||
void distrm12()
|
|
||||||
{
|
|
||||||
#define AN1 48
|
|
||||||
int m = 6;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrm12";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[multblock(m)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR13*/
|
|
||||||
/* DISTR arrA1[BLOCK] REDISTR arrA1[MULT_BLOCK] small array */
|
|
||||||
void distrm13()
|
|
||||||
{
|
|
||||||
#define AN1 4
|
|
||||||
int m = 4;
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrm13";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[multblock(m)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR14*/
|
|
||||||
/* DISTRIBUTE arrA1[MULT_BLOCK] REDISTRIBUTE arrA1[BLOCK] small array*/
|
|
||||||
void distrm14()
|
|
||||||
{
|
|
||||||
#define AN1 3
|
|
||||||
int m = 3;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrm14";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[multblock(m)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR15*/
|
|
||||||
/* DISTR arrA1[MULT_BLOCK] REDISTR arrA1[MULT_BLOCK] other m */
|
|
||||||
void distrm15()
|
|
||||||
{
|
|
||||||
#define AN1 24
|
|
||||||
int m1 = 4, m2 = 3;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrm15";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[multblock(m1)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR16*/
|
|
||||||
/* DISTR arrA1[MULT_BLOCK] REDISTR arrA1[*]*/
|
|
||||||
void distrm16()
|
|
||||||
{
|
|
||||||
#define AN1 50
|
|
||||||
int m = 2;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrm16";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[multblock(m)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR17*/
|
|
||||||
/* DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[MULT_BLOCK]*/
|
|
||||||
void distrm17()
|
|
||||||
{
|
|
||||||
#define AN1 120
|
|
||||||
int m = 10;
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrm17";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[multblock(m)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR21*/
|
|
||||||
/* DISTRIBUTE arrA2[MULT_BLOCK][*] REDISTRIBUTE arrA2[*][MULT_BLOCK] */
|
|
||||||
void distrm21()
|
|
||||||
{
|
|
||||||
#define AN1 36
|
|
||||||
#define AN2 25
|
|
||||||
int m1 = 6,m2 = 5;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrm21";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[*][multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR22*/
|
|
||||||
/* DISTRIBUTE arrA2[*][MULT_BLOCK] REDISTRIBUTE arrA2[*][*] */
|
|
||||||
void distrm22()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 121
|
|
||||||
int m2 = 11;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrm22";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[*][multblock(m2)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR23*/
|
|
||||||
/* DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[*][MULT_BLOCK] */
|
|
||||||
void distrm23()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 63
|
|
||||||
int m2 = 9;
|
|
||||||
#pragma dvm array distribute[*][*]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrm23";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[*][multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,857 +0,0 @@
|
|||||||
/* DISTRMULT2
|
|
||||||
TESTING distribute and redistribute directive
|
|
||||||
MULT_BLOCK distribution*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void distrm24();
|
|
||||||
static void distrm25();
|
|
||||||
static void distrm26();
|
|
||||||
static void distrm27();
|
|
||||||
static void distrm28();
|
|
||||||
static void distrm29();
|
|
||||||
static void distrm210();
|
|
||||||
static void distrm32();
|
|
||||||
static void distrm33();
|
|
||||||
static void distrm34();
|
|
||||||
static void distrm35();
|
|
||||||
static void distrm36();
|
|
||||||
static void distrm37();
|
|
||||||
static void distrm38();
|
|
||||||
static void distrm41();
|
|
||||||
static void distrm42();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, k, ia, ib, n;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTRMULT2 ===================\n");
|
|
||||||
|
|
||||||
/* 24 DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
distrm24();
|
|
||||||
/* 25 DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
distrm25();
|
|
||||||
/* 26 DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][BLOCK]*/
|
|
||||||
distrm26();
|
|
||||||
/* 27 DISTRIBUTE arrA2[BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
distrm27();
|
|
||||||
/* 28 DISTRIBUTE arrA2[MULT_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][MULT_BLOCK]*/
|
|
||||||
distrm28();
|
|
||||||
/* 29 DISTRIBUTE arrA2[BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[MULT_BLOCK][BLOCK]*/
|
|
||||||
distrm29();
|
|
||||||
/* 210 DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK] other m1,m2*/
|
|
||||||
distrm210();
|
|
||||||
/* 32 DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK] [*]
|
|
||||||
REDISTRIBUTE arrA3[*][MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
distrm32();
|
|
||||||
/* 33 DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[MULT_BLOCK][*][BLOCK]*/
|
|
||||||
distrm33();
|
|
||||||
/* 34 DISTRIBUTE arrA3[MULT_BLOCK][*][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][*]*/
|
|
||||||
distrm34();
|
|
||||||
/* 35 DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[*][*]MULT_BLOCK]*/
|
|
||||||
distrm35();
|
|
||||||
/* 36 DISTRIBUTE arrA3[MULT_BLOCK][*][BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][*][MULT_BLOCK]*/
|
|
||||||
distrm36();
|
|
||||||
/* 37 DISTRIBUTE arrA3[MULT_BLOCK][BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][*][MULT_BLOCK]*/
|
|
||||||
distrm37();
|
|
||||||
/* 38 DISTRIBUTE arrA3[BLOCK][*][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[*][MULT_BLOCK][BLOCK]*/
|
|
||||||
distrm38();
|
|
||||||
/* 41 DISTRIBUTE arrA4[*][*][MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA4[*][*][*][*]*/
|
|
||||||
distrm41();
|
|
||||||
/* 42 DISTRIBUTE arrA4[MULT_BLOCK][*][MULT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA4[*][MULT_BLOCK][MULT_BLOCK][*]*/
|
|
||||||
distrm42();
|
|
||||||
|
|
||||||
printf("=== END OF DISTRMULT2 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR24*/
|
|
||||||
/* DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK] REDISTRIBUTE arrA2[*][*] */
|
|
||||||
void distrm24()
|
|
||||||
{
|
|
||||||
#define AN1 15
|
|
||||||
#define AN2 12
|
|
||||||
int m1 = 5,m2 = 3;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrm24";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][multblock(m2)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR25*/
|
|
||||||
/* DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrm25()
|
|
||||||
{
|
|
||||||
#define AN1 18
|
|
||||||
#define AN2 8
|
|
||||||
int m1 = 3,m2 = 2;
|
|
||||||
#pragma dvm array distribute[*][*]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrm25";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR26*/
|
|
||||||
/* DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][BLOCK]*/
|
|
||||||
void distrm26()
|
|
||||||
{
|
|
||||||
#define AN1 49
|
|
||||||
#define AN2 12
|
|
||||||
int m1 = 7,m2 = 4;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrm26";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][multblock(m2)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[block][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR27*/
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][BLOCK] REDISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrm27()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 64
|
|
||||||
int m1 = 1,m2 = 8;
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrm27";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR28*/
|
|
||||||
/* DISTRIBUTE arrA2[MULT_BLOCK][BLOCK] REDISTRIBUTE arrA2[BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrm28()
|
|
||||||
{
|
|
||||||
#define AN1 20
|
|
||||||
#define AN2 20
|
|
||||||
int m1 = 5, m2 = 4;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrm28";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][block])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[block][multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR29*/
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[MULT_BLOCK][BLOCK]*/
|
|
||||||
void distrm29()
|
|
||||||
{
|
|
||||||
#define AN1 30
|
|
||||||
#define AN2 60
|
|
||||||
int m1 = 10,m2 = 10;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrm29";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[block][multblock(m2)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR210*/
|
|
||||||
/* DISTRIBUTE arrA2[MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK] other m1, m2*/
|
|
||||||
void distrm210()
|
|
||||||
{
|
|
||||||
#define AN1 24
|
|
||||||
#define AN2 24
|
|
||||||
int m1 = 3,m2 = 2;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrm210";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[multblock(m1)][multblock(m2)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[multblock(m2)][multblock(m1)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR32*/
|
|
||||||
/* DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK] [*]
|
|
||||||
REDISTRIBUTE arrA3[*][MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrm32()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 12
|
|
||||||
#define AN3 8
|
|
||||||
int m1 = 2, m2 = 3, m3 = 4;
|
|
||||||
#pragma dvm array
|
|
||||||
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm32";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][multblock(m2)][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[*][multblock(m2)][multblock(m3)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR33*/
|
|
||||||
/* DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[MULT_BLOCK][*][MULTBLOCK]*/
|
|
||||||
void distrm33()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 16
|
|
||||||
#define AN3 8
|
|
||||||
int m1 = 4, m2 = 2, m3 = 2;
|
|
||||||
#pragma dvm array
|
|
||||||
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm33";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][multblock(m2)][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][*][multblock(m3)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR34*/
|
|
||||||
/* DISTRIBUTE arrA3[MULT_BLOCK][*][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][*]*/
|
|
||||||
void distrm34()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
int m1 = 2, m2 = 1, m3 = 4;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm34";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][*][multblock(m3)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][multblock(m2)][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR35*/
|
|
||||||
/* DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[*][*][MULT_BLOCK]*/
|
|
||||||
void distrm35()
|
|
||||||
{
|
|
||||||
#define AN1 18
|
|
||||||
#define AN2 28
|
|
||||||
#define AN3 38
|
|
||||||
int m1 = 3, m2 = 7, m3 = 19;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm35";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][multblock(m2)][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[*][*][multblock(m3)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR36*/
|
|
||||||
/* DISTRIBUTE arrA3[MULT_BLOCK][*][BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][*][MULT_BLOCK]*/
|
|
||||||
void distrm36()
|
|
||||||
{
|
|
||||||
#define AN1 121
|
|
||||||
#define AN2 12
|
|
||||||
#define AN3 35
|
|
||||||
int m1 = 11, m2 = 2, m3 = 7;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm36";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][*][block])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[block][*][multblock(m3)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR37*/
|
|
||||||
/*DISTRIBUTE arrA3[MULT_BLOCK][BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][*][MULT_BLOCK]*/
|
|
||||||
void distrm37()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 28
|
|
||||||
#define AN3 8
|
|
||||||
int m1 = 2, m2 = 4, m3 = 2;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm37";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][block][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[block][*][multblock(m3)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR38*/
|
|
||||||
/*DISTRIBUTE arrA3[BLOCK][*][MULT_BLOCK] REDISTRIBUTE arrA3[*][MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrm38()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 28
|
|
||||||
#define AN3 8
|
|
||||||
int m1 = 2, m2 = 4, m3 = 2;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm38";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[block][*][multblock(m3)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[*][multblock(m2)][multblock(m3)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR41*/
|
|
||||||
/*DISTRIBUTE arrA4[*][*][MULT_BLOCK][MULT_BLOCK] REDISTRIBUTE arrA4[*][*][*][*]*/
|
|
||||||
void distrm41()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 16
|
|
||||||
#define AN3 16
|
|
||||||
#define AN4 16
|
|
||||||
int m1 = 2, m2 = 4, m3 = 2, m4 = 4;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
char tname[] = "distrm41";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A4 = malloc(AN1 * AN2 * AN3 * AN4 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A4[*][*][multblock(m3)][multblock(m4)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
A4[i][j][k][n] = i*NL/10+j*NL/100+k*NL/1000+n;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A4[*][*][*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
if (A4[i][j][k][n] != i*NL/10+j*NL/100+k*NL/1000+n)
|
|
||||||
erri = Min(erri, i*NL/10+j*NL/100+k*NL/1000+n);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A4);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR42*/
|
|
||||||
/*DISTRIBUTE arrA4[MULT_BLOCK][*][MULT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA4[*][MULT_BLOCK][MULT_BLOCK][*]*/
|
|
||||||
void distrm42()
|
|
||||||
{
|
|
||||||
#define AN1 28
|
|
||||||
#define AN2 25
|
|
||||||
#define AN3 27
|
|
||||||
#define AN4 21
|
|
||||||
int m1 = 7, m2 = 5, m3 = 9, m4 = 3;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
char tname[] = "distrm42";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A4 = malloc(AN1 * AN2 * AN3 * AN4 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A4[multblock(m1)][*][multblock(m3)][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
A4[i][j][k][n] = i*NL/10+j*NL/100+k*NL/1000+n;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A4[*][multblock(m2)][multblock(m3)][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
if (A4[i][j][k][n] != i*NL/10+j*NL/100+k*NL/1000+n)
|
|
||||||
erri = Min(erri, i*NL/10+j*NL/100+k*NL/1000+n);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A4);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,569 +0,0 @@
|
|||||||
/* DISTRMULT3
|
|
||||||
TESTING distribute and redistribute directive
|
|
||||||
MULT_BLOCK distribution*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void distrm311();
|
|
||||||
static void distrm312();
|
|
||||||
static void distrm313();
|
|
||||||
static void distrm314();
|
|
||||||
static void distrm315();
|
|
||||||
static void distrm316();
|
|
||||||
static void distrm317();
|
|
||||||
static void distrm318();
|
|
||||||
static void distrm319();
|
|
||||||
static void distrm43();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, k, ia, ib, n;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTRMULT3 ===================\n");
|
|
||||||
|
|
||||||
/* 311 DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [BLOCK][BLOCK][BLOCK]*/
|
|
||||||
distrm311();
|
|
||||||
/* 312 DISTRIBUTE arrA3DISTRIBUTE [BLOCK][BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
distrm312();
|
|
||||||
/* 313 DISTRIBUTE arrA2[_BLOCK][BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][MULT_BLOCK][BLOCK]*/
|
|
||||||
distrm313();
|
|
||||||
/* 314 DISTRIBUTE arrA3[BLOCK][MULT_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[MULT_BLOCK][BLOCK][MULT_BLOCK]*/
|
|
||||||
distrm314();
|
|
||||||
/* 315 DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK][MULT_BLOCK] other m1,m2,m3*/
|
|
||||||
distrm315();
|
|
||||||
/* 316 DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[*][*][*]*/
|
|
||||||
distrm316();
|
|
||||||
/* 317 DISTRIBUTE arrA3[*][*][*]
|
|
||||||
REDISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
distrm317();
|
|
||||||
/* 318 DISTRIBUTE arrA3[MULT_BLOCK][*][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[*][MULT_BLOCK][*]*/
|
|
||||||
distrm318();
|
|
||||||
/* 319 DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[*][MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
distrm319();
|
|
||||||
/* 43 DISTRIBUTE arrA4[MULT_BLOCK][*][MULT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA4[[*][MULT_BLOCK][*][MULT_BLOCK]*/
|
|
||||||
distrm43();
|
|
||||||
|
|
||||||
printf("=== END OF DISTRMULT3 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR311*/
|
|
||||||
/*DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [BLOCK][BLOCK][BLOCK]*/
|
|
||||||
void distrm311()
|
|
||||||
{
|
|
||||||
#define AN1 14
|
|
||||||
#define AN2 12
|
|
||||||
#define AN3 10
|
|
||||||
int m1 = 7, m2 = 3, m3 = 5;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm311";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][multblock(m2)][multblock(m3)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[block][block][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR312*/
|
|
||||||
/*DISTRIBUTE arrA3[BLOCK][BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrm312()
|
|
||||||
{
|
|
||||||
#define AN1 15
|
|
||||||
#define AN2 15
|
|
||||||
#define AN3 25
|
|
||||||
int m1 = 5, m2 = 5, m3 = 5;
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm312";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][multblock(m2)][multblock(m3)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR313*/
|
|
||||||
/*DISTRIBUTE arrA2[MULT_BLOCK][BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][MULT_BLOCK][BLOCK]*/
|
|
||||||
void distrm313()
|
|
||||||
{
|
|
||||||
#define AN1 24
|
|
||||||
#define AN2 24
|
|
||||||
#define AN3 24
|
|
||||||
int m1 = 2, m2 = 3, m3 = 4;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm313";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][block][multblock(m3)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[block][multblock(m2)][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR314*/
|
|
||||||
/*DISTRIBUTE arrA3[BLOCK][MULT_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[MULT_BLOCK][BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrm314()
|
|
||||||
{
|
|
||||||
#define AN1 20
|
|
||||||
#define AN2 30
|
|
||||||
#define AN3 30
|
|
||||||
int m1 = 5, m2 = 3, m3 = 3;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm314";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[block][multblock(m2)][block])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][block][multblock(m3)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR315*/
|
|
||||||
/*DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE [MULT_BLOCK][MULT_BLOCK][MULT_BLOCK] other m1,m2,m3*/
|
|
||||||
void distrm315()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 16
|
|
||||||
#define AN3 16
|
|
||||||
int m1 = 2, m2 = 4, m3 = 8;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm315";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][multblock(m2)][multblock(m3)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[multblock(m3)][multblock(m1)][multblock(m2)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR316*/
|
|
||||||
/*DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[*][*][*]*/
|
|
||||||
void distrm316()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 12
|
|
||||||
#define AN3 48
|
|
||||||
int m1 = 3, m2 = 2, m3 = 6;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm316";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][multblock(m2)][multblock(m3)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[*][*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR317*/
|
|
||||||
/*DISTRIBUTE arrA3[*][*][*]
|
|
||||||
REDISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrm317()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 35
|
|
||||||
#define AN3 10
|
|
||||||
int m1 = 2, m2 = 5, m3 = 2;
|
|
||||||
#pragma dvm array distribute[*][*][*]
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm317";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][multblock(m2)][multblock(m3)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR318*/
|
|
||||||
/*DISTRIBUTE arrA3[MULT_BLOCK][*][MULT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[*][MULT_BLOCK][*]*/
|
|
||||||
void distrm318()
|
|
||||||
{
|
|
||||||
#define AN1 11
|
|
||||||
#define AN2 14
|
|
||||||
#define AN3 24
|
|
||||||
int m1 = 1, m2 = 2, m3 = 6;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm318";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m1)][*][multblock(m3)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[*][multblock(m2)][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR319*/
|
|
||||||
/*DISTRIBUTE arrA3[MULT_BLOCK][MULT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[*][MULT_BLOCK][MULT_BLOCK]*/
|
|
||||||
void distrm319()
|
|
||||||
{
|
|
||||||
#define AN1 30
|
|
||||||
#define AN2 12
|
|
||||||
#define AN3 30
|
|
||||||
int m11 = 2, m12 = 2, m13 = 2;
|
|
||||||
int m21 = 5, m22 = 4, m23 = 10;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrm319";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[multblock(m11)][multblock(m12)][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[*][multblock(m22)][multblock(m23)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR43*/
|
|
||||||
/*DISTRIBUTE arrA4[MULT_BLOCK][*][MULT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA4[*][MULT_BLOCK][*][MULT_BLOCK]*/
|
|
||||||
void distrm43()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 16
|
|
||||||
#define AN3 16
|
|
||||||
#define AN4 16
|
|
||||||
int m1 = 2, m2 = 4, m3 = 2, m4 = 4;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
char tname[] = "distrm43";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A4 = malloc(AN1 * AN2 * AN3 * AN4 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A4[multblock(m1)][*][multblock(m3)][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
A4[i][j][k][n] = i*NL/10+j*NL/100+k*NL/1000+n;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A4[*][multblock(m2)][*][multblock(m4)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
if (A4[i][j][k][n] != i*NL/10+j*NL/100+k*NL/1000+n)
|
|
||||||
erri = Min(erri, i*NL/10+j*NL/100+k*NL/1000+n);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A4);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,483 +0,0 @@
|
|||||||
/* DISTRWGT1
|
|
||||||
Testing DISTRIBUTE and REDISTRIBUTE directives
|
|
||||||
WGT_BLOCK distribution*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void distrwgt11();
|
|
||||||
static void distrwgt12();
|
|
||||||
static void distrwgt13();
|
|
||||||
static void distrwgt14();
|
|
||||||
static void distrwgt15();
|
|
||||||
static void distrwgt16();
|
|
||||||
static void distrwgt17();
|
|
||||||
static void distrwgt21();
|
|
||||||
static void distrwgt22();
|
|
||||||
static void distrwgt23();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, k, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTRWGT1 ===================\n");
|
|
||||||
/* 11 DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[WGT_BLOCK]*/
|
|
||||||
distrwgt11();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[WGT_BLOCK] REDISTRIBUTE arrA1[BLOCK] */
|
|
||||||
distrwgt12();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[WGT_BLOCK] small array*/
|
|
||||||
distrwgt13();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[WGT_BLOCK] REDISTRIBUTE arrA1[BLOCK] small array*/
|
|
||||||
distrwgt14();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[WGT_BLOCK] REDISTRIBUTE arrA1[WGT_BLOCK] other weights*/
|
|
||||||
distrwgt15();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[WGT_BLOCK] REDISTRIBUTE arrA1[*]*/
|
|
||||||
distrwgt16();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[WGT_BLOCK]*/
|
|
||||||
distrwgt17();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA2[WGT_BLOCK][*] REDISTRIBUTE arrA2[*][WGT_BLOCK]*/
|
|
||||||
distrwgt21();
|
|
||||||
|
|
||||||
/*DISTRIBUTE arrA2[*][WGT_BLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
distrwgt22();
|
|
||||||
|
|
||||||
/* DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[*][WGT_BLOCK]*/
|
|
||||||
distrwgt23();
|
|
||||||
|
|
||||||
printf("=== END OF DISTRWGT1 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR11*/
|
|
||||||
/* 11 DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[WGT_BLOCK]*/
|
|
||||||
void distrwgt11()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
double wb[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrwgt11";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR12*/
|
|
||||||
/* 11 12 DISTRIBUTE arrA1[WGT_BLOCK] REDISTRIBUTE arrA1[BLOCK]*/
|
|
||||||
void distrwgt12()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
double wb[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrwgt12";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR13*/
|
|
||||||
/* 13 DISTRIBUTE arrA1[BLOCK] REDISTRIBUTE arrA1[WGT_BLOCK] small array*/
|
|
||||||
void distrwgt13()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
double wb[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrwgt13";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR14*/
|
|
||||||
/* 14 DISTRIBUTE arrA1[WGT_BLOCK] REDISTRIBUTE arrA1[BLOCK] small array*/
|
|
||||||
void distrwgt14()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
double wb[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrwgt14";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR15*/
|
|
||||||
/* 15 DISTRIBUTE arrA1[WGT_BLOCK] REDISTRIBUTE arrA1[WGT_BLOCK] other weights*/
|
|
||||||
void distrwgt15()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
double wb1[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
double wb2[6] = {2.0, 1., 2., 2.0, 2., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrwgt15";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb1, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb2, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR16*/
|
|
||||||
/* 16 DISTRIBUTE arrA1[WGT_BLOCK] REDISTRIBUTE arrA1[*]*/
|
|
||||||
void distrwgt16()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
double wb[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrwgt16";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR17*/
|
|
||||||
/* 17 DISTRIBUTE arrA1[*] REDISTRIBUTE arrA1[WGT_BLOCK]*/
|
|
||||||
void distrwgt17()
|
|
||||||
{
|
|
||||||
#define AN1 28
|
|
||||||
double wb[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int (*A1);
|
|
||||||
char tname[] = "distrwgt17";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A1 = malloc(AN1 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A1[wgtblock(wb, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR17*/
|
|
||||||
/* 21 DISTRIBUTE arrA2[WGT_BLOCK][*] REDISTRIBUTE arrA2[*][WGT_BLOCK]*/
|
|
||||||
void distrwgt21()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
double wb[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrwgt21";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb, 6)][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[*][wgtblock(wb, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR22*/
|
|
||||||
/* 22 DISTRIBUTE arrA2[*][WGT_BLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
void distrwgt22()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
double wb[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrwgt22";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[*][wgtblock(wb, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR23*/
|
|
||||||
/* 23 DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[*][WGT_BLOCK]*/
|
|
||||||
void distrwgt23()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
double wb[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array distribute[*][*]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrwgt23";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[*][wgtblock(wb, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,859 +0,0 @@
|
|||||||
/* DISTRWGT2
|
|
||||||
Testing DISTRIBUTE and REDISTRIBUTE directives
|
|
||||||
WGT_BLOCK distribution*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void distrwgt24();
|
|
||||||
static void distrwgt25();
|
|
||||||
static void distrwgt26();
|
|
||||||
static void distrwgt27();
|
|
||||||
static void distrwgt28();
|
|
||||||
static void distrwgt29();
|
|
||||||
static void distrwgt210();
|
|
||||||
static void distrwgt32();
|
|
||||||
static void distrwgt33();
|
|
||||||
static void distrwgt34();
|
|
||||||
static void distrwgt35();
|
|
||||||
static void distrwgt36();
|
|
||||||
static void distrwgt37();
|
|
||||||
static void distrwgt38();
|
|
||||||
static void distrwgt41();
|
|
||||||
static void distrwgt42();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, k, n, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTRWGT2 ===================\n");
|
|
||||||
/* 24 DISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
distrwgt24();
|
|
||||||
/* 25 DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
distrwgt25();
|
|
||||||
/* 26 DISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][BLOCK]*/
|
|
||||||
distrwgt26();
|
|
||||||
/* 27 DISTRIBUTE arrA2[BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
distrwgt27();
|
|
||||||
/* 28 DISTRIBUTE arrA2[WGT_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[BLOCK][WGT_BLOCK]*/
|
|
||||||
distrwgt28();
|
|
||||||
/* 29 DISTRIBUTE arrA2[BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[WGT_BLOCK][BLOCK]*/
|
|
||||||
distrwgt29();
|
|
||||||
/* 210 DISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK] other weigths
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
distrwgt210();
|
|
||||||
/* 32 DISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK] [*]
|
|
||||||
REDISTRIBUTE arrA3[*][WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
distrwgt32();
|
|
||||||
/* 33 DISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[WGT_BLOCK][*][BLOCK]*/
|
|
||||||
distrwgt33();
|
|
||||||
/* 34 DISTRIBUTE arrA3[WGT_BLOCK][*][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][*]*/
|
|
||||||
distrwgt34();
|
|
||||||
/* 35 DISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[*][*][WGT_BLOCK]*/
|
|
||||||
distrwgt35();
|
|
||||||
/* 36 DISTRIBUTE arrA3[WGT_BLOCK][*][BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][*][WGT_BLOCK]*/
|
|
||||||
distrwgt36();
|
|
||||||
/* 37 DISTRIBUTE arrA3[WGT_BLOCK][BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][*][WGT_BLOCK]*/
|
|
||||||
distrwgt37();
|
|
||||||
/* 38 DISTRIBUTE arrA3[BLOCK][*][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[*][WGT_BLOCK][BLOCK]*/
|
|
||||||
distrwgt38();
|
|
||||||
/* 41 DISTRIBUTE arrA4[*][*][WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA4[*][*][*][*]*/
|
|
||||||
distrwgt41();
|
|
||||||
/* 42 DISTRIBUTE arrA4[WGT_BLOCK][*][WGT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA4[*][WGT_BLOCK][WGT_BLOCK][*]*/
|
|
||||||
distrwgt42();
|
|
||||||
|
|
||||||
printf("=== END OF DISTRWGT2 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR24*/
|
|
||||||
/* 24 DISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK] REDISTRIBUTE arrA2[*][*]*/
|
|
||||||
void distrwgt24()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
double wb1[4] = {2., 2., 3.0, 1.};
|
|
||||||
double wb2[6] = {3.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrwgt24";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb1, 4)][wgtblock(wb2, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR25*/
|
|
||||||
/* DISTRIBUTE arrA2[*][*] REDISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrwgt25()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
double wb1[5] = {1.0,2.,2.,3.0, 0.};
|
|
||||||
double wb2[7] = {1.0,1.,2.,1.0, 1.,1.,1.};
|
|
||||||
#pragma dvm array distribute[*][*]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrwgt25";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb1, 5)][wgtblock(wb2, 7)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR26*/
|
|
||||||
/* DISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK] REDISTRIBUTE arrA2[BLOCK][BLOCK]*/
|
|
||||||
void distrwgt26()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 12
|
|
||||||
double wb[6] = {1.0, 4., 1., 1.0, 2., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrwgt26";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb, 6)][wgtblock(wb, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[block][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR27*/
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][BLOCK] REDISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrwgt27()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
double wb[6] = {2.0, 1., 3., 2.0, 1., 1.};
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrwgt27";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb, 6)][wgtblock(wb, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR28*/
|
|
||||||
/* DISTRIBUTE arrA2[WGT_BLOCK][BLOCK] REDISTRIBUTE arrA2[BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrwgt28()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 12
|
|
||||||
double wb1[8] = {1.0, 2., 2., 3.0, 1., 1, 2, 4.};
|
|
||||||
double wb2[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrwgt28";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb1, 8)][block])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[block][wgtblock(wb2, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR29*/
|
|
||||||
/* DISTRIBUTE arrA2[BLOCK][WGT_BLOCK] REDISTRIBUTE arrA2[WGT_BLOCK][BLOCK]*/
|
|
||||||
void distrwgt29()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 12
|
|
||||||
double wb1[6] = {1.0, 2., 2., 3.0, 3, 1};
|
|
||||||
double wb2[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrwgt29";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[block][wgtblock(wb1, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb2, 6)][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR210*/
|
|
||||||
/* DISTRIBUTE arrA2[WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][WGT_BLOCK] with other weigths*/
|
|
||||||
void distrwgt210()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 12
|
|
||||||
double wb1[4] = {1.0, 2., 1., 1.0};
|
|
||||||
double wb2[6] = {1.0, 1., 2., 1.0, 2., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A2)[AN2];
|
|
||||||
char tname[] = "distrwgt210";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A2 = malloc(AN1 * AN2 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb1, 4)][wgtblock(wb2, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A2[wgtblock(wb2, 6)][wgtblock(wb1, 4)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
if (A2[i][j] != i * NL + j)
|
|
||||||
erri = Min(erri, i * NL + j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR32*/
|
|
||||||
/* DISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[*][WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrwgt32()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 12
|
|
||||||
#define AN3 8
|
|
||||||
double wb1[7] = {1., 1., 2., 1.0, 2., 2., 3.0};
|
|
||||||
double wb2[8] = {1.0, 2., 2., 3.0, 2, 1, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt32";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb1, 7)][wgtblock(wb2, 6)][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[*][wgtblock(wb2, 6)][wgtblock(wb1, 4)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR33*/
|
|
||||||
/* DISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[WGT_BLOCK][*][WGT_BLOCK]*/
|
|
||||||
void distrwgt33()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 16
|
|
||||||
#define AN3 8
|
|
||||||
double wb[10] = {1.0, 2., 2., 3.0, 2., 4, 2., 1., 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt33";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb, 6)][wgtblock(wb, 8)][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb, 10)][*][wgtblock(wb, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR34*/
|
|
||||||
/* DISTRIBUTE arrA3[WGT_BLOCK][*][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][*]*/
|
|
||||||
void distrwgt34()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
double wb[8] = {1.0, 2., 2., 3.0, 1., 2, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt34";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb, 6)][*][wgtblock(wb, 8)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb, 8)][wgtblock(wb, 6)][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR35*/
|
|
||||||
/* DISTRIBUTE arrA3[WGT_BLOCK][BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[*][*][WGT_BLOCK]*/
|
|
||||||
void distrwgt35()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
double wb1[6] = {1.0, 2., 2., 3.0, 1.5, 2.5};
|
|
||||||
double wb2[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt35";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb1, 6)][block][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[*][*][wgtblock(wb2, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR36*/
|
|
||||||
/* DISTRIBUTE arrA3[WGT_BLOCK][*][BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][*][WGT_BLOCK]*/
|
|
||||||
void distrwgt36()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
double wb[6] = {.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt36";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb, 6)][*][block])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[block][*][wgtblock(wb, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR37*/
|
|
||||||
/*DISTRIBUTE arrA3[WGT_BLOCK][BLOCK][*]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][*][WGT_BLOCK]*/
|
|
||||||
void distrwgt37()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
double wb1[6] = {0.5, 1, 1.0, 2., 2., 3.0};
|
|
||||||
double wb2[8] = {1.0, 2., 2., 3.0, 0.5, 2, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt37";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb1, 6)][block][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[block][*][wgtblock(wb2, 8)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR38*/
|
|
||||||
/*DISTRIBUTE arrA3[BLOCK][*][WGT_BLOCK] REDISTRIBUTE arrA3[*][WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrwgt38()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
double wb1[6] = {1.0, 2., 2., 3.0, 4, 5};
|
|
||||||
double wb2[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt38";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[block][*][wgtblock(wb1, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[*][wgtblock(wb1, 6)][wgtblock(wb2, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR41*/
|
|
||||||
/*DISTRIBUTE arrA4[*][*][WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA4[*][*][*][*]*/
|
|
||||||
void distrwgt41()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
#define AN4 8
|
|
||||||
double wb[8] = {1.0, 2., 2., 3.0, 1., 1., 2, 1};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
char tname[] = "distrwgt41";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A4 = malloc(AN1 * AN2 * AN3 * AN4 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A4[*][*][wgtblock(wb, 6)][wgtblock(wb, 8)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
A4[i][j][k][n] = i*NL/10+j*NL/100+k*NL/1000+n;
|
|
||||||
}
|
|
||||||
#pragma dvm redistribute(A4[*][*][*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
if (A4[i][j][k][n] != i*NL/10+j*NL/100+k*NL/1000+n)
|
|
||||||
erri = Min(erri, i*NL/10+j*NL/100+k*NL/1000+n);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A4);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR42*/
|
|
||||||
/*DISTRIBUTE arrA4[WGT_BLOCK][*][WGT_BLOCK][*] REDISTRIBUTE arrA4[*][WGT_BLOCK][WGT_BLOCK][*]*/
|
|
||||||
void distrwgt42()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
#define AN4 8
|
|
||||||
double wb[6] = {1.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
char tname[] = "distrwgt42";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A4 = malloc(AN1 * AN2 * AN3 * AN4 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A4[wgtblock(wb, 6)][*][wgtblock(wb, 6)][*])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
A4[i][j][k][n] = i*NL/10+j*NL/100+k*NL/1000+n;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A4[*][wgtblock(wb, 6)][wgtblock(wb, 6)][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
if (A4[i][j][k][n] != i*NL/10+j*NL/100+k*NL/1000+n)
|
|
||||||
erri = Min(erri, i*NL/10+j*NL/100+k*NL/1000+n);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A4);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,478 +0,0 @@
|
|||||||
/* DISTRWGT3
|
|
||||||
Testing DISTRIBUTE and REDISTRIBUTE directives
|
|
||||||
WGT_BLOCK distribution*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void distrwgt39();
|
|
||||||
static void distrwgt310();
|
|
||||||
static void distrwgt311();
|
|
||||||
static void distrwgt312();
|
|
||||||
static void distrwgt313();
|
|
||||||
static void distrwgt314();
|
|
||||||
static void distrwgt315();
|
|
||||||
static void distrwgt41();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, k, ia, ib, n;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF DISTRWGT3 ===================\n");
|
|
||||||
/* 39 DISTRIBUTE arrA3[BLOCK][BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
distrwgt39();
|
|
||||||
/* 310 DISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [BLOCK][BLOCK][BLOCK]*/
|
|
||||||
distrwgt310();
|
|
||||||
/* 311 DISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][WGT_BLOCK][WGT_BLOCK] other weigths*/
|
|
||||||
distrwgt311();
|
|
||||||
/* 312 DISTRIBUTE arrA2[WGT_BLOCK][BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][WGT_BLOCK][BLOCK]*/
|
|
||||||
distrwgt312();
|
|
||||||
/* 313 DISTRIBUTE arrA3[BLOCK][WGT_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[WGT_BLOCK][BLOCK][WGT_BLOCK]*/
|
|
||||||
distrwgt313();
|
|
||||||
/* 314 DISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA2[*][*][*]*/
|
|
||||||
distrwgt314();
|
|
||||||
/* 315 DISTRIBUTE arrA3[*][*][*]
|
|
||||||
REDISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
distrwgt315();
|
|
||||||
/* 41 DISTRIBUTE arrA4[WGT_BLOCK][*][WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA4[BLOCK][WGT_BLOCK][BLOCK][*]*/
|
|
||||||
distrwgt41();
|
|
||||||
|
|
||||||
printf("=== END OF DISTRWGT3 =====================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR39*/
|
|
||||||
/* DISTRIBUTE arrA3[BLOCK][BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrwgt39()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 16
|
|
||||||
#define AN3 16
|
|
||||||
double wb1[6] = {3.0, 1., 2., 2.0, 2.5, 1.2};
|
|
||||||
double wb2[7] = {1., 3., 4.0, 1., 2., 2., 4.};
|
|
||||||
double wb3[6] = {5.0, 1., 3., 6.0, 2., 4.};
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt39";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb1, 6)][wgtblock(wb2, 7)][wgtblock(wb3, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR310*/
|
|
||||||
/* DISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [BLOCK][BLOCK][BLOCK]*/
|
|
||||||
void distrwgt310()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 12
|
|
||||||
#define AN3 24
|
|
||||||
double wb1[6] = {2.0, 1., 1., 3.0, 2., 1.};
|
|
||||||
double wb2[8] = {1.0, 1., 2., 2.0, 1., 1., 2., 2.};
|
|
||||||
double wb3[6] = {2.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt310";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb1, 6)][wgtblock(wb2, 8)][wgtblock(wb3, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[block][block][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR311*/
|
|
||||||
/* DISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE [WGT_BLOCK][WGT_BLOCK][WGT_BLOCK] other weigths*/
|
|
||||||
void distrwgt311()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
double wb1[6] = {2.0, 1., 1., 3.0, 2., 1.};
|
|
||||||
double wb2[8] = {1.0, 1., 2., 2.0, 1., 1., 2., 2.};
|
|
||||||
double wb3[6] = {2.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt311";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb1, 6)][wgtblock(wb2, 6)][wgtblock(wb3, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb3, 6)][wgtblock(wb1, 6)][wgtblock(wb2, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR312*/
|
|
||||||
/* DISTRIBUTE arrA3[WGT_BLOCK][BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[BLOCK][WGT_BLOCK][BLOCK]*/
|
|
||||||
void distrwgt312()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 10
|
|
||||||
#define AN3 30
|
|
||||||
double wb1[6] = {2.0, 1., 1., 3.0, 2., 1.};
|
|
||||||
double wb2[8] = {1.0, 1., 2., 2.0, 1., 1., 2., 2.};
|
|
||||||
double wb3[6] = {2.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt312";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb1, 6)][block][wgtblock(wb3, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[block][wgtblock(wb2, 8)][block])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR313*/
|
|
||||||
/* DISTRIBUTE arrA3[BLOCK][WGT_BLOCK][BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[WGT_BLOCK][BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrwgt313()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
double wb1[6] = {2.0, 1., 1., 3.0, 2., 1.};
|
|
||||||
double wb2[8] = {1.0, 1., 2., 2.0, 1., 1., 2., 2.};
|
|
||||||
double wb3[6] = {2.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt313";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[block][wgtblock(wb2, 8)][block])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb1, 6)][block][wgtblock(wb3, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR314*/
|
|
||||||
/* DISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA3[*][*][*]*/
|
|
||||||
void distrwgt314()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 12
|
|
||||||
#define AN3 24
|
|
||||||
double wb1[6] = {2.0, 1., 1., 3.0, 2., 1.};
|
|
||||||
double wb2[8] = {1.0, 1., 2., 2.0, 1., 1., 2., 2.};
|
|
||||||
double wb3[6] = {2.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt314";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb1, 6)][wgtblock(wb2, 8)][wgtblock(wb3, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[*][*][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR315*/
|
|
||||||
/* DISTRIBUTE arrA3[*][*][*]
|
|
||||||
REDISTRIBUTE arrA3[WGT_BLOCK][WGT_BLOCK][WGT_BLOCK]*/
|
|
||||||
void distrwgt315()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
double wb1[6] = {2.0, 1., 1., 3.0, 2., 1.};
|
|
||||||
double wb2[8] = {1.0, 1., 2., 2.0, 1., 1., 2., 2.};
|
|
||||||
double wb3[6] = {2.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array distribute[*][*][*]
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
char tname[] = "distrwgt315";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A3 = malloc(AN1 * AN2 * AN3 * sizeof(int));
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
A3[i][j][k] = i*NL/10 + j*NL/100 + k;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A3[wgtblock(wb1, 6)][wgtblock(wb2, 8)][wgtblock(wb3, 6)])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k] on A3[i][j][k]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
if (A3[i][j][k] != i*NL/10 + j*NL/100 + k)
|
|
||||||
erri = Min(erri, i*NL/10 + j*NL/100 + k);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A3);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------DISTR41*/
|
|
||||||
/*DISTRIBUTE arrA4[WGT_BLOCK][*][WGT_BLOCK][WGT_BLOCK]
|
|
||||||
REDISTRIBUTE arrA4[BLOCK][WGT_BLOCK][BLOCK][*]*/
|
|
||||||
void distrwgt41()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
#define AN4 8
|
|
||||||
double wb1[6] = {2.0, 1., 1., 3.0, 2., 1.};
|
|
||||||
double wb2[8] = {1.0, 1., 2., 2.0, 1., 1., 2., 2.};
|
|
||||||
double wb3[6] = {2.0, 2., 2., 3.0, 1., 1.};
|
|
||||||
#pragma dvm array
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
char tname[] = "distrwgt41";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
A4 = malloc(AN1 * AN2 * AN3 * AN4 * sizeof(int));
|
|
||||||
#pragma dvm redistribute(A4[wgtblock(wb1, 6)][*][wgtblock(wb2, 8)][wgtblock(wb3, 6)])
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
A4[i][j][k][n] = i*NL/10+j*NL/100+k*NL/1000+n;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm redistribute(A4[block][wgtblock(wb3, 6)][block][*])
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][k][n] on A4[i][j][k][n]) reduction(min(erri)), cuda_block(256)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (k = 0; k < AN3; k++)
|
|
||||||
for (n = 0; n < AN4; n++)
|
|
||||||
if (A4[i][j][k][n] != i*NL/10+j*NL/100+k*NL/1000+n)
|
|
||||||
erri = Min(erri, i*NL/10+j*NL/100+k*NL/1000+n);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
free(A4);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,181 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function fopen
|
|
||||||
FOR DISTRIBUTED ARRAY A[N].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void fop1101();
|
|
||||||
static void fop1102();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START TFOPEN11========================\n");
|
|
||||||
fop1101();
|
|
||||||
fop1102();
|
|
||||||
|
|
||||||
printf("=== END OF TFOPEN11 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* -------------------------------------------------fop1101 */
|
|
||||||
void fop1101()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FOPEN_1101";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARFOP01_%04d.txt", "wl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFOP01_%%4d.txt \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (i=0;i<=N-1;i++) {
|
|
||||||
#pragma dvm remote_access(A[i])
|
|
||||||
{
|
|
||||||
na=A[i];
|
|
||||||
}
|
|
||||||
ni=fprintf(fp, "%d ", na);
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARFOP01_%04d.txt", "rl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFOP_%%4d.txt \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
ni=fscanf(fp, "%d ",&nb);
|
|
||||||
B[i]=nb;
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
dvmh_remove_local("ARFOP01_%04d.txt");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/* -------------------------------------------------fop1102 */
|
|
||||||
void fop1102()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FOPEN_1102";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARFOP02.txt", "wp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFOP02.txt \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (i=0;i<=N-1;i++) {
|
|
||||||
#pragma dvm remote_access(A[i])
|
|
||||||
{
|
|
||||||
na=A[i];
|
|
||||||
}
|
|
||||||
ni=fprintf(fp, "%d ", na);
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARFOP02.txt", "rp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFOP02.txt \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
ni=fscanf(fp, "%d ",&nb);
|
|
||||||
B[i]=nb;
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARFOP02.txt");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function fprintf and fscanf
|
|
||||||
FOR DISTRIBUTED ARRAY A[N].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define NL 1000
|
|
||||||
static void prsc1101();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START fpsc11========================\n");
|
|
||||||
prsc1101();
|
|
||||||
|
|
||||||
printf("=== END OF fpsc11 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------prsc1101 */
|
|
||||||
void prsc1101()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FPRINT_FSCANF_1101";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARFPSC11", "wb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFPSC11\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (i=0;i<=N-1;i++) {
|
|
||||||
#pragma dvm remote_access(A[i])
|
|
||||||
{
|
|
||||||
na=A[i];
|
|
||||||
}
|
|
||||||
ni=fprintf(fp, "%d ", na);
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARFPSC11", "rb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFPSC11\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
ni=fscanf(fp, "%d ",&nb);
|
|
||||||
B[i]=nb;
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARFPSC11");
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function fprintf and fscanf
|
|
||||||
FOR DISTRIBUTED ARRAY A[N].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define NL 1000
|
|
||||||
static void prsc1201();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START fpsc12========================\n");
|
|
||||||
prsc1201();
|
|
||||||
|
|
||||||
printf("=== END OF fpsc12 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------prsc1201 */
|
|
||||||
void prsc1201()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FPRINT_FSCANF_1201";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARFPSC12", "wb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFPSC12\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (i=0;i<=N-1;i++) {
|
|
||||||
#pragma dvm remote_access(A[i])
|
|
||||||
{
|
|
||||||
na=A[i];
|
|
||||||
}
|
|
||||||
ni=fprintf(fp, "%d ", na);
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARFPSC12", "rb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFPSC12\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
ni=fscanf(fp, "%d ",&nb);
|
|
||||||
B[i]=nb;
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARFPSC12");
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,112 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function fprintf and fscanf
|
|
||||||
FOR DISTRIBUTED ARRAY A[N][M].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define M 4
|
|
||||||
#define NL 1000
|
|
||||||
static void prsc2101();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START fpsc21========================\n");
|
|
||||||
prsc2101();
|
|
||||||
|
|
||||||
printf("=== END OF fpsc21 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------prsc2101 */
|
|
||||||
void prsc2101()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FPRINT_FSCANF_2101";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array align ([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARFPSC21", "wb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFPSC21 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[i][j])
|
|
||||||
{
|
|
||||||
na=A[i][j];
|
|
||||||
}
|
|
||||||
ni=fprintf(fp, "%d ", na);
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARFPSC21", "rb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFPSC21 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{
|
|
||||||
ni=fscanf(fp, "%d ",&nb);
|
|
||||||
B[i][j]=nb;
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARFPSC21");
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,112 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function fprintf and fscanf
|
|
||||||
FOR DISTRIBUTED ARRAY A[N][M].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define M 4
|
|
||||||
#define NL 1000
|
|
||||||
static void prsc2201();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START fpsc22========================\n");
|
|
||||||
prsc2201();
|
|
||||||
|
|
||||||
printf("=== END OF fpsc22 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------prsc2201 */
|
|
||||||
void prsc2201()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FPRINT_FSCANF_2201";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array align ([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARFPSC22", "wb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFPSC22 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[i][j])
|
|
||||||
{
|
|
||||||
na=A[i][j];
|
|
||||||
}
|
|
||||||
ni=fprintf(fp, "%d ", na);
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARFPSC22", "rb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARFPSC22 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{
|
|
||||||
ni=fscanf(fp, "%d ",&nb);
|
|
||||||
B[i][j]=nb;
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARFPSC22");
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,236 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function fwrite and fread
|
|
||||||
FOR DISTRIBUTED ARRAY A[N].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define NL 1000
|
|
||||||
static void wrre1101();
|
|
||||||
static void wrre1102();
|
|
||||||
static void wrre1103();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START fwrre11========================\n");
|
|
||||||
wrre1101();
|
|
||||||
wrre1102();
|
|
||||||
wrre1103();
|
|
||||||
|
|
||||||
printf("=== END OF fwrre11 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre1101 */
|
|
||||||
void wrre1101()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_1101";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE01", "wb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fwrite(A, sizeof(int), N, fp)!=N)
|
|
||||||
printf("ERROR WRITING FILE ARWRRE01\n");
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE01", "rb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
if (fread(B, sizeof(int), N, fp)!=N)
|
|
||||||
{
|
|
||||||
if(feof(fp)) printf("PREMATURE END OF FILE ARWRRE01");
|
|
||||||
else printf("ERROR READING FILE ARWRRE01\n");
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE01");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------wrre1102 */
|
|
||||||
void wrre1102()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_1102";
|
|
||||||
int i,nloopi,ni,nb,na,K;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE02_%04d", "wbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K=fwrite(A, sizeof(int), N, fp);
|
|
||||||
// printf("NUMBER=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE02_%04d", "rbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
K=fread(B, sizeof(int), N, fp);
|
|
||||||
// printf("NUMBER1=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
dvmh_remove_local("ARWRRE02_%04d");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre1103 */
|
|
||||||
void wrre1103()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_1103";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE03", "wbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fwrite(A, sizeof(int), N, fp)!=N)
|
|
||||||
printf("ERROR WRITING FILE ARWRRE01\n");
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE03", "rbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
if (fread(B, sizeof(int), N, fp)!=N)
|
|
||||||
{
|
|
||||||
if(feof(fp)) printf("PREMATURE END OF FILE ARWRRE01");
|
|
||||||
else printf("ERROR READING FILE ARWRRE01\n");
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE03");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,236 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function fwrite and fread
|
|
||||||
FOR LOCAL ARRAY A[N].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define NL 1000
|
|
||||||
static void wrre1201();
|
|
||||||
static void wrre1202();
|
|
||||||
static void wrre1203();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START fwrre12========================\n");
|
|
||||||
wrre1201();
|
|
||||||
wrre1202();
|
|
||||||
wrre1203();
|
|
||||||
|
|
||||||
printf("=== END OF fwrre12 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre1201 */
|
|
||||||
void wrre1201()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_1201";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE01", "wb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fwrite(A, sizeof(int), N, fp)!=N)
|
|
||||||
printf("ERROR WRITING FILE ARWRRE01\n");
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE01", "rb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
if (fread(B, sizeof(int), N, fp)!=N)
|
|
||||||
{
|
|
||||||
if(feof(fp)) printf("PREMATURE END OF FILE ARWRRE01");
|
|
||||||
else printf("ERROR READING FILE ARWRRE01\n");
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE01");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------wrre1202 */
|
|
||||||
void wrre1202()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_1202";
|
|
||||||
int i,nloopi,ni,nb,na,K;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE02_%04d", "wbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K=fwrite(A, sizeof(int), N, fp);
|
|
||||||
// printf("NUMBER=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE02_%04d", "rbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
K=fread(B, sizeof(int), N, fp);
|
|
||||||
// printf("NUMBER1=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
dvmh_remove_local("ARWRRE02_%04d");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre1203 */
|
|
||||||
void wrre1203()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_1203";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE03", "wbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fwrite(A, sizeof(int), N, fp)!=N)
|
|
||||||
printf("ERROR WRITING FILE ARWRRE01\n");
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE03", "rbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
if (fread(B, sizeof(int), N, fp)!=N)
|
|
||||||
{
|
|
||||||
if(feof(fp)) printf("PREMATURE END OF FILE ARWRRE01");
|
|
||||||
else printf("ERROR READING FILE ARWRRE01\n");
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE03");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,242 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function fwrite and fread
|
|
||||||
FOR DISTRIBUTED ARRAY A[N][M].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define M 16
|
|
||||||
#define NL 1000
|
|
||||||
static void wrre2101();
|
|
||||||
static void wrre2102();
|
|
||||||
static void wrre2103();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START fwrre21========================\n");
|
|
||||||
wrre2101();
|
|
||||||
wrre2102();
|
|
||||||
wrre2103();
|
|
||||||
|
|
||||||
printf("=== END OF fwrre21 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre2101 */
|
|
||||||
void wrre2101()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2101";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array align ([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE01", "wb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fwrite(A, sizeof(int), N*M, fp)!=N*M)
|
|
||||||
printf("ERROR WRITING FILE ARWRRE01\n");
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE01", "rb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
if (fread(B, sizeof(int), N*M, fp)!=N*M)
|
|
||||||
{
|
|
||||||
if(feof(fp)) printf("PREMATURE END OF FILE ARWRRE01");
|
|
||||||
else printf("ERROR READING FILE ARWRRE01\n");
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE01");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi),min(nloopj))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------wrre2102 */
|
|
||||||
void wrre2102()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2102";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na,K;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array align ([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE02_%04d", "wbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K=fwrite(A, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE02_%04d", "rbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
K=fread(B, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER1=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
dvmh_remove_local("ARWRRE02_%04d");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre2103 */
|
|
||||||
void wrre2103()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2103";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na,K;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array align ([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE03_%04d", "wbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE03_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K=fwrite(A, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE03_%04d", "rbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
K=fread(B, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER1=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE03_%04d");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,242 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function fwrite and fread
|
|
||||||
FOR DISTRIBUTED ARRAY A[N][M].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define M 16
|
|
||||||
#define NL 1000
|
|
||||||
static void wrre2201();
|
|
||||||
static void wrre2202();
|
|
||||||
static void wrre2203();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START fwrre22========================\n");
|
|
||||||
wrre2201();
|
|
||||||
wrre2202();
|
|
||||||
wrre2203();
|
|
||||||
|
|
||||||
printf("=== END OF fwrre22 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre2201 */
|
|
||||||
void wrre2201()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2201";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array align ([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE01", "wb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fwrite(A, sizeof(int), N*M, fp)!=N*M)
|
|
||||||
printf("ERROR WRITING FILE ARWRRE01\n");
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE01", "rb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
if (fread(B, sizeof(int), N*M, fp)!=N*M)
|
|
||||||
{
|
|
||||||
if(feof(fp)) printf("PREMATURE END OF FILE ARWRRE01");
|
|
||||||
else printf("ERROR READING FILE ARWRRE01\n");
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE01");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi),min(nloopj))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------wrre2202 */
|
|
||||||
void wrre2202()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2202";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na,K;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array align ([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE02_%04d", "wbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K=fwrite(A, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE02_%04d", "rbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
K=fread(B, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER1=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
dvmh_remove_local("ARWRRE02_%04d");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre2203 */
|
|
||||||
void wrre2203()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2203";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na,K;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array align ([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE03_%04d", "wbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE03_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K=fwrite(A, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE03_%04d", "rbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
K=fread(B, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER1=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE03_%04d");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,242 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function fwrite and fread
|
|
||||||
FOR DISTRIBUTED ARRAY A[N][M] AND LOCAL B[N][M].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define M 16
|
|
||||||
#define NL 1000
|
|
||||||
static void wrre2301();
|
|
||||||
static void wrre2302();
|
|
||||||
static void wrre2303();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START fwrre23========================\n");
|
|
||||||
wrre2301();
|
|
||||||
wrre2302();
|
|
||||||
wrre2303();
|
|
||||||
|
|
||||||
printf("=== END OF fwrre23 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre2301 */
|
|
||||||
void wrre2301()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2301";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array distribute[*][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE01", "wb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fwrite(A, sizeof(int), N*M, fp)!=N*M)
|
|
||||||
printf("ERROR WRITING FILE ARWRRE01\n");
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE01", "rb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
if (fread(B, sizeof(int), N*M, fp)!=N*M)
|
|
||||||
{
|
|
||||||
if(feof(fp)) printf("PREMATURE END OF FILE ARWRRE01");
|
|
||||||
else printf("ERROR READING FILE ARWRRE01\n");
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE01");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi),min(nloopj))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------wrre2302 */
|
|
||||||
void wrre2302()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2302";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na,K;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array distribute[*][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE02_%04d", "wbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K=fwrite(A, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE02_%04d", "rbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
K=fread(B, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER1=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
dvmh_remove_local("ARWRRE02_%04d");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre2303 */
|
|
||||||
void wrre2303()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2303";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na,K;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array distribute[*][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE03_%04d", "wbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE03_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K=fwrite(A, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE03_%04d", "rbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
K=fread(B, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER1=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE03_%04d");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,297 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function fwrite and fread
|
|
||||||
FOR DISTRIBUTED ARRAY A[N][M] AND B[N][M].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define M 16
|
|
||||||
#define NL 1000
|
|
||||||
static void wrre2401();
|
|
||||||
static void wrre2402();
|
|
||||||
static void wrre2403();
|
|
||||||
static void wrre2404();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START fwrre24========================\n");
|
|
||||||
wrre2401();
|
|
||||||
wrre2402();
|
|
||||||
wrre2403();
|
|
||||||
wrre2404();
|
|
||||||
|
|
||||||
printf("=== END OF fwrre24 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre2401 */
|
|
||||||
void wrre2401()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2401";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE01", "wb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fwrite(A, sizeof(int), N*M, fp)!=N*M)
|
|
||||||
printf("ERROR WRITING FILE ARWRRE01\n");
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE01", "rb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE01 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
if (fread(B, sizeof(int), N*M, fp)!=N*M)
|
|
||||||
{
|
|
||||||
if(feof(fp)) printf("PREMATURE END OF FILE ARWRRE01");
|
|
||||||
else printf("ERROR READING FILE ARWRRE01\n");
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE01");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi),min(nloopj))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------wrre2402 */
|
|
||||||
void wrre2402()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2402";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na,K;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
int A[N][M];
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE02_%04d", "wbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K=fwrite(A, sizeof(int), N*M, fp);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE02_%04d", "rbl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE02_%%04d\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
K=fread(B, sizeof(int), N*M, fp);
|
|
||||||
fclose(fp);
|
|
||||||
dvmh_remove_local("ARWRRE02_%04d");
|
|
||||||
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre2403 */
|
|
||||||
void wrre2403()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2403";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na,K;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
{ A[i][j] = NL+i+j;
|
|
||||||
B[i][j]=777;
|
|
||||||
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE03", "wbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE03\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K=fwrite(A, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE03", "rbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE03\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
K=fread(B, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER1=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE03");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on A[i][j]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (A[i][j] !=B[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------wrre2404 */
|
|
||||||
void wrre2404()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="FWRITE_FREAD_2404";
|
|
||||||
int i,j,nloopi,nloopj,ni,nb,na,K;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
nloopj=NL;
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j] on B[i][j])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
B[i][j]=777;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for(j=0;j<=M-1;j++)
|
|
||||||
A[i][j]=NL+i+j;
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARWRRE04", "wbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE04 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K=fwrite(A, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if ((fp=fopen("ARWRRE04", "rbp"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARWRRE04\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
K=fread(B, sizeof(int), N*M, fp);
|
|
||||||
// printf("NUMBER1=%d\n",K);
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARWRRE04");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j] on B[i][j]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
for (j=0;j<=M-1;j++)
|
|
||||||
if (B[i][j] !=A[i][j])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function remove
|
|
||||||
FOR FILEs.
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define NL 1000
|
|
||||||
static void remove1101();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START REMOVE11========================\n");
|
|
||||||
remove1101();
|
|
||||||
|
|
||||||
printf("=== END OF TREMOVE11 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* -------------------------------------------------remove1101 */
|
|
||||||
void remove1101()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="REMOVE_1101";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARREMOVE_1101", "wl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARREMOVE_1101 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (i=0;i<=N-1;i++) {
|
|
||||||
#pragma dvm remote_access(A[i])
|
|
||||||
{
|
|
||||||
na=A[i];
|
|
||||||
}
|
|
||||||
ni=fprintf(fp, "%d ", na);
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
if (remove("ARREMOVE_1101"))
|
|
||||||
ansno(tname);
|
|
||||||
else
|
|
||||||
ansyes(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,182 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function rename
|
|
||||||
FOR DISTRIBUTED ARRAY A[N].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define NL 1000
|
|
||||||
static void rename1101();
|
|
||||||
static void rename1102();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START TRENAME11============================ \n");
|
|
||||||
rename1101();
|
|
||||||
rename1102();
|
|
||||||
printf("=== END OF TRENAME11 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------rename1101 */
|
|
||||||
void rename1101()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="RENAME_1101";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARRENAMEA", "wb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARRENAMEA\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (i=0;i<=N-1;i++) {
|
|
||||||
#pragma dvm remote_access(A[i])
|
|
||||||
{
|
|
||||||
na=A[i];
|
|
||||||
}
|
|
||||||
ni=fprintf(fp, "%d ", na);
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
if(rename("ARRENAMEA", "ARRENAMEB") != 0)
|
|
||||||
printf("ERROR WHEN RENAMING =>,ARRENAMEA,ARRENAMEB\n");
|
|
||||||
if ((fp=fopen("ARRENAMEB", "rb"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARRENAMEB \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
ni=fscanf(fp, "%d ",&nb);
|
|
||||||
B[i]=nb;
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
remove("ARRENAMEB");
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/* -------------------------------------------------rename1102 */
|
|
||||||
void rename1102()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="RENAME_1102";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=fopen("ARRENAMEA2_%04d.txt", "wl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARRENAMEA2.txt \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (i=0;i<=N-1;i++) {
|
|
||||||
#pragma dvm remote_access(A[i])
|
|
||||||
{
|
|
||||||
na=A[i];
|
|
||||||
}
|
|
||||||
ni=fprintf(fp, "%d ", na);
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if (dvmh_rename_local("ARRENAMEA2_%04d.txt", "ARRENAMEB2_%04d.txt") !=0)
|
|
||||||
printf("ERROR WHEN RENAMING =>,ARRENAMEA2,ARRENAMEB2\n");
|
|
||||||
|
|
||||||
if ((fp=fopen("ARRENAMEB2_%04d.txt", "rl"))==NULL) {
|
|
||||||
printf("ERROR OPENING FILE ARRENAMEB2.txt \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
// rewind(fp);
|
|
||||||
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
ni=fscanf(fp, "%d ",&nb);
|
|
||||||
B[i]=nb;
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
dvmh_remove_local("ARRENAMEB2_%04d.txt");
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,225 +0,0 @@
|
|||||||
|
|
||||||
/* TESTING OF THE function tmpfile
|
|
||||||
FOR DISTRIBUTED ARRAY A[N].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#define N 8
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void tmpfile1101();
|
|
||||||
static void tmpfile1102();
|
|
||||||
static void tmpfile1103();
|
|
||||||
|
|
||||||
static void ansyes(char tname[]);
|
|
||||||
static void ansno(char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START TMPFILE11========================\n");
|
|
||||||
tmpfile1101();
|
|
||||||
tmpfile1102();
|
|
||||||
tmpfile1103();
|
|
||||||
|
|
||||||
printf("=== END OF TMPFILE11 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* -------------------------------------------------tmpfile1101 */
|
|
||||||
void tmpfile1101()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="TMPFILE_1101";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=tmpfile())==NULL) {
|
|
||||||
printf("ERROR OPENING TMPFILE01 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (i=0;i<=N-1;i++) {
|
|
||||||
#pragma dvm remote_access(A[i])
|
|
||||||
{
|
|
||||||
na=A[i];
|
|
||||||
}
|
|
||||||
ni=fprintf(fp, "%d ", na);
|
|
||||||
}
|
|
||||||
rewind(fp);
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
ni=fscanf(fp, "%d ",&nb);
|
|
||||||
B[i]=nb;
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------tmpfile1102 */
|
|
||||||
void tmpfile1102()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="TMPFILE_1102";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
if((fp=tmpfile())==NULL) {
|
|
||||||
printf("ERROR OPENING TMPFILE02 \n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fwrite(A, sizeof(int), N, fp)!=N)
|
|
||||||
printf("ERROR WRITING FILE TMPFILE02\n");
|
|
||||||
rewind(fp);
|
|
||||||
|
|
||||||
if (fread(B, sizeof(int), N, fp)!=N)
|
|
||||||
{
|
|
||||||
if(feof(fp)) printf("PREMATURE END OF FILE ARWRRE01");
|
|
||||||
else printf("ERROR READING FILE ARWRRE01\n");
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------tmpfile1103 */
|
|
||||||
void tmpfile1103()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
char tname[]="TMPFILE_1103";
|
|
||||||
int i,nloopi,ni,nb,na;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align ([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nloopi=NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A,B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i] on A[i])
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{ A[i] = NL+i;
|
|
||||||
B[i]=777;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A,B)
|
|
||||||
|
|
||||||
fp=dvmh_tmpfile_local();
|
|
||||||
|
|
||||||
if (fwrite(A, sizeof(int), N, fp)!=N)
|
|
||||||
printf("ERROR WRITING FILE TMPFILE02\n");
|
|
||||||
rewind(fp);
|
|
||||||
|
|
||||||
if (fread(B, sizeof(int), N, fp)!=N)
|
|
||||||
{
|
|
||||||
if(feof(fp)) printf("PREMATURE END OF FILE ARWRRE01");
|
|
||||||
else printf("ERROR READING FILE ARWRRE01\n");
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i=0;i<=N-1;i++)
|
|
||||||
{
|
|
||||||
if (A[i] !=B[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
}
|
|
||||||
// printf ("nloopi=%d\n", nloopi);
|
|
||||||
if (nloopi == NL )
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ansyes(char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
void ansno(char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n",name);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
@@ -1,285 +0,0 @@
|
|||||||
/* TESTING OF THE OWN CALCULASHION
|
|
||||||
FOR DISTRIBUTED ARRAY A[N].
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define N 32
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void owncal1101();
|
|
||||||
static void owncal1102();
|
|
||||||
static void owncal1103();
|
|
||||||
static void owncal1104();
|
|
||||||
static void owncal1105();
|
|
||||||
static void owncal1106();
|
|
||||||
|
|
||||||
static void serial(int AR[], int NN, int NNL);
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START OF OWNCAL11========================\n");
|
|
||||||
owncal1101();
|
|
||||||
owncal1102();
|
|
||||||
owncal1103();
|
|
||||||
owncal1104();
|
|
||||||
owncal1105();
|
|
||||||
owncal1106();
|
|
||||||
|
|
||||||
printf("=== END OF OWNCAL11 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL1101 */
|
|
||||||
void owncal1101()
|
|
||||||
{
|
|
||||||
int C[N];
|
|
||||||
char tname[] = "OWN1101";
|
|
||||||
int i, NN, NNL, nloopi;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial(C, NN, NNL);
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL1102 */
|
|
||||||
void owncal1102()
|
|
||||||
{
|
|
||||||
int C[N];
|
|
||||||
char tname[] = "OWN1102";
|
|
||||||
int i, NN, NNL, nloopi;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial(C, NN, NNL);
|
|
||||||
C[0] = N + NL + 2;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
A[0]=N+NL+2;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL1103 */
|
|
||||||
void owncal1103()
|
|
||||||
{
|
|
||||||
int C[N];
|
|
||||||
char tname[] = "OWN1103";
|
|
||||||
int i, NN, NNL, nloopi, ni;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial(C, NN, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
C[ni] = N + NL + 3;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
#pragma dvm actual(ni)
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
A[ni] = N + NL + 3;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL1104 */
|
|
||||||
void owncal1104()
|
|
||||||
{
|
|
||||||
int C[N];
|
|
||||||
char tname[] = "OWN1104";
|
|
||||||
int i, NN, NNL, nloopi, ni;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial(C, NN, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
C[ni+1] = N + NL + 4;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
A[ni + 1] = N + NL + 4;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL1105 */
|
|
||||||
void owncal1105()
|
|
||||||
{
|
|
||||||
int C[N];
|
|
||||||
char tname[] = "OWN1105";
|
|
||||||
int i, NN, NNL, nloopi, ni;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial(C, NN, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
C[ni - 1] = -(N + NL + 5);
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
A[ni - 1] = -(N + NL + 5);
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL1106 */
|
|
||||||
void owncal1106()
|
|
||||||
{
|
|
||||||
int C[N];
|
|
||||||
char tname[] = "OWN1106";
|
|
||||||
int i, NN, NNL, nloopi, ni;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial(C, NN, NNL);
|
|
||||||
C[N - 1] = N + NL + 6;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
A[N - 1] = N + NL + 1;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(nloopi))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
if (A[i] != C[i])
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopi == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
void serial(int AR[], int NN, int NNL)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
AR[i] = NNL+i;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,520 +0,0 @@
|
|||||||
/* TESTING OF THE OWN CALCULASHION
|
|
||||||
FOR DISTRIBUTED ARRAY A[N][M].
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define N 32
|
|
||||||
#define M 32
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void owncal2101();
|
|
||||||
static void owncal2102();
|
|
||||||
static void owncal2103();
|
|
||||||
static void owncal2104();
|
|
||||||
static void owncal2105();
|
|
||||||
static void owncal2106();
|
|
||||||
static void owncal2107();
|
|
||||||
static void owncal2108();
|
|
||||||
static void owncal2109();
|
|
||||||
static void owncal2110();
|
|
||||||
|
|
||||||
static void serial2(int AR[][M], int NN, int NM, int NNL);
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START OF OWNCAL21========================\n");
|
|
||||||
owncal2101();
|
|
||||||
owncal2102();
|
|
||||||
owncal2103();
|
|
||||||
owncal2104();
|
|
||||||
owncal2105();
|
|
||||||
owncal2106();
|
|
||||||
owncal2107();
|
|
||||||
owncal2108();
|
|
||||||
owncal2109();
|
|
||||||
owncal2110();
|
|
||||||
|
|
||||||
printf("=== END OF OWNCAL21 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL2101 */
|
|
||||||
void owncal2101()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "OWN2101";
|
|
||||||
int i, j, NN, NM, NNL, nloopi, nloopj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL2102 */
|
|
||||||
void owncal2102()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "OWN2102";
|
|
||||||
int i, j, NN, NM, NNL, nloopi, nloopj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
C[0][0] = N + M + NL + 1;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
A[0][0] = N + M + NL + 1;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL2103 */
|
|
||||||
void owncal2103()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "OWN2103";
|
|
||||||
int i, j, NN, NM, NNL, nloopi, nloopj, ni, nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
C[ni][nj] = N + M + NL + 1;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
#pragma dvm actual(ni,nj)
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni, nj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
A[ni][nj] = N + M + NL + 1;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL2104 */
|
|
||||||
void owncal2104()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "OWN2104";
|
|
||||||
int i, j, NN, NM, NNL, nloopi, nloopj, ni, nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
C[ni + 1][nj + 1] = N + M + NL + 1;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni, nj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
A[ni + 1][nj + 1] = N + M + NL + 1;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL2105 */
|
|
||||||
void owncal2105()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "OWN2105";
|
|
||||||
int i, j, NN, NM, NNL, nloopi, nloopj, ni, nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2 ;
|
|
||||||
C[ni - 1][nj - 1] = -(N + M + NL + 1);
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni, nj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
A[ni - 1][nj - 1] = -(N + M + NL + 1);
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL2106 */
|
|
||||||
void owncal2106()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "OWN2106";
|
|
||||||
int i, j, NN, NM, NNL, nloopi, nloopj, ni, nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2 ;
|
|
||||||
C[ni + 1][nj - 1] = N + M + NL + 1;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni, nj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
A[ni + 1][nj - 1] = N + M + NL + 1;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL2107 */
|
|
||||||
void owncal2107()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "OWN2107";
|
|
||||||
int i, j, NN, NM, NNL, nloopi, nloopj, ni, nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2 ;
|
|
||||||
C[ni - 1][nj + 1] = N + M + NL + 1;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni, nj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
A[ni - 1][nj + 1] = N + M + NL + 1;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL2108 */
|
|
||||||
void owncal2108()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "OWN2108";
|
|
||||||
int i, j, NN, NM, NNL, nloopi, nloopj, ni, nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
|
|
||||||
C[0][M - 1] = N + M + NL + 1;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
A[0][M - 1] = N + M + NL + 1;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL2109 */
|
|
||||||
void owncal2109()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "OWN2109";
|
|
||||||
int i, j, NN, NM, NNL, nloopi, nloopj, ni, nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
C[N - 1][0] = N + M + NL + 1;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
A[N - 1][0] = N + M + NL + 1;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL2110 */
|
|
||||||
void owncal2110()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "OWN2110";
|
|
||||||
int i, j, NN, NM, NNL, nloopi, nloopj, ni, nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nj = M / 2;
|
|
||||||
C[0][nj + 1] = N + M + NL + 1;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(nj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
A[0][nj + 1] = N + M + NL + 1;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(nloopi), min(nloopj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
if (A[i][j] != C[i][j]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
void serial2(int AR[][M], int NN, int NM, int NNL)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
AR[i][j] = NNL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,611 +0,0 @@
|
|||||||
/* TESTING OF THE OWN CALCULASHION
|
|
||||||
FOR DISTRIBUTED ARRAY A[N][M].
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define N 32
|
|
||||||
#define M 32
|
|
||||||
#define K 32
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void owncal3101();
|
|
||||||
static void owncal3102();
|
|
||||||
static void owncal3103();
|
|
||||||
static void owncal3104();
|
|
||||||
static void owncal3105();
|
|
||||||
static void owncal3106();
|
|
||||||
static void owncal3107();
|
|
||||||
static void owncal3108();
|
|
||||||
static void owncal3109();
|
|
||||||
static void owncal3110();
|
|
||||||
|
|
||||||
static void serial3(int AR[][M][K], int NN, int NM, int NK, int NNL);
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START OF OWNCAL31========================\n");
|
|
||||||
owncal3101();
|
|
||||||
owncal3102();
|
|
||||||
owncal3103();
|
|
||||||
owncal3104();
|
|
||||||
owncal3105();
|
|
||||||
owncal3106();
|
|
||||||
owncal3107();
|
|
||||||
owncal3108();
|
|
||||||
owncal3109();
|
|
||||||
owncal3110();
|
|
||||||
|
|
||||||
printf("=== END OF OWNCAL31 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL3101 */
|
|
||||||
void owncal3101()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
char tname[] = "OWN3101";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL, nloopi, nloopj, nloopii;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------OWNCAL3102 */
|
|
||||||
void owncal3102()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
char tname[] = "OWN3102";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL, nloopi, nloopj, nloopii;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
C[0][0][0] = N + M + K + NL + 2;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
A[0][0][0] = N + M + K + NL + 2;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL3103 */
|
|
||||||
void owncal3103()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
char tname[] = "OWN3103";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL, nloopi, nloopj, nloopii;
|
|
||||||
int ni, nj, nii;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
nii = K / 2;
|
|
||||||
|
|
||||||
C[ni][nj][nii] = N + M + K + NL + 3;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(ni, nj, nii)
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni, nj, nii)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
A[ni][nj][nii] = N + M + K + NL + 3;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------OWNCAL3104 */
|
|
||||||
void owncal3104()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
char tname[] = "OWN3104";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL, nloopi, nloopj, nloopii;
|
|
||||||
int ni, nj, nii;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
nii = K / 2;
|
|
||||||
|
|
||||||
C[ni + 1][nj + 1][nii + 1] = N + M + K + NL + 4;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(ni, nj, nii)
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni, nj, nii)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
A[ni + 1][nj + 1][nii + 1] = N + M + K + NL + 4;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------OWNCAL3105 */
|
|
||||||
void owncal3105()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
char tname[] = "OWN3105";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL, nloopi, nloopj, nloopii;
|
|
||||||
int ni, nj, nii;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
nii = K / 2;
|
|
||||||
|
|
||||||
C[ni - 1][nj - 1][nii - 1] = -(N + M + K + NL + 5);
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(ni, nj, nii)
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni, nj, nii)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
A[ni - 1][nj - 1][nii - 1] = -(N + M + K + NL + 5);
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL3106 */
|
|
||||||
void owncal3106()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
char tname[] = "OWN3106";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL, nloopi, nloopj, nloopii;
|
|
||||||
int ni, nj, nii;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
nii = K / 2;
|
|
||||||
|
|
||||||
C[ni + 1][nj - 1][nii + 1] = N + M + K + NL + 6;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(ni, nj, nii)
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni, nj, nii)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
A[ni + 1][nj - 1][nii + 1] = N + M + K + NL + 6;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------OWNCAL3107 */
|
|
||||||
void owncal3107()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
char tname[] = "OWN3107";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL, nloopi, nloopj, nloopii;
|
|
||||||
int ni, nj, nii;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
nii = K / 2;
|
|
||||||
|
|
||||||
C[ni - 1][nj + 1][nii - 1] = N + M + K + NL + 7;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(ni, nj, nii)
|
|
||||||
|
|
||||||
#pragma dvm region out(A), in(ni, nj, nii)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
A[ni - 1][nj + 1][nii - 1] = N + M + K + NL + 7;
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL3108 */
|
|
||||||
void owncal3108()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
char tname[] = "OWN3108";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL, nloopi, nloopj, nloopii;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
|
|
||||||
C[0][M - 1][K - 1] = N + M + K + NL + 8;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
A[0][M - 1][K - 1] = N + M + K + NL + 8;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------OWNCAL3109 */
|
|
||||||
void owncal3109()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
char tname[] = "OWN3109";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL, nloopi, nloopj, nloopii;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
|
|
||||||
C[N - 1][M - 1][0] = N + M + K + NL + 9;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
A[N - 1][M - 1][0] = N + M + K + NL + 9;
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------OWNCAL3110 */
|
|
||||||
void owncal3110()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
char tname[] = "OWN3110";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL, nloopi, nloopj, nloopii;
|
|
||||||
int nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
|
|
||||||
nj = M / 2;
|
|
||||||
C[0][nj + 1][K - 1] = N + M + K + NL + 10;
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(nj)
|
|
||||||
#pragma dvm region out(A), in(nj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
|
|
||||||
A[0][nj + 1][K - 1] = N + M + K + NL + 10;
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
if (A[i][j][ii] != C[i][j][ii]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void serial3(int AR[][M][K], int NN, int NM, int NK, int NNL)
|
|
||||||
{
|
|
||||||
int i,j,ii;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
for (ii = 0; ii < NK; ii++)
|
|
||||||
AR[i][j][ii] = NNL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,656 +0,0 @@
|
|||||||
/* TESTING OF THE OWN CALCULASHION
|
|
||||||
FOR DISTRIBUTED ARRAY A[N][M][K][L].
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define N 32
|
|
||||||
#define M 32
|
|
||||||
#define K 32
|
|
||||||
#define L 32
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void owncal4101();
|
|
||||||
static void owncal4102();
|
|
||||||
static void owncal4103();
|
|
||||||
static void owncal4104();
|
|
||||||
static void owncal4105();
|
|
||||||
static void owncal4106();
|
|
||||||
static void owncal4107();
|
|
||||||
static void owncal4108();
|
|
||||||
static void owncal4109();
|
|
||||||
static void owncal4110();
|
|
||||||
|
|
||||||
static void serial4(int AR[][M][K][L], int NN, int NM, int NK, int NLL, int NNL);
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START OF OWNCAL41========================\n");
|
|
||||||
owncal4101();
|
|
||||||
owncal4102();
|
|
||||||
owncal4103();
|
|
||||||
owncal4104();
|
|
||||||
owncal4105();
|
|
||||||
owncal4106();
|
|
||||||
owncal4107();
|
|
||||||
owncal4108();
|
|
||||||
owncal4109();
|
|
||||||
owncal4110();
|
|
||||||
|
|
||||||
printf("=== END OF OWNCAL41 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL4101 */
|
|
||||||
void owncal4101()
|
|
||||||
{
|
|
||||||
int C[N][M][K][L];
|
|
||||||
char tname[] = "OWN4101";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------OWNCAL4102 */
|
|
||||||
void owncal4102()
|
|
||||||
{
|
|
||||||
int C[N][M][K][L];
|
|
||||||
char tname[] = "OWN4102";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
C[0][0][0][0] = N + M + K + L + NL + 2;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
A[0][0][0][0] = N + M + K + L + NL + 2;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------OWNCAL4103 */
|
|
||||||
void owncal4103()
|
|
||||||
{
|
|
||||||
int C[N][M][K][L];
|
|
||||||
char tname[] = "OWN4103";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
int ni, nj, nii, njj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
nii = K / 2;
|
|
||||||
njj = L / 2;
|
|
||||||
|
|
||||||
C[ni][nj][nii][njj] = N + M + K + L + NL + 3;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(ni, nj, nii, njj)
|
|
||||||
#pragma dvm region out(A), in(ni, nj, nii, njj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
A[ni][nj][nii][njj] = N + M + K + L + NL + 3;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------OWNCAL4104 */
|
|
||||||
void owncal4104()
|
|
||||||
{
|
|
||||||
int C[N][M][K][L];
|
|
||||||
char tname[] = "OWN4104";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
int ni, nj, nii, njj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
nii = K / 2;
|
|
||||||
njj = L / 2;
|
|
||||||
|
|
||||||
C[ni + 1][nj + 1][nii + 1][njj + 1] = N + M + K + L + NL + 4;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(ni, nj, nii, njj)
|
|
||||||
#pragma dvm region out(A), in(ni, nj, nii, njj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
A[ni + 1][nj + 1][nii + 1][njj + 1] = N + M + K + L + NL + 4;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------OWNCAL4105 */
|
|
||||||
void owncal4105()
|
|
||||||
{
|
|
||||||
int C[N][M][K][L];
|
|
||||||
char tname[] = "OWN4105";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
int ni, nj, nii, njj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
nii = K / 2;
|
|
||||||
njj = L / 2;
|
|
||||||
|
|
||||||
C[ni - 1][nj - 1][nii - 1][njj - 1] = -(N + M + K + L + NL + 5);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(ni, nj, nii, njj)
|
|
||||||
#pragma dvm region out(A), in(ni, nj, nii, njj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
A[ni - 1][nj - 1][nii - 1][njj - 1] = -(N + M + K + L + NL + 5);
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------OWNCAL4106 */
|
|
||||||
void owncal4106()
|
|
||||||
{
|
|
||||||
int C[N][M][K][L];
|
|
||||||
char tname[] = "OWN4106";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
int ni, nj, nii, njj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
nii = K / 2;
|
|
||||||
njj = L / 2;
|
|
||||||
|
|
||||||
C[ni - 1][nj + 1][nii - 1][njj + 1] = N + M + K + L + NL + 6;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(ni, nj, nii, njj)
|
|
||||||
#pragma dvm region out(A), in(ni, nj, nii, njj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
A[ni - 1][nj + 1][nii - 1][njj + 1] = N + M + K + L + NL + 6;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL4107 */
|
|
||||||
void owncal4107()
|
|
||||||
{
|
|
||||||
int C[N][M][K][L];
|
|
||||||
char tname[] = "OWN4107";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
int ni, nj, nii, njj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
ni = N / 2;
|
|
||||||
nj = M / 2;
|
|
||||||
nii = K / 2;
|
|
||||||
njj = L / 2;
|
|
||||||
|
|
||||||
C[ni + 1][nj - 1][nii + 1][njj - 1] = N + M + K + L + NL + 7;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(ni, nj, nii, njj)
|
|
||||||
#pragma dvm region out(A), in(ni, nj, nii, njj)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
A[ni + 1][nj - 1][nii + 1][njj - 1] = N + M + K + L + NL + 7;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL4108 */
|
|
||||||
void owncal4108()
|
|
||||||
{
|
|
||||||
int C[N][M][K][L];
|
|
||||||
char tname[] = "OWN4108";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
|
|
||||||
C[0][M - 1][0][L - 1] = N + M + K + L + NL + 8;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
A[0][M - 1][0][L - 1] = N + M + K + L + NL + 8;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL4109 */
|
|
||||||
void owncal4109()
|
|
||||||
{
|
|
||||||
int C[N][M][K][L];
|
|
||||||
char tname[] = "OWN4109";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
|
|
||||||
C[N - 1][0][K - 1][0] = N + M + K + L + NL + 9;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
A[N][0][K - 1][0] = N + M + K + L + NL + 9;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------OWNCAL4110 */
|
|
||||||
void owncal4110()
|
|
||||||
{
|
|
||||||
int C[N][M][K][L];
|
|
||||||
char tname[] = "OWN4110";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
|
|
||||||
C[0][0][K - 1][L - 1] = N + M + K + L + NL + 10;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
A[0][0][K - 1][L - 1] = N + M + K + L + NL + 10;
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
if (A[i][j][ii][jj] != C[i][j][ii][jj]) {
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
void serial4(int AR[][M][K][L], int NN, int NM, int NK, int NLL, int NNL)
|
|
||||||
{
|
|
||||||
int i, j, ii, jj;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
for (ii = 0; ii < NK; ii++)
|
|
||||||
for (jj = 0; jj < NLL; jj++)
|
|
||||||
AR[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
DVM_ONLY=1
|
|
||||||
@@ -1,340 +0,0 @@
|
|||||||
/* PARALLEL1
|
|
||||||
Testing PARALLEL directive */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void parallel11();
|
|
||||||
static void parallel12();
|
|
||||||
static void parallel13();
|
|
||||||
static void parallel131();
|
|
||||||
static void parallel14();
|
|
||||||
static void parallel15();
|
|
||||||
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno (const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
|
|
||||||
static int erri, i, j, ia;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF PARALLEL1 ===================\n");
|
|
||||||
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[i+4] normal */
|
|
||||||
parallel11();
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[-i+8] reverse */
|
|
||||||
// parallel12();
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[2*i+8] stretch */
|
|
||||||
parallel13();
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[2*i+1] small array */
|
|
||||||
parallel131();
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[] */
|
|
||||||
parallel14();
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[2] */
|
|
||||||
parallel15();
|
|
||||||
|
|
||||||
printf ("=== END OF PARALLEL1 ===================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel11 */
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[i+4] normal */
|
|
||||||
void parallel11()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
|
|
||||||
/* parameters for PARALLEL arrA1[k1i * i + li] */
|
|
||||||
int k1i = 1;
|
|
||||||
int li = 4;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
char tname[] = "paral11 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region local(A1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[k1i * i + li]) private(ia), reduction(min(erri))
|
|
||||||
for (i = 0; i < ((AN1-li)/k1i); i++)
|
|
||||||
{
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel12 */
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[-i+8] reverse */
|
|
||||||
void parallel12()
|
|
||||||
{
|
|
||||||
#define AN1 7
|
|
||||||
|
|
||||||
/* parameters for PARALLEL arrA1[k1i * i + li] */
|
|
||||||
int k1i = -1;
|
|
||||||
int li = 8;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
char tname[] = "paral12 ";
|
|
||||||
|
|
||||||
A1 = (int*)malloc(AN1*sizeof(int));
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i * 2;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[k1i * i + li]) private(ia), reduction(min(erri))
|
|
||||||
for (i = 0; i < ((AN1-li)/k1i); i++)
|
|
||||||
{
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != (ia*2))
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free (A1);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel13 */
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[2*i+8] stretch */
|
|
||||||
void parallel13()
|
|
||||||
{
|
|
||||||
#define AN1 20
|
|
||||||
|
|
||||||
/* parameters for PARALLEL arrA1[k1i * i + li]*/
|
|
||||||
int k1i = 2;
|
|
||||||
int li = 8;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
char tname[] = "paral13 ";
|
|
||||||
|
|
||||||
A1 = (int*)malloc(sizeof(int[AN1]));
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i + 5;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[k1i * i + li]) private(ia), reduction(min(erri))
|
|
||||||
for (i = 0; i < ((AN1-li)/k1i); i++)
|
|
||||||
{
|
|
||||||
ia = k1i * i + li;
|
|
||||||
if (A1[ia] != (ia + 5))
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel131 */
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[2*i+1] small array */
|
|
||||||
void parallel131()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
|
|
||||||
/* parameters for PARALLEL arrA1[k1i * i + li] */
|
|
||||||
int k1i = 2;
|
|
||||||
int li = 1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
char tname[] = "paral131";
|
|
||||||
|
|
||||||
A1 = (int*)malloc(AN1*sizeof(int));
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region local(A1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[k1i * i + li]) private(ia), reduction(min(erri))
|
|
||||||
for (i = 0; i < ((AN1-li)/k1i); i++)
|
|
||||||
{
|
|
||||||
ia=k1i * i + li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free (A1);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel14 */
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[] */
|
|
||||||
void parallel14()
|
|
||||||
{
|
|
||||||
#define AN1 20
|
|
||||||
#define BN1 10
|
|
||||||
|
|
||||||
/* parameters for PARALLEL arrA1[*] */
|
|
||||||
#define k1i 0
|
|
||||||
#define li 0
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int *B1;
|
|
||||||
|
|
||||||
char tname[] = "paral14 ";
|
|
||||||
|
|
||||||
A1 = (int*)malloc(AN1*sizeof(int));
|
|
||||||
B1 = (int*)malloc(BN1*sizeof(int));
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region local(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[]) reduction(min(erri))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
if (B1[i] != i)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free (A1);
|
|
||||||
free (B1);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
#undef k1i
|
|
||||||
#undef li
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel15 */
|
|
||||||
/* arrA1[BLOCK] PARALLEL ON arrA[2] */
|
|
||||||
void parallel15()
|
|
||||||
{
|
|
||||||
#define AN1 15
|
|
||||||
|
|
||||||
/* parameters for PARALLEL arrA1[li] */
|
|
||||||
#define k1i 0
|
|
||||||
#define li 2
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
|
|
||||||
char tname[] = "paral15 ";
|
|
||||||
|
|
||||||
A1 = (int(*))malloc(AN1*sizeof(int));
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region local(A1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i])
|
|
||||||
for(i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i] on A1[li]) reduction(min(erri)), private(ia)
|
|
||||||
for(i = 0; i < AN1; i++) {
|
|
||||||
ia = li;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
erri = Min(erri, i);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(A1);
|
|
||||||
#undef AN1
|
|
||||||
#undef k1i
|
|
||||||
#undef li
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-------------------------------------------------------*/
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,253 +0,0 @@
|
|||||||
/* PARALLEL2
|
|
||||||
Testing PARALLEL directive */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void parallel21();
|
|
||||||
static void parallel22();
|
|
||||||
static void parallel23();
|
|
||||||
static void parallel24();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno (const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
|
|
||||||
static int erri,i,j,ia,ja;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF PARALLEL2 ===================\n");
|
|
||||||
|
|
||||||
/* PARALLEL ON arrA[i][2*j] stretching along j */
|
|
||||||
parallel21();
|
|
||||||
/* PARALLEL ON arrA[i+4][j] shift along i */
|
|
||||||
parallel22();
|
|
||||||
/* PARALLEL ON arrA[-i+8][j] reverse on i */
|
|
||||||
// parallel23();
|
|
||||||
/* PARALLEL ON arrA[i+4][j+4] shift along i and j */
|
|
||||||
parallel24();
|
|
||||||
|
|
||||||
printf ("=== END OF PARALLEL2 ===================\n");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel21 */
|
|
||||||
/* PARALLEL ON arrA[i][2*j] stretching along j */
|
|
||||||
void parallel21()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
|
|
||||||
/* parameters for PARALLEL arrA2[k1i * i + li][k2j * j + lj] */
|
|
||||||
int k1i = 1, li = 0;
|
|
||||||
int k2j = 2, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
|
|
||||||
char tname[] = "paral21";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region local(A2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i*NL+j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[k1i*i+li][k2j*j+lj]) private(ia, ja), reduction(min(erri))
|
|
||||||
for (i = 0; i < (AN1-li)/k1i; i++)
|
|
||||||
for (j = 0; j < (AN2-lj)/k2j ; j++)
|
|
||||||
{
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
erri = Min(erri, ia * NL + ja);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel22 */
|
|
||||||
/* PARALLEL ON arrA[i+4][j] shift along i */
|
|
||||||
void parallel22()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 10
|
|
||||||
|
|
||||||
/* parameters for PARALLEL arrA2[k1i * i + li][k2j * j + lj] */
|
|
||||||
int k1i = 1, li = 4;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
|
|
||||||
char tname[] = "paral22";
|
|
||||||
|
|
||||||
A2 = (int(*)[AN2])malloc(AN1*sizeof(int[AN2]));
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j + 2;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[k1i*i+li][k2j*j+lj]) private(ia, ja), reduction(min(erri))
|
|
||||||
for (i = 0; i < (AN1-li) / k1i; i++)
|
|
||||||
for (j = 0; j < (AN2-lj) / k2j; j++)
|
|
||||||
{
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja) + 2)
|
|
||||||
erri = Min(erri, ia * NL + ja);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free (A2);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel23 */
|
|
||||||
/* PARALLEL ON arrA[-i+8][j] reverse on i*/
|
|
||||||
void parallel23()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 14
|
|
||||||
|
|
||||||
/* parameters for PARALLEL arrA2[k1i * i + li][k2j * j + lj] */
|
|
||||||
int k1i = -1, li = 8;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
|
|
||||||
char tname[] = "paral23";
|
|
||||||
|
|
||||||
A2 = (int(*)[AN2])malloc(AN1*AN2*sizeof(int));
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region local(A2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j - 3;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[k1i*i+li][k2j*j+lj]) private(ia, ja), reduction(min(erri))
|
|
||||||
for (i = 0; i < (AN1 - li) / k1i; i++)
|
|
||||||
for (j = 0; j < (AN2 - lj) / k2j; j++)
|
|
||||||
{
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja) - 3)
|
|
||||||
erri = Min(erri, ia * NL + ja);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(A2);
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel24 */
|
|
||||||
/* PARALLEL ON arrA[i+4][j+4] shift along i and j */
|
|
||||||
void parallel24()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 15
|
|
||||||
|
|
||||||
/* parameters for PARALLEL arrA2[k1i * i + li][k2j * j + lj] */
|
|
||||||
int k1i = 1, li = 4;
|
|
||||||
int k2j = 1, lj = 4;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
|
|
||||||
char tname[] = "paral24";
|
|
||||||
|
|
||||||
A2 = malloc(sizeof(int[AN1][AN2]));
|
|
||||||
|
|
||||||
erri= ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region local(A2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[k1i*i+li][k2j*j+lj]) private(ia, ja), reduction(min(erri))
|
|
||||||
for (i = 0; i < (AN1 - li) / k1i; i++)
|
|
||||||
for (j = 0; j < (AN2 - lj) / k2j ; j++)
|
|
||||||
{
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
erri = Min(erri, ia * NL + ja);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free (A2);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-------------------------------------------------------*/
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,518 +0,0 @@
|
|||||||
/* PARALLEL3
|
|
||||||
Testing PARALLEL directive */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void parallel31();
|
|
||||||
static void parallel32();
|
|
||||||
static void parallel33();
|
|
||||||
static void parallel34();
|
|
||||||
static void parallel341();
|
|
||||||
static void parallel35();
|
|
||||||
static void parallel36();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno (const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
|
|
||||||
static int erri,i,j,n,l,ia,ja,na,ib,jb,nb;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF PARALLEL3 ===================\n");
|
|
||||||
/* PARALLEL ON arrA[i][2* j][n] stretching */
|
|
||||||
parallel31();
|
|
||||||
/* PARALLEL ON arrA[i+2][ j][n] shift */
|
|
||||||
parallel32();
|
|
||||||
/* PARALLEL ON arrA[i][ j][-n+8] reverse */
|
|
||||||
// parallel33();
|
|
||||||
/* PARALLEL ON arrA[i][ j][2] compression */
|
|
||||||
parallel34();
|
|
||||||
/* PARALLEL ON arrA[2*i][3*j][1] stretching and compression */
|
|
||||||
parallel341 ();
|
|
||||||
/* PARALLEL ON arrA[][j][n] replication */
|
|
||||||
parallel35();
|
|
||||||
/* PARALLEL ON arrA[1][2*j+1][3] */
|
|
||||||
parallel36();
|
|
||||||
|
|
||||||
printf ("=== END OF PARALLEL3 ===================\n");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel31 */
|
|
||||||
/* PARALLEL ON arrA[i][2*j][k] stretching */
|
|
||||||
void parallel31()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 4
|
|
||||||
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln] */
|
|
||||||
int k1i = 1, li = 0;
|
|
||||||
int k2j = 2, lj = 0;
|
|
||||||
int k3n = 1, ln = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
|
|
||||||
char tname[] = "paral31 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region local(A3)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[k1i*i+li][k2j*j+lj][k3n*n+ln]) private(ia,ja,na), reduction(min(erri))
|
|
||||||
for (i = 0; i < ((AN1 - li) / k1i); i++)
|
|
||||||
for (j = 0; j < ((AN2 - lj) / k2j); j++)
|
|
||||||
for (n = 0; n < ((AN3 - ln) / k3n); n++)
|
|
||||||
{
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
na = k3n * n + ln;
|
|
||||||
if (A3[ia][ja][na] != (ia * NL / 10 + ja * NL / 100 + na * NL / 1000))
|
|
||||||
erri = Min(erri, ia * NL / 10 + ja * NL / 100 + na * NL / 1000);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel32 */
|
|
||||||
/* PARALLEL ON arrA[i+2][j][k] shift */
|
|
||||||
void parallel32()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 5
|
|
||||||
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln] */
|
|
||||||
int k1i = 1, li = 2;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
int k3n = 1, ln = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
|
|
||||||
char tname[] = "paral32 ";
|
|
||||||
|
|
||||||
A3 = (int(*)[AN2][AN3])malloc(AN1*sizeof(int[AN2][AN3]));
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++) {
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[k1i*i+li][k2j*j+lj][k3n*n+ln]) private(ia,ja,na), reduction(min(erri))
|
|
||||||
for (i = 0; i < ((AN1 - li) / k1i); i++)
|
|
||||||
for (j = 0; j < ((AN2 - lj) / k2j); j++)
|
|
||||||
for (n = 0; n < ((AN3 - ln) / k3n); n++)
|
|
||||||
{
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
na = k3n * n + ln;
|
|
||||||
if (A3[ia][ja][na] != (ia * NL / 10 + ja * NL / 100 + na * NL / 1000 + 2))
|
|
||||||
erri = Min(erri, ia * NL / 10 + ja * NL / 100 + na * NL / 1000);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free (A3);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel33 */
|
|
||||||
/* PARALLEL ON arrA[i][j][-k+8] reverse */
|
|
||||||
void parallel33()
|
|
||||||
{
|
|
||||||
#define AN1 5
|
|
||||||
#define AN2 5
|
|
||||||
#define AN3 9
|
|
||||||
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln] */
|
|
||||||
int k1i = 1, li = 0;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
int k3n = -1, ln = 8;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
|
|
||||||
char tname[] = "paral33 ";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A3)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL /1000;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[k1i*i+li][k2j*j+lj][k3n*n+ln]) private(ia,ja,na), reduction(min(erri))
|
|
||||||
for (i = 0; i < ((AN1 - li) / k1i); i++)
|
|
||||||
for (j = 0; j < ((AN2 - lj - 1) / k2j); j++)
|
|
||||||
for (n = 0; n < ((AN3 - ln - 1) / k3n); n++)
|
|
||||||
{
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
na = k3n * n + ln;
|
|
||||||
if (A3[ia][ja][na] != (ia * NL / 10 + ja * NL / 100 + na * NL/1000))
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel34 */
|
|
||||||
/* PARALLEL ON arrA[i][ j][2] compression */
|
|
||||||
void parallel34()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define BN1 3
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 3
|
|
||||||
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][ln] */
|
|
||||||
#define k1i 1
|
|
||||||
#define li 0
|
|
||||||
#define k2j 1
|
|
||||||
#define lj 0
|
|
||||||
#define k3n 0
|
|
||||||
#define ln 2
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
#pragma dvm array /* deferred aligning */
|
|
||||||
int (*B3)[BN2][BN3];
|
|
||||||
|
|
||||||
char tname[] = "paral34 ";
|
|
||||||
|
|
||||||
A3 = (int(*)[AN2][AN3])malloc(AN1*sizeof(int[AN2][AN3]));
|
|
||||||
B3 = (int(*)[BN2][BN3])malloc(BN1*sizeof(int[BN2][BN3]));
|
|
||||||
|
|
||||||
#pragma dvm realign(B3[i][j][] with A3[k1i*i+li][k2j*j+lj][ln])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A3, B3)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for(i = 0; i < BN1; i++)
|
|
||||||
for(j = 0; j < BN2; j++)
|
|
||||||
for(n = 0; n < BN3; n++) {
|
|
||||||
B3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for(i = 0; i < AN1; i++)
|
|
||||||
for(j = 0; j < AN2; j++)
|
|
||||||
for(n = 0; n < AN3; n++) {
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel ([i][j][n] on A3[k1i * i + li][k2j * j + lj][ln]) reduction(min(erri))
|
|
||||||
for(i = 0; i < BN1; i++)
|
|
||||||
for(j = 0; j < BN2; j++)
|
|
||||||
for(n = 0; n < BN3; n++) {
|
|
||||||
if (B3[i][j][n] != i * NL / 10 + j * NL / 100 + n * NL / 1000)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free (B3);
|
|
||||||
free (A3);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef k1i
|
|
||||||
#undef li
|
|
||||||
#undef k2j
|
|
||||||
#undef lj
|
|
||||||
#undef k3n
|
|
||||||
#undef ln
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel341 */
|
|
||||||
/* PARALLEL ON arrA[2*i][3*j][1] stretching and compression */
|
|
||||||
void parallel341()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 10
|
|
||||||
#define AN3 6
|
|
||||||
#define BN1 3
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 3
|
|
||||||
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][ln] */
|
|
||||||
int k1i = 2, li = 0;
|
|
||||||
int k2j = 3, lj = 0;
|
|
||||||
int k3n = 0, ln = 1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][] with A3[k1i*i+li][k2j*j+lj][ln])
|
|
||||||
int B3[BN1][BN2][BN3];
|
|
||||||
|
|
||||||
char tname[] = "paral341";
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region local(A3, B3)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
B3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + 4;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[k1i*i+li][k2j*j+lj][ln]) reduction(min(erri))
|
|
||||||
for (i = 0; i <BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
if (B3[i][j][n] != (i * NL / 10 + j * NL / 100 + n * NL / 1000 + 4))
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000);
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------parallel35 */
|
|
||||||
/* PARALLEL ON arrA[][j][k] */
|
|
||||||
void parallel35()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 12
|
|
||||||
#define AN3 16
|
|
||||||
#define BN1 6
|
|
||||||
#define BN2 5
|
|
||||||
#define BN3 4
|
|
||||||
|
|
||||||
/* parameters for PARALLEL ON arrA[*][k2j*j+lj][k3n*n+ln] */
|
|
||||||
int k1i = 0, li = 0;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
int k3n = 1, ln = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int (*A3)[AN2][AN3];
|
|
||||||
#pragma dvm array /* deferred aligning */
|
|
||||||
int (*B3)[BN2][BN3];
|
|
||||||
|
|
||||||
char tname[] = "paral35 ";
|
|
||||||
|
|
||||||
A3 = (int(*)[AN2][AN3])malloc(AN1*sizeof(int[AN2][AN3]));
|
|
||||||
B3 = (int(*)[BN2][BN3])malloc(BN1*sizeof(int[BN2][BN3]));
|
|
||||||
|
|
||||||
#pragma dvm realign(B3[][j][n] with A3[][k2j*j+lj][k3n*n+ln])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
|
|
||||||
#pragma dvm region in(A3, B3), out(A3, B3)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
B3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + 5;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + 7;
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([j][n] on A3[][k2j*j+lj][k3n*n+ln]) reduction(min(erri))
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
if (B3[i][j][n] != (i * NL / 10 + j * NL / 100 + n * NL / 1000 + 5))
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000);
|
|
||||||
} /* end region */
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free (B3);
|
|
||||||
free (A3);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel36 */
|
|
||||||
/* PARALLEL ON arrA[1][2*j+1][3] */
|
|
||||||
void parallel36()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 7
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 5
|
|
||||||
|
|
||||||
/* parameters for PARALLEL ON arrA[li][k2j*j+lj][ln] */
|
|
||||||
int k1i = 0, li = 1;
|
|
||||||
int k2j = 2, lj = 1;
|
|
||||||
int k3n = 0, ln = 3;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
|
|
||||||
#pragma dvm array /* deferred aligning */
|
|
||||||
int (*B3)[BN2][BN3];
|
|
||||||
|
|
||||||
char tname[] = "paral36 ";
|
|
||||||
|
|
||||||
B3 = (int(*)[BN2][BN3])malloc(BN1*sizeof(int[BN2][BN3]));
|
|
||||||
#pragma dvm realign(B3[i][j][n] with A3[li][k2j*j+lj][ln])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A3), inout(B3)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
B3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = i * NL / 10 + j * NL / 100 + n * NL / 1000;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[li][k2j*j+lj][ln]) reduction(min(erri))
|
|
||||||
for (i = 0; i <BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
if (B3[i][j][n] != (i * NL / 10 + j * NL / 100 + n * NL / 1000))
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL /1000);
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free (B3);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-------------------------------------------------------*/
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,671 +0,0 @@
|
|||||||
/* PARALLEL4
|
|
||||||
|
|
||||||
TESTING parallel CLAUSE */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) (((a) < (b)) ? (a) : (b))
|
|
||||||
|
|
||||||
static void parallel41();
|
|
||||||
static void parallel42();
|
|
||||||
static void parallel43();
|
|
||||||
static void parallel44();
|
|
||||||
static void parallel45();
|
|
||||||
static void parallel46();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
static int PN = 2;
|
|
||||||
static int erri, NNL, i, j, n, m, ia, ja, na, ma, ib, jb, nb, mb, Avalue, Bvalue, s, cs;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("===START OF parallel4========================\n");
|
|
||||||
/* PARALLEL ON arrA[i][2* j][k][3*l] stretching */
|
|
||||||
parallel41();
|
|
||||||
/* PARALLEL ON arrA[i+2][ j][k][ l+3] */
|
|
||||||
parallel42();
|
|
||||||
/* PARALLEL ON arrA[i][ j][-k+8][- l+8] reverse */
|
|
||||||
// parallel43();
|
|
||||||
/* PARALLEL ON arrA[i][ j][2][ l]
|
|
||||||
compression !! */
|
|
||||||
parallel44();
|
|
||||||
/* PARALLEL ON arrA[i][ j][ ][ k]
|
|
||||||
replication */
|
|
||||||
parallel45();
|
|
||||||
/* PARALLEL ON arrA[i][ j][ ][3]
|
|
||||||
compression and replication */
|
|
||||||
parallel46();
|
|
||||||
|
|
||||||
printf("=== END OF parallel4 =========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel41 */
|
|
||||||
/* arrA4[BLOCK][BLOCK] [BLOCK] [BLOCK]
|
|
||||||
PARALLEL ON arrA[i][2* j][k][3*l] stretching */
|
|
||||||
void parallel41()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 0
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 2
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n 1
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 0
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m 3
|
|
||||||
#define lm 0
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
|
|
||||||
char tname[] = "paral41 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(A4)
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][k3n * n + ln][k4m * m + lm]) reduction(min(erri)), private(ia, ja, na, ma)
|
|
||||||
for (i = 0; i < ((AN1 - li) / k1i); i++)
|
|
||||||
for (j = 0; j < ((AN2 - lj) / k2j); j++)
|
|
||||||
for (n = 0; n < ((AN3 - ln) / k3n); n++)
|
|
||||||
for (m = 0; m < ((AN4 - lm) / k4m); m++) {
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
na = k3n * n + ln;
|
|
||||||
ma = k4m * m + lm;
|
|
||||||
if (A4[ia][ja][na][ma] != ia * NL / 10 + ja * NL / 100 + na * NL / 1000 + ma)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel42 */
|
|
||||||
/* PARALLEL ON arrA[i+2][ j][k][ l+3] shift */
|
|
||||||
void parallel42()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 2
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 1
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n 1
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 0
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m 1
|
|
||||||
#define lm 3
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
|
|
||||||
char tname[] = "paral42 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(A4)
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][k3n * n + ln][k4m * m + lm]) reduction(min(erri)), private(ia, ja, na, ma)
|
|
||||||
for (i = 0; i < ((AN1 - li) / k1i); i++)
|
|
||||||
for (j = 0; j < ((AN2 - lj) / k2j); j++)
|
|
||||||
for (n = 0; n < ((AN3 - ln) / k3n); n++)
|
|
||||||
for (m = 0; m < ((AN4 - lm) / k4m); m++) {
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
na = k3n * n + ln;
|
|
||||||
ma = k4m * m + lm;
|
|
||||||
if (A4[ia][ja][na][ma] != ia * NL / 10 + ja * NL / 100 + na * NL / 1000 + ma)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel43 */
|
|
||||||
/* PARALLEL ON arrA[i][ j][-k+8][- l+8] reverse */
|
|
||||||
void parallel43()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 0
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 1
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n -1
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 8
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m -1
|
|
||||||
#define lm 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
|
|
||||||
char tname[] = "paral43 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(A4)
|
|
||||||
//#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][k3n * n + ln][k4m * m + lm]) reduction(min(erri)), private(ia, ja, na, ma)
|
|
||||||
for (i = 0; i < ((AN1 - li) / k1i); i++)
|
|
||||||
for (j = 0; j < ((AN2 - lj) / k2j); j++)
|
|
||||||
for (n = 0; n < ((AN3 - ln) / k3n); n++)
|
|
||||||
for (m = 0; m < ((AN4 - lm) / k4m); m++) {
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
na = k3n * n + ln;
|
|
||||||
ma = k4m * m + lm;
|
|
||||||
if (A4[ia][ja][na][ma] != ia * NL / 10 + ja * NL / 100 + na * NL / 1000 + ma)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel44 */
|
|
||||||
/* PARALLEL ON arrA[i][ j][2][ l] */
|
|
||||||
void parallel44()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
#define BN1 3
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 3
|
|
||||||
#define BN4 3
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 0
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 1
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n 0
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 2
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m 1
|
|
||||||
#define lm 0
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B4)[BN2][BN3][BN4];
|
|
||||||
B4 = (int (*)[BN2][BN3][BN4])malloc(BN1*sizeof(int[BN2][BN3][BN4]));
|
|
||||||
#pragma dvm realign(B4[i][j][n][m] with A4[k1i*i+li][k2j*j+lj][ln][k4m*m+lm])
|
|
||||||
|
|
||||||
|
|
||||||
char tname[] = "paral44 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B4)
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][ln][k4m * m + lm]) reduction(min(erri))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
if (B4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B4);
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel45 */
|
|
||||||
/* PARALLEL ON arrA[i][ j][ ][ k] */
|
|
||||||
void parallel45()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
#define BN1 3
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 3
|
|
||||||
#define BN4 3
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 0
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 1
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n 0
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 0
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m 1
|
|
||||||
#define lm 0
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B4)[BN2][BN3][BN4];
|
|
||||||
B4 = (int (*)[BN2][BN3][BN4])malloc(BN1*sizeof(int[BN2][BN3][BN4]));
|
|
||||||
#pragma dvm realign(B4[i][j][n][m] with A4[k1i*i+li][k2j*j+lj][][k4m*m+lm])
|
|
||||||
|
|
||||||
char tname[] = "paral45 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B4)
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][][k4m * m + lm]) reduction(min(erri))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
if (B4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B4);
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel46 */
|
|
||||||
/* PARALLEL ON arrA[i][ j][ ][3] */
|
|
||||||
void parallel46()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
#define BN1 3
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 3
|
|
||||||
#define BN4 3
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 0
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 1
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n 0
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 0
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m 0
|
|
||||||
#define lm 3
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B4)[BN2][BN3][BN4];
|
|
||||||
B4 = (int (*)[BN2][BN3][BN4])malloc(BN1*sizeof(int[BN2][BN3][BN4]));
|
|
||||||
#pragma dvm realign(B4[i][j][n][m] with A4[k1i*i+li][k2j*j+lj][][lm])
|
|
||||||
|
|
||||||
char tname[] = "paral46 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B4)
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][][lm]) reduction(min(erri))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
if (B4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B4);
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/*-------------------------------------------------------*/
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,672 +0,0 @@
|
|||||||
/* PARALLELPLUS34
|
|
||||||
|
|
||||||
TESTING parallel CLAUSE
|
|
||||||
arrA4[BLOCK][*][ BLOCK][BLOCK] or arrA4[*][BLOCK][ BLOCK][BLOCK] etc. */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) (((a) < (b)) ? (a) : (b))
|
|
||||||
|
|
||||||
static void parallel41();
|
|
||||||
static void parallel42();
|
|
||||||
static void parallel43();
|
|
||||||
static void parallel44();
|
|
||||||
static void parallel45();
|
|
||||||
static void parallel46();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
static int PN = 2;
|
|
||||||
static int erri, NNL, i, j, n, m, ia, ja, na, ma, ib, jb, nb, mb, Avalue, Bvalue, s, cs;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("===START OF paralplus34========================\n");
|
|
||||||
/* PARALLEL ON arrA[i][2* j][k][3*l] stretching */
|
|
||||||
parallel41();
|
|
||||||
/* PARALLEL ON arrA[i+2][ j][k][ l+3] */
|
|
||||||
parallel42();
|
|
||||||
/* PARALLEL ON arrA[i][ j][-k+8][- l+8] reverse */
|
|
||||||
// parallel43();
|
|
||||||
/* PARALLEL ON arrA[i][ j][2][ l]
|
|
||||||
compression !! */
|
|
||||||
parallel44();
|
|
||||||
/* PARALLEL ON arrA[i][ j][ ][ k]
|
|
||||||
replication */
|
|
||||||
parallel45();
|
|
||||||
/* PARALLEL ON arrA[i][ j][ ][3]
|
|
||||||
compression and replication */
|
|
||||||
parallel46();
|
|
||||||
|
|
||||||
printf("=== END OF paralplus34 =========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel41 */
|
|
||||||
/* arrA4[BLOCK][*] [BLOCK] [BLOCK]
|
|
||||||
PARALLEL ON arrA[i][2* j][k][3*l] stretching */
|
|
||||||
void parallel41()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 0
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 2
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n 1
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 0
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m 3
|
|
||||||
#define lm 0
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
|
|
||||||
char tname[] = "paral+41 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(A4)
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][k3n * n + ln][k4m * m + lm]) reduction(min(erri)), private(ia, ja, na, ma)
|
|
||||||
for (i = 0; i < ((AN1 - li) / k1i); i++)
|
|
||||||
for (j = 0; j < ((AN2 - lj) / k2j); j++)
|
|
||||||
for (n = 0; n < ((AN3 - ln) / k3n); n++)
|
|
||||||
for (m = 0; m < ((AN4 - lm) / k4m); m++) {
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
na = k3n * n + ln;
|
|
||||||
ma = k4m * m + lm;
|
|
||||||
if (A4[ia][ja][na][ma] != ia * NL / 10 + ja * NL / 100 + na * NL / 1000 + ma)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel42 */
|
|
||||||
/* PARALLEL ON arrA[i+2][ j][k][ l+3] shift */
|
|
||||||
void parallel42()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 2
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 1
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n 1
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 0
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m 1
|
|
||||||
#define lm 3
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block][block][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
|
|
||||||
char tname[] = "paral+42 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(A4)
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][k3n * n + ln][k4m * m + lm]) reduction(min(erri)), private(ia, ja, na, ma)
|
|
||||||
for (i = 0; i < ((AN1 - li) / k1i); i++)
|
|
||||||
for (j = 0; j < ((AN2 - lj) / k2j); j++)
|
|
||||||
for (n = 0; n < ((AN3 - ln) / k3n); n++)
|
|
||||||
for (m = 0; m < ((AN4 - lm) / k4m); m++) {
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
na = k3n * n + ln;
|
|
||||||
ma = k4m * m + lm;
|
|
||||||
if (A4[ia][ja][na][ma] != ia * NL / 10 + ja * NL / 100 + na * NL / 1000 + ma)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel43 */
|
|
||||||
/* PARALLEL ON arrA[i][ j][-k+8][- l+8] reverse */
|
|
||||||
void parallel43()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 0
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 1
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n -1
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 8
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m -1
|
|
||||||
#define lm 8
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][*][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
|
|
||||||
char tname[] = "paral+43 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(A4)
|
|
||||||
//#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][k3n * n + ln][k4m * m + lm]) reduction(min(erri)), private(ia, ja, na, ma)
|
|
||||||
for (i = 0; i < ((AN1 - li) / k1i); i++)
|
|
||||||
for (j = 0; j < ((AN2 - lj) / k2j); j++)
|
|
||||||
for (n = 0; n < ((AN3 - ln) / k3n); n++)
|
|
||||||
for (m = 0; m < ((AN4 - lm) / k4m); m++) {
|
|
||||||
ia = k1i * i + li;
|
|
||||||
ja = k2j * j + lj;
|
|
||||||
na = k3n * n + ln;
|
|
||||||
ma = k4m * m + lm;
|
|
||||||
if (A4[ia][ja][na][ma] != ia * NL / 10 + ja * NL / 100 + na * NL / 1000 + ma)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel44 */
|
|
||||||
/* PARALLEL ON arrA[i][ j][2][ l] */
|
|
||||||
void parallel44()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
#define BN1 3
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 3
|
|
||||||
#define BN4 3
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 0
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 1
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n 0
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 2
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m 1
|
|
||||||
#define lm 0
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][*][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B4)[BN2][BN3][BN4];
|
|
||||||
B4 = (int (*)[BN2][BN3][BN4])malloc(BN1 * sizeof(int[BN2][BN3][BN4]));
|
|
||||||
#pragma dvm realign(B4[i][j][n][m] with A4[k1i*i+li][k2j*j+lj][ln][k4m*m+lm])
|
|
||||||
|
|
||||||
|
|
||||||
char tname[] = "paral+44 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B4)
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][ln][k4m * m + lm]) reduction(min(erri))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
if (B4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B4);
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel45 */
|
|
||||||
/* PARALLEL ON arrA[i][ j][ ][ k] */
|
|
||||||
void parallel45()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
#define BN1 3
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 3
|
|
||||||
#define BN4 3
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 0
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 1
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n 0
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 0
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m 1
|
|
||||||
#define lm 0
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][*]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B4)[BN2][BN3][BN4];
|
|
||||||
B4 = (int (*)[BN2][BN3][BN4])malloc(BN1 * sizeof(int[BN2][BN3][BN4]));
|
|
||||||
#pragma dvm realign(B4[i][j][n][m] with A4[k1i*i+li][k2j*j+lj][][k4m*m+lm])
|
|
||||||
|
|
||||||
char tname[] = "paral+45 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B4)
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][][k4m * m + lm]) reduction(min(erri))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
if (B4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B4);
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------parallel46 */
|
|
||||||
/* PARALLEL ON arrA[i][ j][ ][3] */
|
|
||||||
void parallel46()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 6
|
|
||||||
#define AN3 6
|
|
||||||
#define AN4 6
|
|
||||||
#define BN1 3
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 3
|
|
||||||
#define BN4 3
|
|
||||||
/* parameters for PARALLEL ON arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
#define k1i 1
|
|
||||||
#define k2i 0
|
|
||||||
#define k3i 0
|
|
||||||
#define k4i 0
|
|
||||||
#define li 0
|
|
||||||
#define k1j 0
|
|
||||||
#define k2j 1
|
|
||||||
#define k3j 0
|
|
||||||
#define k4j 0
|
|
||||||
#define lj 0
|
|
||||||
#define k1n 0
|
|
||||||
#define k2n 0
|
|
||||||
#define k3n 0
|
|
||||||
#define k4n 0
|
|
||||||
#define ln 0
|
|
||||||
#define k1m 0
|
|
||||||
#define k2m 0
|
|
||||||
#define k3m 0
|
|
||||||
#define k4m 0
|
|
||||||
#define lm 3
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block][block][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
A4 = (int (*)[AN2][AN3][AN4])malloc(AN1 * sizeof(int[AN2][AN3][AN4]));
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B4)[BN2][BN3][BN4];
|
|
||||||
B4 = (int (*)[BN2][BN3][BN4])malloc(BN1 * sizeof(int[BN2][BN3][BN4]));
|
|
||||||
#pragma dvm realign(B4[i][j][n][m] with A4[k1i*i+li][k2j*j+lj][][lm])
|
|
||||||
|
|
||||||
char tname[] = "paral+46 ";
|
|
||||||
erri = ER;
|
|
||||||
NNL = NL;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B4)
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[k1i * i + li][k2j * j + lj][][lm]) reduction(min(erri))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
if (B4[i][j][n][m] != i * NL / 10 + j * NL / 100 + n * NL / 1000 + m)
|
|
||||||
erri = Min(erri, i * NL / 10 + j * NL / 100 + n * NL / 1000 + m);
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
s = 0;
|
|
||||||
cs = 0;
|
|
||||||
if (erri == ER && s == cs)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B4);
|
|
||||||
free(A4);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
#undef k1i
|
|
||||||
#undef k2i
|
|
||||||
#undef k3i
|
|
||||||
#undef k4i
|
|
||||||
#undef li
|
|
||||||
#undef k1j
|
|
||||||
#undef k2j
|
|
||||||
#undef k3j
|
|
||||||
#undef k4j
|
|
||||||
#undef lj
|
|
||||||
#undef k1n
|
|
||||||
#undef k2n
|
|
||||||
#undef k3n
|
|
||||||
#undef k4n
|
|
||||||
#undef ln
|
|
||||||
#undef k1m
|
|
||||||
#undef k2m
|
|
||||||
#undef k3m
|
|
||||||
#undef k4m
|
|
||||||
#undef lm
|
|
||||||
}
|
|
||||||
/*-------------------------------------------------------*/
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,774 +0,0 @@
|
|||||||
/* REALIGN11
|
|
||||||
Testing REALIGN directive */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void realign111();
|
|
||||||
static void realign112();
|
|
||||||
static void realign1121();
|
|
||||||
static void realign112r();
|
|
||||||
static void realign113();
|
|
||||||
static void realign113r();
|
|
||||||
static void realign114();
|
|
||||||
static void realign1141();
|
|
||||||
static void realign115();
|
|
||||||
static void realign116();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno (const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
|
|
||||||
static int erria, errib, i, j, ia, ib;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF REALIGN11 ======================\n");
|
|
||||||
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i] REALIGN arrB[i] WITH arrA[2*i+8] */
|
|
||||||
realign111();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i+4] REALIGN arrB[i] WITH arrA[i+8] */
|
|
||||||
realign112();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i+2] REALIGN arrB[i] WITH arrA[2*i+5] */
|
|
||||||
realign1121();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i+4] REALIGN arrB[i] WITH arrA[-i+8] */
|
|
||||||
// realign112r();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[3*i+2] REALIGN arrB[i] WITH arrA[2*i+1] */
|
|
||||||
realign113();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[-i+8] REALIGN arrB[i] WITH arrA[3*i+2] */
|
|
||||||
// realign113r();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2*i+8] REALIGN arrB[i] WITH arrA[i] */
|
|
||||||
realign114();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2*i] REALIGN arrB[i] WITH arrA[i+2] */
|
|
||||||
realign1141();
|
|
||||||
/* ALIGN arrB[ ] WITH arrA[ ] REALIGN arrB[i] WITH arrA[i+4] */
|
|
||||||
realign115();
|
|
||||||
/* ALIGN arrB[i] WITH arrA[4*i+3] REALIGN arrB[] WITH arrA[] */
|
|
||||||
realign116();
|
|
||||||
|
|
||||||
printf ("=== END OF REALIGN11 ======================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REALIGN111 */
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i] REALIGN arrB[i] WITH arrA[2*i+8] */
|
|
||||||
void realign111()
|
|
||||||
{
|
|
||||||
#define AN1 30
|
|
||||||
#define BN1 8
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i*i+li] */
|
|
||||||
int k1i = 1,li = 0;
|
|
||||||
/* parameters for REALIGN arrB[i] WITH arrA[kr1i*i+lri] */
|
|
||||||
int kr1i = 2, lri = 8; /* lri = -1 RTS err */
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
|
|
||||||
char tname[] = "realign111 ";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1)) {
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign (B1[i] with A1[kr1i * i + lri])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region inlocal(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i]) private(ia), reduction(min(erria), min(errib))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != (i))
|
|
||||||
errib = Min(errib, i);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
if (A1[ia] != (ia))
|
|
||||||
erria = Min(erria, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN112 */
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i+4] REALIGN arrB[i] WITH arrA[i+8] */
|
|
||||||
void realign112()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define BN1 4
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i*i+li] */
|
|
||||||
int k1i = 1,li = 4;
|
|
||||||
/* parameters for REALIGN arrB[i] WITH arrA[kr1i*i+lri] */
|
|
||||||
int kr1i = 1,lri = 8;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
|
|
||||||
char tname[] = "realign112 ";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i * 2;
|
|
||||||
if (((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1)){
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
B1[ib] += ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B1[i] with A1[kr1i * i + lri])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i]) private(ia), reduction(min(erria), min(errib))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != (i+1))
|
|
||||||
errib = Min(errib, i);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
if (A1[ia] != ia*2)
|
|
||||||
erria = Min(erria, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN1121*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i+2] REALIGN arrB[i] WITH arrA[2*i+5] */
|
|
||||||
void realign1121()
|
|
||||||
{
|
|
||||||
int AN1 = 25;
|
|
||||||
int BN1 = 7;
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i*i+li] */
|
|
||||||
int k1i = 1;
|
|
||||||
int li = 4;
|
|
||||||
/* parameters for REALIGN arrB[i] WITH arrA[kr1i*i+lri] */
|
|
||||||
int kr1i = 2;
|
|
||||||
int lri = 5;
|
|
||||||
|
|
||||||
char tname[] = "realign1121";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
#pragma dvm array
|
|
||||||
int *B1;
|
|
||||||
|
|
||||||
A1 = malloc(sizeof(int[AN1]));
|
|
||||||
B1 = malloc(sizeof(int[BN1]));
|
|
||||||
|
|
||||||
#pragma dvm realign(B1[i] with A1[k1i * i + li])
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm region inout(B1), out(A1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] += ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm realign(B1[i] with A1[kr1i * i + lri])
|
|
||||||
|
|
||||||
#pragma dvm actual(erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erria), min(errib)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i+2)
|
|
||||||
errib = Min(errib, i);
|
|
||||||
ia = kr1i * i + lri;
|
|
||||||
if (A1[ia] != ia)
|
|
||||||
erria = Min(erria, i);
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B1);
|
|
||||||
free(A1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REALIGN112r */
|
|
||||||
/* ALIGN arrB[i] WITH arrA[i+4] REALIGN arrB[i] WITH arrA[-i+8] */
|
|
||||||
void realign112r()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
#define BN1 5
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i*i+li] */
|
|
||||||
int k1i = 1,li = 4;
|
|
||||||
/* parameters for REALIGN arrB[i] WITH arrA[kr1i*i+lri] */
|
|
||||||
int kr1i = -1,lri = 8;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
|
|
||||||
char tname[] = "realign112r ";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1,B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1)){
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B1[i] with A1[kr1i * i + lri])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1,B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i]) private(ia), reduction(min(erria), min(errib))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != (i))
|
|
||||||
errib = Min(errib, i);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
if (A1[ia] != (ia))
|
|
||||||
erria = Min(erria, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REALIGN113 */
|
|
||||||
/* ALIGN arrB[i] WITH arrA[3*i+2] REALIGN arrB[i] WITH arrA[2*i+1] */
|
|
||||||
void realign113()
|
|
||||||
{
|
|
||||||
#define AN1 30
|
|
||||||
#define BN1 6
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i*i+li] */
|
|
||||||
int k1i = 3,li = -2; /* 3*i + (-2) - RTS err */
|
|
||||||
/* parameters for REALIGN arrB[i] WITH arrA[kr1i*i+lri] */
|
|
||||||
int kr1i = 2,lri = -1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i - li])
|
|
||||||
int B1[BN1];
|
|
||||||
|
|
||||||
char tname[] = "realign113 ";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1,B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 5;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i+3;
|
|
||||||
// if (((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
// (((i-li)/k1i) >= 0) &&
|
|
||||||
// (((i-li)/k1i) < BN1)) {
|
|
||||||
// ib = (i-li)/k1i;
|
|
||||||
// B1[ib] = B1[ib] + ib;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
if (((i+li) == (((i+li)/k1i) * k1i)) &&
|
|
||||||
(((i+li)/k1i) >= 0) &&
|
|
||||||
(((i+li)/k1i) < BN1)) {
|
|
||||||
ib = (i+li)/k1i;
|
|
||||||
B1[ib] = B1[ib] + ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B1[i] with A1[kr1i * i - lri])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1,B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erria), min(errib)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i+5)
|
|
||||||
errib = Min(errib, i);
|
|
||||||
ia=kr1i * i - lri;
|
|
||||||
if (A1[ia] != (ia+3))
|
|
||||||
erria = Min(erria, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN113r */
|
|
||||||
/* ALIGN arrB[i] WITH arrA[-i+8] REALIGN arrB[i] WITH arrA[3*i+2] */
|
|
||||||
void realign113r()
|
|
||||||
{
|
|
||||||
#define AN1 18
|
|
||||||
#define BN1 5
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i*i+li] */
|
|
||||||
int k1i = -1,li = 8;
|
|
||||||
/* parameters for REALIGN arrB[i] WITH arrA[kr1i*i+lri] */
|
|
||||||
int kr1i = 3,lri = 2;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
|
|
||||||
char tname[] = "realign113r ";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1,B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1)) {
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B1[i] with A1[kr1i * i + lri])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erria),min(errib)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != (i))
|
|
||||||
errib = Min(errib, i);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
if (A1[ia] != (ia))
|
|
||||||
erria = Min(erria, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REALIGN114 */
|
|
||||||
/* ALIGN arrB[i] WITH arrA[2*i+8] REALIGN arrB[i] WITH arrA[i] */
|
|
||||||
void realign114()
|
|
||||||
{
|
|
||||||
#define AN1 24
|
|
||||||
#define BN1 8
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i*i+li] */
|
|
||||||
int k1i = 2, li = 8;
|
|
||||||
/* parameters for REALIGN arrB[i] WITH arrA[kr1i*i+lri] */
|
|
||||||
int kr1i = 1, lri = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
|
|
||||||
char tname[] = "realign114 ";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i;
|
|
||||||
if (((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1)) {
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
B1[ib] = ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B1[i] with A1[kr1i * i + lri])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1,B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erria), min(errib)), private (ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != (i))
|
|
||||||
errib = Min(errib, i);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
if (A1[ia] != (ia))
|
|
||||||
erria = Min(erria, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ------ ---------------------------------------REALIGN1141*/
|
|
||||||
/* ALIGN arrB[i] WITH arrA[4*i] REALIGN arrB[i] WITH arrA[i+2] */
|
|
||||||
void realign1141()
|
|
||||||
{
|
|
||||||
int AN1 = 24;
|
|
||||||
int BN1 = 6;
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i*i+li] */
|
|
||||||
int k1i = 4;
|
|
||||||
int li = 0;
|
|
||||||
/* parameters for REALIGN arrB[i] WITH arrA[kr1i*i+lri] */
|
|
||||||
int kr1i = 1;
|
|
||||||
int lri = 2;
|
|
||||||
|
|
||||||
char tname[] = "realign1141";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int *A1;
|
|
||||||
#pragma dvm array
|
|
||||||
int *B1;
|
|
||||||
|
|
||||||
A1 = malloc(sizeof(int[AN1]));
|
|
||||||
B1 = malloc(sizeof(int[BN1]));
|
|
||||||
|
|
||||||
#pragma dvm realign(B1[i] with A1[k1i * i + li])
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region out(B1, A1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = 4;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A1[i] = i+2;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
B1[ib] += ib;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm realign(B1[i] with A1[kr1i * i + lri])
|
|
||||||
|
|
||||||
#pragma dvm actual(erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(erria), min(errib)), private(ia)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != i+4)
|
|
||||||
errib = Min(errib, i);
|
|
||||||
ia = kr1i * i + lri;
|
|
||||||
if (A1[ia] != ia+2)
|
|
||||||
erria = Min(erria, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B1);
|
|
||||||
free(A1);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN115 */
|
|
||||||
/* ALIGN arrB[ ] WITH arrA[ ] REALIGN arrB[i] WITH arrA[i+4] */
|
|
||||||
void realign115()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define BN1 8
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[] WITH arrA[] */
|
|
||||||
int k1i = 0,li = 0;
|
|
||||||
/* parameters for REALIGN arrB[i] WITH arrA[kr1i*i+lri] */
|
|
||||||
int kr1i = 1,lri = 4;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([] with A1[])
|
|
||||||
int B1[BN1];
|
|
||||||
|
|
||||||
char tname[] = "realign115 ";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[i])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = i;
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B1[i] with A1[kr1i * i + lri])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1,B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i]) private (ia), reduction(min(erria), min(errib))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
{
|
|
||||||
if (B1[i] != (i))
|
|
||||||
errib = Min(errib, i);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
if (A1[ia] != (ia))
|
|
||||||
erria = Min(erria, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN116 */
|
|
||||||
/* ALIGN arrB[i] WITH arrA[4*i+3] REALIGN arrB[] WITH arrA[] */
|
|
||||||
void realign116()
|
|
||||||
{
|
|
||||||
#define AN1 35
|
|
||||||
#define BN1 8
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i] WITH arrA[k1i*i+li] */
|
|
||||||
int k1i = 4,li = 3; /* 4*i-3 RTS err */
|
|
||||||
/* parameters for REALIGN arrB[] WITH arrA[] */
|
|
||||||
int kr1i = 0,lri = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A1[AN1];
|
|
||||||
#pragma dvm array align([i] with A1[k1i*i+li])
|
|
||||||
int B1[BN1];
|
|
||||||
|
|
||||||
char tname[] = "realign116 ";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1, B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = i+6;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[i])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
A1[i] = (i+1)*3;
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B1[] with A1[])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A1,B1)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i]) reduction(min(errib))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
if (B1[i] != i+6)
|
|
||||||
errib = Min(errib, i);
|
|
||||||
#pragma dvm parallel([i] on A1[i]) reduction(min(erria))
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
if (A1[i] != (i+1)*3)
|
|
||||||
erria = Min(erria, i);
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
}
|
|
||||||
/*-------------------------------------------------------*/
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,855 +0,0 @@
|
|||||||
/* REALIGN22
|
|
||||||
Testing REALIGN directive */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void realign221();
|
|
||||||
static void realign222();
|
|
||||||
static void realign223();
|
|
||||||
static void realign224();
|
|
||||||
static void realign225();
|
|
||||||
static void realign226();
|
|
||||||
static void realign227();
|
|
||||||
static void realign228();
|
|
||||||
static void realign229();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno (const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
|
|
||||||
static int s, cs, erri, erria, errib, i, j, k, n, ia, ja, ib, jb;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF REALIGN22 ======================\n");
|
|
||||||
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][j]
|
|
||||||
REALIGN arrB[i][j] WITH arrA[3*i+2][2*j+1] */
|
|
||||||
realign221();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j+1][i]
|
|
||||||
REALIGN arrB[i][j] WITH arrA[i+4][j] */
|
|
||||||
realign222();
|
|
||||||
/* ALIGN arrB[i][*] WITH arrA[*][i]
|
|
||||||
REALIGN arrB[i][j] WITH arrA[i+4][j+4] */
|
|
||||||
realign223();
|
|
||||||
/* ALIGN arrB[*][*] WITH arrA[*][1]
|
|
||||||
REALIGN arrB[i][j] WITH arrA[i+4][j+4] */
|
|
||||||
realign224();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][j]
|
|
||||||
REALIGN arrB[*][*] WITH arrA[*][2] */
|
|
||||||
realign225();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][j]
|
|
||||||
REALIGN arrB[i][j] WITH arrA[2*j+1][3*i+2] */
|
|
||||||
realign226();
|
|
||||||
/* ALIGN arrB[*][*] WITH arrA[4][*]
|
|
||||||
REALIGN arrB[i][j] WITH arrA[i+2][2*j] */
|
|
||||||
realign227();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j][i]
|
|
||||||
REALIGN arrB[*][*] WITH arrA[3][*] */
|
|
||||||
realign228();
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[2*i][3*j+1]
|
|
||||||
REALIGN arrB[i][j] WITH arrA[j+6][i+2] */
|
|
||||||
realign229();
|
|
||||||
|
|
||||||
printf ("=== END OF REALIGN22 ======================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REALIGN221 */
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][j]
|
|
||||||
REALIGN arrB[i][j] WITH arrA[3*i+2][2*j+1] */
|
|
||||||
void realign221()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 16
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k1i*i+li][k2j*j+lj] */
|
|
||||||
int k1i = 1, li = 0;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
/* parameters for REALIGN arrB[i][j] WITH arrA[kr1i*i+lri][kr2j*j+lrj] */
|
|
||||||
int kr1i = 3, lri = 2;
|
|
||||||
int kr2j = 2, lrj = 1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k1i * i + li][k2j * j + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
|
|
||||||
char tname[] = "realign221";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region in(A2,B2), out(A2,B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib,jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = (i*NL+j)*2;
|
|
||||||
if (
|
|
||||||
((i-li) ==(((i-li)/k1i) * k1i)) &&
|
|
||||||
((j-lj) ==(((j-lj)/k2j) * k2j)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((j-lj)/k2j) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1) &&
|
|
||||||
(((j-lj)/k2j) < BN2)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
jb = (j-lj)/k2j;
|
|
||||||
B2[ib][jb]= B2[ib][jb] + ib*NL+jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[i][j] with A2[kr1i * i + lri][kr2j * j + lrj])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region in(A2,B2), local(A2,B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erria),min(errib)), private(ia,ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i*NL+j))
|
|
||||||
errib = Min(errib, i*NL/10+j);
|
|
||||||
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
ja=kr2j * j + lrj;
|
|
||||||
if (A2[ia][ja] != (ia*NL+ja)*2)
|
|
||||||
erria = Min(erria, i*NL/10+j);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN222 */
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j+1][i]
|
|
||||||
REALIGN arrB[i][j] WITH arrA[i+4][j] */
|
|
||||||
void realign222()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k2j*j+lj][k1i*i+li] */
|
|
||||||
int k1i = 1,li = 0;
|
|
||||||
int k2j = 1,lj = 1;
|
|
||||||
/* parameters for REALIGN arrB[i][j] WITH arrA[kr1i*i+lri][kr2j*j+lrj] */
|
|
||||||
int kr1i = 1,lri = 4;
|
|
||||||
int kr2j = 1,lrj = 0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k2j * j + lj][k1i * i + li])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
|
|
||||||
char tname[] = "realign222";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A2,B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib), private(jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i*NL+j;
|
|
||||||
if (
|
|
||||||
((i-lj) ==(((i-lj)/k2j) * k2j)) &&
|
|
||||||
((j-li) ==(((j-li)/k1i) *k1i)) &&
|
|
||||||
(((i-lj)/k2j) >= 0) &&
|
|
||||||
(((j-li)/k1i) >= 0) &&
|
|
||||||
(((i-lj)/k2j) < BN2) &&
|
|
||||||
(((j-li)/k1i) < BN1)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ib = (j-li)/k1i;
|
|
||||||
jb = (i-lj)/k2j;
|
|
||||||
B2[ib][jb]=B2[ib][jb]+ib*NL+jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[i][j] with A2[kr1i * i + lri][kr2j * j + lrj])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) private(ia,ja), reduction(min(erria),min(errib))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i*NL+j)+1)
|
|
||||||
errib = Min(errib, i*NL/10+j);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
ja=kr2j * j + lrj;
|
|
||||||
if (A2[ia][ja] != (ia*NL+ja))
|
|
||||||
erria = Min(erria, i*NL/10+j);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN223 */
|
|
||||||
/* ALIGN arrB[i][*] WITH arrA[*][i]
|
|
||||||
REALIGN arrB[i][j] WITH arrA[i+4][j+4] */
|
|
||||||
void realign223()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 10
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][] WITH arrA[][k1i*i+li] */
|
|
||||||
int k1i = 1, li = 0;
|
|
||||||
int k2j = 0, lj = 0;
|
|
||||||
/* parameters for REALIGN arrB[i][j] WITH arrA[kr1i*i+lri][kr2j*j+lrj] */
|
|
||||||
int kr1i = 1, lri = 4;
|
|
||||||
int kr2j = 1, lrj = 4;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][] with A2[][k1i * i + li])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
|
|
||||||
char tname[] = "realign223";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual (errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = i*NL+j+5;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib,jb,k), reduction (min(errib))
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i*NL+j;
|
|
||||||
for (k = 0; k < BN2; k++)
|
|
||||||
{
|
|
||||||
if (
|
|
||||||
((j-li) ==(((j-li)/k1i) *k1i)) &&
|
|
||||||
(((j-li)/k1i) >= 0) &&
|
|
||||||
(((j-li)/k1i) < BN1)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ib = ((j-li)/k1i);
|
|
||||||
jb = k;
|
|
||||||
if (B2[ib][jb] !=(ib*NL+jb+5))
|
|
||||||
errib = Min(errib, i*NL/10+j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[i][j] with A2[kr1i * i + lri][kr2j * j + lrj])
|
|
||||||
|
|
||||||
#pragma dvm get_actual (errib)
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erria), min(errib)), private(ia,ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i*NL+j+5))
|
|
||||||
errib = Min(errib, i*NL/10+j);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
ja=kr2j * j + lrj;
|
|
||||||
if (A2[ia][ja] != (ia*NL+ja))
|
|
||||||
erria = Min(erria, i*NL/10+j);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN224 */
|
|
||||||
/* ALIGN arrB[*][*] WITH arrA[*][1]
|
|
||||||
ALIGN arrB[i][j] WITH arrA[i+4][j+4] shift along i and j */
|
|
||||||
void realign224()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 14
|
|
||||||
#define BN1 5
|
|
||||||
#define BN2 6
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[][] WITH arrA[][lj] */
|
|
||||||
int k1i = 0, li = 0;
|
|
||||||
int k2j = 0, lj = 1;
|
|
||||||
/* parameters for REALIGN arrB[i][j] WITH arrA[kr1i*i+lri][kr2j*j+lrj] */
|
|
||||||
int kr1i = 1, lri = 4;
|
|
||||||
int kr2j = 1, lrj = 4;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([][] with A2[][k2j * j + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
|
|
||||||
char tname[] = "realign224";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual (errib)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A2,B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = (i*NL+j)*2;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib,jb,k,n), reduction(min(errib))
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i*NL+j+5;
|
|
||||||
if (j == (lj))
|
|
||||||
for (k = 0; k < BN1; k++)
|
|
||||||
for (n = 0; n < BN2; n++)
|
|
||||||
{
|
|
||||||
ib = k;
|
|
||||||
jb = n;
|
|
||||||
if (B2[ib][jb] !=(ib*NL+jb)*2)
|
|
||||||
errib = Min(errib, i*NL/10+j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[i][j] with A2[kr1i * i + lri][kr2j * j + lrj])
|
|
||||||
|
|
||||||
#pragma dvm get_actual (errib)
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erria), min(errib)), private(ia,ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i*NL+j)*2)
|
|
||||||
errib = Min(errib, i*NL/10+j);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
ja=kr2j * j + lrj;
|
|
||||||
if (A2[ia][ja] != (ia*NL+ja+5))
|
|
||||||
erria = Min(erria, i*NL/10+j);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN225 */
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][j]
|
|
||||||
REALIGN arrB[*][*] WITH arrA[*][2] */
|
|
||||||
void realign225()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 10
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k1i*i+li][k2j*j+lj] */
|
|
||||||
int k1i = 1, li = 0;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
/* parameters for REALIGN arrB[][] WITH arrA[][lrj] */
|
|
||||||
int kr1i = 0, lri = 0;
|
|
||||||
int kr2j = 0, lrj = 2;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k1i * i + li][k2j * j + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
|
|
||||||
char tname[] = "realign225";
|
|
||||||
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib,jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i*NL+j;
|
|
||||||
if (
|
|
||||||
((i-li) ==(((i-li)/k1i) * k1i)) &&
|
|
||||||
((j-lj) ==(((j-lj)/k2j) *k2j)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((j-lj)/k2j) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1) &&
|
|
||||||
(((j-lj)/k2j) < BN2)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
jb = (j-lj)/k2j;
|
|
||||||
B2[ib][jb]=ib*NL+jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[][] with A2[][kr2j * j + lrj])
|
|
||||||
|
|
||||||
#pragma dvm actual (errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction (min(errib))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
if (B2[i][j] != (i*NL+j))
|
|
||||||
errib = Min(errib, i*NL/10+j);
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(errib)
|
|
||||||
|
|
||||||
if (errib == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN226 */
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[i][j]
|
|
||||||
REALIGN arrB[i][j] WITH arrA[2*j+1][3*i+2] */
|
|
||||||
void realign226()
|
|
||||||
{
|
|
||||||
#define AN1 16
|
|
||||||
#define AN2 18
|
|
||||||
#define BN1 6
|
|
||||||
#define BN2 4
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k1i*i+li][k2j*j+lj] */
|
|
||||||
int k1i = 1, li = 0;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
/* parameters for REALIGN arrB[i][j] WITH arrA[kr2j*j+lrj][kr1i*i+lri] */
|
|
||||||
int kr1i = 3, lri = 2;
|
|
||||||
int kr2j = 2, lrj = 1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A2[AN1][AN2];
|
|
||||||
#pragma dvm array align([i][j] with A2[k1i * i + li][k2j * j + lj])
|
|
||||||
int B2[BN1][BN2];
|
|
||||||
|
|
||||||
char tname[] = "realign226";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A2), in(B2), out(B2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib,jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = (i*NL+j)*3;
|
|
||||||
if (
|
|
||||||
((i-li) ==(((i-li)/k1i) * k1i)) &&
|
|
||||||
((j-lj) ==(((j-lj)/k2j) * k2j)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((j-lj)/k2j) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1) &&
|
|
||||||
(((j-lj)/k2j) < BN2)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
jb = (j-lj)/k2j;
|
|
||||||
B2[ib][jb]=ib*NL+jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[i][j] with A2[kr2j*j+lrj][kr1i*i+lri])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erria),min(errib)),private(ia,ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i*NL+j))
|
|
||||||
errib = Min(errib, i*NL/10+j);
|
|
||||||
ia=kr2j * j + lrj;
|
|
||||||
ja=kr1i * i + lri;
|
|
||||||
if (A2[ia][ja] != (ia*NL+ja)*3)
|
|
||||||
erria = Min(erria,i*NL/10+j);
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN227 */
|
|
||||||
/* ALIGN B2[*][*] WITH arrA[4][*]
|
|
||||||
REALIGN B2[i][j] WITH arrA[i+2][2*j] */
|
|
||||||
void realign227()
|
|
||||||
{
|
|
||||||
int AN1 = 10;
|
|
||||||
int AN2 = 12;
|
|
||||||
int BN1 = 4;
|
|
||||||
int BN2 = 6;
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[][] WITH arrA[li][] */
|
|
||||||
int k1i = 0, li = 4;
|
|
||||||
int k2j = 0, lj = 0;
|
|
||||||
/* parameters for REALIGN arrB[i][j] WITH arrA[kr1i*i+li][kr2j*j+lj] */
|
|
||||||
int kr1i = 1, lri = 2;
|
|
||||||
int kr2j = 2, lrj = 0;
|
|
||||||
|
|
||||||
char tname[] = "realign227";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B2)[BN2];
|
|
||||||
|
|
||||||
A2 = malloc(sizeof(int[AN1][AN2]));
|
|
||||||
B2 = malloc(sizeof(int[BN1][BN2]));
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[][] with A2[li][])
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([j][i] on A2[i][j]) private(ib, jb, k, n)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j + 4;
|
|
||||||
if (i == li)
|
|
||||||
for (k = 0; k < BN1; k++)
|
|
||||||
for (n = 0; n < BN2; n++)
|
|
||||||
{
|
|
||||||
ib = k;
|
|
||||||
jb = n;
|
|
||||||
B2[ib][jb] = ib * NL + jb + 7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[i][j] with A2[kr1i * i + lri][kr2j * j + lrj])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erria), min(errib)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i * NL + j + 7))
|
|
||||||
errib = Min(errib, i*NL/10+j);
|
|
||||||
ia = kr1i * i + lri;
|
|
||||||
ja = kr2j * j + lrj;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja + 4))
|
|
||||||
erria = Min(erria, i*NL/10+j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B2);
|
|
||||||
free(A2);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN228 */
|
|
||||||
/* ALIGN arrB[i][j] WITH arrA[j][i]
|
|
||||||
REALIGN arrB[*][*] WITH arrA[3][*] */
|
|
||||||
void realign228()
|
|
||||||
{
|
|
||||||
int AN1 = 14;
|
|
||||||
int AN2 = 8;
|
|
||||||
int BN1 = 4;
|
|
||||||
int BN2 = 3;
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k2j*j+lj][k1i*i+li] */
|
|
||||||
int k1i = 1, li = 0;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
/* parameters for REALIGN arrB[][] WITH arrA[lri][] */
|
|
||||||
int kr1i = 0, lri = 3;
|
|
||||||
int kr2j = 0, lrj = 0;
|
|
||||||
|
|
||||||
char tname[] = "realign228";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B2)[BN2];
|
|
||||||
|
|
||||||
A2 = malloc(sizeof(int[AN1][AN2]));
|
|
||||||
B2 = malloc(sizeof(int[BN1][BN2]));
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[i][j] with A2[k2j * j + lj][k1i * i + li])
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 1;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (
|
|
||||||
((i-lj) ==(((i-lj)/k2j) * k2j)) &&
|
|
||||||
((j-li) ==(((j-li)/k1i) * k1i)) &&
|
|
||||||
(((i-lj)/k2j) >= 0) &&
|
|
||||||
(((j-li)/k1i) >= 0) &&
|
|
||||||
(((i-lj)/k2j) < BN2) &&
|
|
||||||
(((j-li)/k1i) < BN1)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ib = (j-li)/k1i;
|
|
||||||
jb = (i-lj)/k2j;
|
|
||||||
B2[ib][jb] += ib*NL+jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[][] with A2[lri][])
|
|
||||||
|
|
||||||
#pragma dvm actual(errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(errib))
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
if (B2[i][j] != i * NL + j + 1)
|
|
||||||
errib = Min(errib, i*NL/10+j);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(errib)
|
|
||||||
|
|
||||||
if (errib == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B2);
|
|
||||||
free(A2);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REALIGN229 */
|
|
||||||
/* ALIGN B2[i][j] WITH arrA[2*i][3*j+1]
|
|
||||||
REALIGN B2[i][j] WITH arrA[j+6][i+2] */
|
|
||||||
void realign229()
|
|
||||||
{
|
|
||||||
int AN1 = 12;
|
|
||||||
int AN2 = 18;
|
|
||||||
int BN1 = 4;
|
|
||||||
int BN2 = 6;
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][j] WITH arrA[k1i*i+li][k2j*j+lj] */
|
|
||||||
int k1i = 2, li = 0;
|
|
||||||
int k2j = 3, lj = 1;
|
|
||||||
/* parameters for REALIGN arrB[i][j] WITH arrA[kr2j*j+lrj][kr1i*i+lri] */
|
|
||||||
int kr1i = 1, lri = 2;
|
|
||||||
int kr2j = 1, lrj = 6;
|
|
||||||
|
|
||||||
char tname[] = "realign229";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int (*A2)[AN2];
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B2)[BN2];
|
|
||||||
|
|
||||||
A2 = malloc(sizeof(int[AN1][AN2]));
|
|
||||||
B2 = malloc(sizeof(int[BN1][BN2]));
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[i][j] with A2[k1i * i + li][k2j * j + lj])
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A2[i][j]) private(ib, jb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
{
|
|
||||||
A2[i][j] = i * NL + j;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
B2[ib][jb] = ib * NL + jb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm realign(B2[i][j] with A2[kr2j * j + lrj][kr1i * i + lri])
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j]) reduction(min(erria), min(errib)), private(ia, ja)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
{
|
|
||||||
if (B2[i][j] != (i * NL + j))
|
|
||||||
errib = Min(errib, i*NL/10+j);
|
|
||||||
ia=kr2j * j + lrj;
|
|
||||||
ja=kr1i * i + lri;
|
|
||||||
if (A2[ia][ja] != (ia * NL + ja))
|
|
||||||
erria = Min(erria, i*NL/10+j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B2);
|
|
||||||
free(A2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-------------------------------------------------------*/
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,775 +0,0 @@
|
|||||||
/* REALIGN33
|
|
||||||
Testing ALIGN and REALIGN directives */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void realign331();
|
|
||||||
static void realign332();
|
|
||||||
static void realign333();
|
|
||||||
static void realign334();
|
|
||||||
static void realign335();
|
|
||||||
static void realign336();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno (const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
|
|
||||||
static int s,cs,erria,errib,i,j,n,l,ia,ja,na,ib,jb,nb;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF REALIGN33 ===================\n");
|
|
||||||
|
|
||||||
/* ALIGN arrB3[i][j][n] WITH arrA3[i][j][n]
|
|
||||||
REALIGN arrB3[i][j][n] WITH arrA3[i+1][j+2][n+3] */
|
|
||||||
realign331();
|
|
||||||
/* ALIGN arrB3[i][j][n] WITH arrA3[i][j][n]
|
|
||||||
REALIGN arrB3[i][j][n] WITH arrA3[2*i][3*j][5*n] */
|
|
||||||
realign332();
|
|
||||||
/* ALIGN arrB3[i][j][n] WITH arrA3[i+2][j+4][n+3]
|
|
||||||
REALIGN arrB3[i][j][n] WITH arrA3[2*i+1][2*n][j+1] */
|
|
||||||
realign333();
|
|
||||||
/* ALIGN arrB3[i][j][n] WITH arrA3[n+1][3*i+1][j+2]
|
|
||||||
REALIGN arrB3[i][j][n] WITH arrA3[2*j][i+1][2*n+1] */
|
|
||||||
realign334();
|
|
||||||
/* ALIGN arrB[*][*][*] WITH arrA[*][*][*]
|
|
||||||
REALIGN arrB[i][j][n] WITH arrA[i][j][n] */
|
|
||||||
realign335();
|
|
||||||
/* ALIGN arrB[i][j][n] WITH arrA[i][j+1][2*n+1]
|
|
||||||
REALIGN arrB[*][j][n] WITH arrA[j+1][n][1] */
|
|
||||||
realign336();
|
|
||||||
|
|
||||||
printf("=== END OF REALIGN33 ===================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------realign331 */
|
|
||||||
/* ALIGN arrB3[i][j][n] WITH arrA3[i][j][n]
|
|
||||||
REALIGN arrB3[i][j][n] WITH arrA3[i+1][j+2][n+3] */
|
|
||||||
|
|
||||||
void realign331()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 10
|
|
||||||
#define AN3 10
|
|
||||||
#define BN1 9
|
|
||||||
#define BN2 8
|
|
||||||
#define BN3 6
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][j][n] WITH arrA[k1i*i+li][k2j*j+lj][k3n*n+ln] */
|
|
||||||
int k1i=1, li=0;
|
|
||||||
int k2j=1, lj=0;
|
|
||||||
int k3n=1, ln=0;
|
|
||||||
/* parameters for REALIGN arrB[i][j][n] WITH arrA[kr1i*i+lri][kr2j*j+lrj][kr3n*n+lrn] */
|
|
||||||
int kr1i=1, lri=1;
|
|
||||||
int kr2j=1, lrj=2;
|
|
||||||
int kr3n=1, lrn=3;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j][n] with A3[k1i*i+li][k2j*j+lj][k3n*n+ln])
|
|
||||||
int B3[BN1][BN2][BN3];
|
|
||||||
|
|
||||||
char tname[] = "realign331";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A3,B3)
|
|
||||||
{
|
|
||||||
|
|
||||||
// A3 = 0;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = 0;
|
|
||||||
|
|
||||||
// B3 = 0;
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
B3[i][j][n] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) private(ib,jb,nb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = i*NL/10+j*NL/100+n*NL/1000;
|
|
||||||
if (((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
((j-lj) == (((j-lj)/k2j) * k2j)) &&
|
|
||||||
((n-ln) == (((n-ln)/k3n) * k3n)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((j-lj)/k2j) >= 0) &&
|
|
||||||
(((n-ln)/k3n) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1) &&
|
|
||||||
(((j-lj)/k2j) < BN2) &&
|
|
||||||
(((n-ln)/k3n) < BN3))
|
|
||||||
{
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
jb = (j-lj)/k2j;
|
|
||||||
nb = (n-ln)/k3n;
|
|
||||||
B3[ib][jb][nb]=ib*NL/10+jb*NL/100+nb*NL/1000;
|
|
||||||
}
|
|
||||||
} /* end of loop */
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B3[i][j][n] with A3[kr1i*i+lri][kr2j*j+lrj][kr3n*n+lrn])
|
|
||||||
|
|
||||||
s=0;
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib, s)
|
|
||||||
|
|
||||||
#pragma dvm region inlocal(A3,B3)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n]) reduction(min(erria),min(errib),sum(s)),private(ia,ja,na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
{
|
|
||||||
s = s + B3[i][j][n];
|
|
||||||
if (B3[i][j][n] != (i*NL/10+j*NL/100+n*NL/1000))
|
|
||||||
errib = Min(errib,i*NL/10 + j*NL/100 + n*NL/1000);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
ja=kr2j * j + lrj;
|
|
||||||
na=kr3n * n + lrn;
|
|
||||||
if (A3[ia][ja][na] != (ia*NL/10+ja*NL/100+na*NL/1000))
|
|
||||||
erria = Min(erria,ia*NL/10 + ja*NL/100 + na*NL/1000);
|
|
||||||
} /* end of loop */
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
cs = cs + i*NL/10 + j*NL/100 + n*NL/1000;
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib, s)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------realign332 */
|
|
||||||
/* ALIGN arrB3[i][j][n] WITH arrA3[i][j][n]
|
|
||||||
REALIGN arrB3[i][j][n] WITH arrA3[2*i][3*j][5*n] */
|
|
||||||
|
|
||||||
void realign332()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 16
|
|
||||||
#define AN3 25
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 5
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][j][n] WITH arrA[k1i*i+li][k2j*j+lj][k3n*n+ln] */
|
|
||||||
int k1i=1, li=0;
|
|
||||||
int k2j=1, lj=0;
|
|
||||||
int k3n=1, ln=0;
|
|
||||||
/* parameters for REALIGN arrB[i][j][n] WITH arrA[kr1i*i+lri][kr2j*j+lrj][kr3n*n+lrn] */
|
|
||||||
int kr1i=2, lri=0;
|
|
||||||
int kr2j=3, lrj=0;
|
|
||||||
int kr3n=5, lrn=0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j][n] with A3[k1i*i+li][k2j*j+lj][k3n*n+ln])
|
|
||||||
int B3[BN1][BN2][BN3];
|
|
||||||
|
|
||||||
char tname[] = "realign332";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A3,B3)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
B3[i][j][n] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) private(ib,jb,nb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n]=i*NL/10+j*NL/100+n*NL/1000 + 10;
|
|
||||||
if (
|
|
||||||
((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
((j-lj) == (((j-lj)/k2j) *k2j)) &&
|
|
||||||
((n-ln) == (((n-ln)/k3n) * k3n)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((j-lj)/k2j) >= 0) &&
|
|
||||||
(((n-ln)/k3n) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1) &&
|
|
||||||
(((j-lj)/k2j) < BN2) &&
|
|
||||||
(((n-ln)/k3n) < BN3)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
jb = (j-lj)/k2j;
|
|
||||||
nb = (n-ln)/k3n;
|
|
||||||
B3[i][j][n]=ib*NL/10+jb*NL/100+nb*NL/1000 + 5;
|
|
||||||
}
|
|
||||||
} /* end of loop */
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B3[i][j][n] with A3[kr1i*i+lri][kr2j*j+lrj][kr3n*n+lrn])
|
|
||||||
|
|
||||||
s=0;
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib, s)
|
|
||||||
|
|
||||||
#pragma dvm region inlocal(A3),inlocal(B3)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n]) reduction(min(erria), min(errib), sum(s)), private(ia, ja, na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++) {
|
|
||||||
s = s + B3[i][j][n];
|
|
||||||
if (B3[i][j][n] != (i*NL/10+j*NL/100+n*NL/1000) + 5)
|
|
||||||
errib = Min(errib,i*NL/10 + j*NL/100 + n*NL/1000);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
ja=kr2j * j + lrj;
|
|
||||||
na=kr3n * n + lrn;
|
|
||||||
if (A3[ia][ja][na] != (ia*NL/10+ja*NL/100+na*NL/1000)+10)
|
|
||||||
erria = Min(erria,ia*NL/10 + ja*NL/100 + na*NL/1000);
|
|
||||||
} /* end of loop */
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
cs = cs + i*NL/10 + j*NL/100 + n*NL/1000 + 5;
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib, s)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
}
|
|
||||||
/* --------------------------------------------------realign333 */
|
|
||||||
/* ALIGN arrB3[i][j][n] WITH arrA3[i+2][j+4][n+3]
|
|
||||||
REALIGN arrB3[i][j][n] WITH arrA3[2*i+1][2*n][j+1] */
|
|
||||||
|
|
||||||
void realign333()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 16
|
|
||||||
#define AN3 25
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 5
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][j][n] WITH arrA[k1i*i+li][k2j*j+lj][k3n*n+ln] */
|
|
||||||
int k1i=1, li=2;
|
|
||||||
int k2j=1, lj=4;
|
|
||||||
int k3n=1, ln=3;
|
|
||||||
/* parameters for REALIGN arrB[i][j][n] WITH arrA[kr1i*i+lri][kr3n*n+lrn][kr2j*j+lrj] */
|
|
||||||
int kr1i=2, lri=1;
|
|
||||||
int kr2j=1, lrj=1;
|
|
||||||
int kr3n=2, lrn=0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j][n] with A3[k1i*i+li][k2j*j+lj][k3n*n+ln])
|
|
||||||
int B3[BN1][BN2][BN3];
|
|
||||||
|
|
||||||
char tname[] = "realign333";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A3),inout(B3)
|
|
||||||
{
|
|
||||||
|
|
||||||
// A3 = 1;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = 1;
|
|
||||||
|
|
||||||
// B3 = 2;
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
B3[i][j][n] = 2;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) private(ib,jb,nb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = A3[i][j][n] + i*NL/10+j*NL/100+n*NL/1000;
|
|
||||||
if (
|
|
||||||
((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
((j-lj) == (((j-lj)/k2j) *k2j)) &&
|
|
||||||
((n-ln) == (((n-ln)/k3n) * k3n)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((j-lj)/k2j) >= 0) &&
|
|
||||||
(((n-ln)/k3n) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1) &&
|
|
||||||
(((j-lj)/k2j) < BN2) &&
|
|
||||||
(((n-ln)/k3n) < BN3)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
jb = (j-lj)/k2j;
|
|
||||||
nb = (n-ln)/k3n;
|
|
||||||
B3[ib][jb][nb] += ib*NL/10+jb*NL/100+nb*NL/1000;
|
|
||||||
}
|
|
||||||
} /* end of loop */
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B3[i][j][n] with A3[kr1i*i+lri][kr3n*n+lrn][kr2j*j+lrj])
|
|
||||||
|
|
||||||
s=0;
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib, s)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n]) reduction(min(erria),min(errib),sum(s)),private(ia,ja,na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
{
|
|
||||||
s = s + B3[i][j][n];
|
|
||||||
if (B3[i][j][n] != (i*NL/10+j*NL/100+n*NL/1000) + 2)
|
|
||||||
errib = Min(errib,i*NL/10 + j*NL/100 + n*NL/1000);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
ja=kr3n * n + lrn;
|
|
||||||
na=kr2j * j + lrj;
|
|
||||||
if (A3[ia][ja][na] != (ia*NL/10+ja*NL/100+na*NL/1000)+1)
|
|
||||||
erria = Min(erria,ia*NL/10 + ja*NL/100 + na*NL/1000);
|
|
||||||
} /* end of loop */
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
cs = cs + i*NL/10 + j*NL/100 + n*NL/1000 + 2;
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib, s)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------realign334 */
|
|
||||||
/* ALIGN arrB3[i][j][n] WITH arrA3[n+1][3*i+1][j+2]
|
|
||||||
REALIGN arrB3[i][j][n] WITH arrA3[2*j][i+1][2*n+1] */
|
|
||||||
|
|
||||||
void realign334()
|
|
||||||
{
|
|
||||||
#define AN1 15
|
|
||||||
#define AN2 28
|
|
||||||
#define AN3 20
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 6
|
|
||||||
#define BN3 6
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][j][n] WITH arrA[k3n*n+ln][k1i*i+li][k2j*j+lj] */
|
|
||||||
int k1i=3, li=1;
|
|
||||||
int k2j=1, lj=2;
|
|
||||||
int k3n=1, ln=1;
|
|
||||||
/* parameters for REALIGN arrB[i][j][n] WITH arrA[kr2j*j+lrj][kr1i*i+lri][kr3n*n+lrn] */
|
|
||||||
int kr1i=1, lri=1;
|
|
||||||
int kr2j=2, lrj=0;
|
|
||||||
int kr3n=2, lrn=1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j][n] with A3[k3n*n+ln][k1i*i+li][k2j*j+lj])
|
|
||||||
int B3[BN1][BN2][BN3];
|
|
||||||
|
|
||||||
char tname[] = "realign334";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region in(A3),in(B3),out(A3),out(B3)
|
|
||||||
{
|
|
||||||
|
|
||||||
// A3 = 0;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = 0;
|
|
||||||
|
|
||||||
// B3 = 0;
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
B3[i][j][n] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) private(ib,jb,nb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] += i*NL/10+j*NL/100+n*NL/1000;
|
|
||||||
if (
|
|
||||||
((i-ln) == (((i-ln)/k3n) * k3n)) &&
|
|
||||||
((j-li) == (((j-li)/k1i) * k1i)) &&
|
|
||||||
((n-lj) == (((n-lj)/k2j) * k2j)) &&
|
|
||||||
(((i-ln)/k3n) >= 0) &&
|
|
||||||
(((j-li)/k1i) >= 0) &&
|
|
||||||
(((n-lj)/k2j) >= 0) &&
|
|
||||||
(((i-ln)/k3n) < BN3) &&
|
|
||||||
(((j-li)/k1i) < BN1) &&
|
|
||||||
(((n-lj)/k2j) < BN2)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ib = (j-li)/k1i;
|
|
||||||
jb = (n-lj)/k2j;
|
|
||||||
nb = (i-ln)/k3n;
|
|
||||||
B3[ib][jb][nb] += ib*NL/10+jb*NL/100+nb*NL/1000;
|
|
||||||
}
|
|
||||||
} /* end of loop */
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B3[i][j][n] with A3[kr2j*j+lrj][kr1i*i+lri][kr3n*n+lrn])
|
|
||||||
|
|
||||||
s=0;
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib, s)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n]) reduction(min(erria),min(errib),sum(s)),private(ia,ja,na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
{
|
|
||||||
s += B3[i][j][n];
|
|
||||||
if (B3[i][j][n] != (i*NL/10+j*NL/100+n*NL/1000))
|
|
||||||
errib = Min(errib,i*NL/10 + j*NL/100 + n*NL/1000);
|
|
||||||
ia=kr2j * j + lrj;
|
|
||||||
ja=kr1i * i + lri;
|
|
||||||
na=kr3n * n + lrn;
|
|
||||||
if (A3[ia][ja][na] != (ia*NL/10+ja*NL/100+na*NL/1000))
|
|
||||||
erria = Min(erria,ia*NL/10 + ja*NL/100 + na*NL/1000);
|
|
||||||
} /* end of loop */
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
cs = cs + i*NL/10 + j*NL/100 + n*NL/1000;
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib, s)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------realign335 */
|
|
||||||
/* ALIGN arrB[*][*][*] WITH arrA[*][*][*]
|
|
||||||
REALIGN arrB[i][j][n] WITH arrA[i][j][n] */
|
|
||||||
|
|
||||||
void realign335()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 10
|
|
||||||
#define AN3 10
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 8
|
|
||||||
#define BN3 4
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[*][*][*] WITH arrA[*][*][*] */
|
|
||||||
int k1i=0, li=0;
|
|
||||||
int k2j=0, lj=0;
|
|
||||||
int k3n=0, ln=0;
|
|
||||||
/* parameters for REALIGN arrB[i][j][n] WITH arrA[kr1i*i+lri][kr2j*j+lrj][kr3n*n+lrn] */
|
|
||||||
int kr1i=1, lri=0;
|
|
||||||
int kr2j=1, lrj=0;
|
|
||||||
int kr3n=1, lrn=0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([][][] with A3[][][])
|
|
||||||
int B3[BN1][BN2][BN3];
|
|
||||||
|
|
||||||
char tname[] = "realign335";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual (A3, B3)
|
|
||||||
|
|
||||||
#pragma dvm region inout(B3)
|
|
||||||
{
|
|
||||||
|
|
||||||
// A3 = 0;
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
A3[i][j][n] = 0;
|
|
||||||
|
|
||||||
// B3 = 6;
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
B3[i][j][n] = 6;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n])
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] += i*NL/10+j*NL/100+n*NL/1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
{
|
|
||||||
B3[i][j][n] = B3[i][j][n] + i*NL/10+j*NL/100+n*NL/1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B3[i][j][n] with A3[kr1i*i+lri][kr2j*j+lrj][kr3n*n+lrn])
|
|
||||||
|
|
||||||
s=0;
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib, s)
|
|
||||||
|
|
||||||
#pragma dvm region inlocal(A3,B3)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n]) reduction(min(erria),min(errib),sum(s)),private(ia,ja,na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
{
|
|
||||||
s += B3[i][j][n];
|
|
||||||
if (B3[i][j][n] != (i*NL/10+j*NL/100+n*NL/1000)+ 6)
|
|
||||||
errib = Min(errib,i*NL/10 + j*NL/100 + n*NL/1000);
|
|
||||||
ia=kr1i * i + lri;
|
|
||||||
ja=kr2j * j + lrj;
|
|
||||||
na=kr3n * n + lrn;
|
|
||||||
if (A3[ia][ja][na] != (ia*NL/10+ja*NL/100+na*NL/1000))
|
|
||||||
erria = Min(erria,ia*NL/10 + ja*NL/100 + na*NL/1000);
|
|
||||||
} /* end of loop */
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
cs = cs + i*NL/10 + j*NL/100 + n*NL/1000 + 6;
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib, s)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------realign336 */
|
|
||||||
/* ALIGN arrB3[i][j][n] WITH arrA3[i][j+1][2*n+1]
|
|
||||||
REALIGN arrB3[*][j][n] WITH arrA[j+1][n][1] */
|
|
||||||
|
|
||||||
void realign336()
|
|
||||||
{
|
|
||||||
#define AN1 8
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 8
|
|
||||||
#define BN1 3
|
|
||||||
#define BN2 4
|
|
||||||
#define BN3 3
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[i][j][n] WITH arrA[k1i*i+li][k2j*j+lj][k3n*n+ln] */
|
|
||||||
int k1i=1,li=0;
|
|
||||||
int k2j=1,lj=1;
|
|
||||||
int k3n=2,ln=1;
|
|
||||||
/* parameters for REALIGN arrB[*][i][j] WITH arrA[kr2j*j+lrj][kr3n*n+lrn][lri] */
|
|
||||||
int kr1i=0,lri=1;
|
|
||||||
int kr2j=1,lrj=1;
|
|
||||||
int kr3n=1,lrn=0;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int A3[AN1][AN2][AN3];
|
|
||||||
#pragma dvm array align([i][j][n] with A3[k1i*i+li][k2j*j+lj][k3n*n+ln])
|
|
||||||
int B3[BN1][BN2][BN3];
|
|
||||||
|
|
||||||
char tname[] = "realign336";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm actual (B3)
|
|
||||||
|
|
||||||
#pragma dvm region inout(B3), inout(A3)
|
|
||||||
{
|
|
||||||
|
|
||||||
// B3 = 0;
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
B3[i][j][n] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n] on A3[i][j][n]) private(ib,jb,nb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
{
|
|
||||||
A3[i][j][n] = i*NL/10+j*NL/100+n*NL/1000;
|
|
||||||
if (
|
|
||||||
((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
((j-lj) == (((j-lj)/k2j) *k2j)) &&
|
|
||||||
((n-ln) == (((n-ln)/k3n) * k3n)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((j-lj)/k2j) >= 0) &&
|
|
||||||
(((n-ln)/k3n) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1) &&
|
|
||||||
(((j-lj)/k2j) < BN2) &&
|
|
||||||
(((n-ln)/k3n) < BN3)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
jb = (j-lj)/k2j;
|
|
||||||
nb = (n-ln)/k3n;
|
|
||||||
B3[ib][jb][nb]=ib*NL/10+jb*NL/100+nb*NL/1000;
|
|
||||||
}
|
|
||||||
} /* end of loop */
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B3[][j][n] with A3[kr2j*j+lrj][kr3n*n+lrn][lri])
|
|
||||||
|
|
||||||
s=0;
|
|
||||||
|
|
||||||
#pragma dvm actual (erria, errib, s)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n] on B3[i][j][n]) reduction(min(erria), min(errib), sum(s)), private(ia, ja, na)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
{
|
|
||||||
s = s + B3[i][j][n];
|
|
||||||
if (B3[i][j][n] != (i*NL/10+j*NL/100+n*NL/1000))
|
|
||||||
errib = Min(errib,i*NL/10 + j*NL/100+ n*NL/1000);
|
|
||||||
ia=kr2j*j+lrj;
|
|
||||||
ja=kr3n*n+lrn;
|
|
||||||
na=lri;
|
|
||||||
if (A3[ia][ja][na] != (ia*NL/10+ja*NL/100+na*NL/1000))
|
|
||||||
erria = Min(erria,i*NL/10 + j*NL/100+ n*NL/1000);
|
|
||||||
} /* end of loop */
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
cs = cs + i*NL/10 + j*NL/100+ n*NL/1000;
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib, s)
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------- */
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,553 +0,0 @@
|
|||||||
/* REALIGN44
|
|
||||||
Testing REALIGN directive */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
|
|
||||||
static void realign441();
|
|
||||||
static void realign442();
|
|
||||||
static void realign443();
|
|
||||||
static void realign444();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 10000;
|
|
||||||
static int ER = 100000;
|
|
||||||
static int erria, errib, i, j, k, n, m, na, ma, ia, ib, nb, mb, ja, jb, s, cs;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF REALIGN44 ======================\n");
|
|
||||||
|
|
||||||
/* ALIGN arrB[i][j][n][m] WITH arrA[i][j][n][m]
|
|
||||||
REALIGN arrB[][j][n][] WITH arrA[j][n][1][3] */
|
|
||||||
realign441();
|
|
||||||
/* ALIGN arrB[][j][n][i] WITH arrA[i][j][][n]
|
|
||||||
REALIGN arrB[i][j][][m] WITH arrA[i][j][2][m] */
|
|
||||||
realign442();
|
|
||||||
/* ALIGN arrB[i][j][n][m] WITH arrA[i][2*j][3*n][4*m]
|
|
||||||
REALIGN arrB[i][j][n][m] WITH arrA[i+1][j+2]+[n+3][m+4] */
|
|
||||||
realign443();
|
|
||||||
/* ALIGN arrB[i][j][n][m] WITH arrA[m][i][j][n]
|
|
||||||
REALIGN arrB[i][j][n][m] WITH arrA[i+2][3*j+4][2*n+2][m+1] */
|
|
||||||
realign444();
|
|
||||||
|
|
||||||
printf("=== END OF REALIGN44 ========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REALIGN441*/
|
|
||||||
/* ALIGN arrB[i][j][n][m] WITH arrA[i][j][n][m]
|
|
||||||
REALIGN arrB[][j][n][] WITH arrA[j][n][1][3] */
|
|
||||||
void realign441()
|
|
||||||
{
|
|
||||||
#define AN1 6
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 5
|
|
||||||
#define AN4 7
|
|
||||||
#define BN1 2
|
|
||||||
#define BN2 5
|
|
||||||
#define BN3 4
|
|
||||||
#define BN4 3
|
|
||||||
/* parameters for ALIGN arrB[i][j][n][m] WITH arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
int k1i = 1, li = 0;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
int k3n = 1, ln = 0;
|
|
||||||
int k4m = 1, lm = 0;
|
|
||||||
/* parameters for REALIGN arrB[*][j][n][*] WITH arrA[kr2j*j+lrj][kr3n*n+lrn][lri][lrm] */
|
|
||||||
int kr1i = 0, lri = 1;
|
|
||||||
int kr2j = 1, lrj = 0;
|
|
||||||
int kr3n = 1, lrn = 0;
|
|
||||||
int kr4m = 0, lrm = 3;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
#pragma dvm array align([i][j][n][m] with A4[k1i*i + li][k2j*j + lj][k3n*n + ln][k4m*m + lm])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "realign441";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
((n - ln) == (((n - ln) / k3n) * k3n)) &&
|
|
||||||
((m - lm) == (((m - lm) / k4m) * k4m)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((n - ln) / k3n) >= 0) &&
|
|
||||||
(((m - lm) / k4m) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2) &&
|
|
||||||
(((n - ln) / k3n) < BN3) &&
|
|
||||||
(((m - lm) / k4m) < BN4))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
nb = (n - ln) / k3n;
|
|
||||||
mb = (m - lm) / k4m;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm realign(B4[][j][n][] with A4[kr2j*j+lrj][kr3n*n+lrn][lri][lrm])
|
|
||||||
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erria, errib, s)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erria), min(errib), sum(s)), private(ia, ja, na, ma)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s += B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] !=val)
|
|
||||||
errib = Min(errib, val);
|
|
||||||
|
|
||||||
ia=kr2j*j+lrj;
|
|
||||||
ja=kr3n*n+lrn;
|
|
||||||
na=lri;
|
|
||||||
ma=lrm;
|
|
||||||
val = ia * NL / 10 + ja * NL / 100 + na * NL / 1000 + ma;
|
|
||||||
if (A4[ia][ja][na][ma] != val)
|
|
||||||
erria = Min(erria, val);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else {
|
|
||||||
ansno(tname);
|
|
||||||
printf ("%d, %d, %d\n", erria, errib, s);
|
|
||||||
}
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REALIGN442*/
|
|
||||||
/* ALIGN arrB[][j][n][i] WITH arrA[i][j][][n]
|
|
||||||
REALIGN arrB[i][j][][m] WITH arrA[i][j][2][m] */
|
|
||||||
void realign442()
|
|
||||||
{
|
|
||||||
int AN1 = 5, AN2 = 5, AN3 = 5, AN4 = 5;
|
|
||||||
int BN1 = 2, BN2 = 2, BN3 = 2, BN4 = 2;
|
|
||||||
|
|
||||||
/* parameters for ALIGN arrB[*][j][n][i] WITH arrA4(k1i*i+li,k2j*j+lj,*,k3m*n+lm) */
|
|
||||||
int k1i = 1, li = 0;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
int k3n = 0, ln = 0;
|
|
||||||
int k3m = 1, lm = 0;
|
|
||||||
/* parameters for REALIGN arrB[i][j][*][m] WITH arrA(kr1i*i+lri,kr2j*j+lrj,lrn,kr4m*m+lrm) */
|
|
||||||
int kr1i = 1, lri = 0;
|
|
||||||
int kr2j = 1, lrj = 0;
|
|
||||||
int kr3n = 0, lrn = 2;
|
|
||||||
int kr4m = 1, lrm = 0;
|
|
||||||
|
|
||||||
char tname[] = "realign442";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int (*A4)[AN2][AN3][AN4];
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B4)[BN2][BN3][BN4];
|
|
||||||
|
|
||||||
A4 = malloc(sizeof(int[AN1][AN2][AN3][AN4]));
|
|
||||||
B4 = malloc(sizeof(int[BN1][BN2][BN3][BN4]));
|
|
||||||
|
|
||||||
#pragma dvm realign(B4[][j][n][i] with A4[k1i*i + li][k2j*j + lj][][k3m*n + lm])
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region inout(A4, B4)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 0;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb, k)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
for (k = 0; k < BN1; k++)
|
|
||||||
{
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
((m - lm) == (((m - lm) / k3m) * k3m)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((m - lm) / k3m) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN4) &&
|
|
||||||
(((j - lj) / k2j) < BN2) &&
|
|
||||||
(((m - lm) / k3m) < BN3))
|
|
||||||
{
|
|
||||||
mb = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
ib = k;
|
|
||||||
nb = (m - lm) / k3m;
|
|
||||||
B4[ib][jb][nb][mb] = ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm realign(B4[i][j][][m] with A4[kr1i*i+lri][kr2j*j+lrj][lrn][kr4m*m+lrm])
|
|
||||||
s = 0;
|
|
||||||
#pragma dvm actual(erria, errib, s)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erria), min(errib), sum(s)), private(ia, ja, na, ma)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s += B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] != val)
|
|
||||||
errib = Min(errib,val);
|
|
||||||
|
|
||||||
ia = kr1i*i + lri;
|
|
||||||
ja = kr2j*j + lrj;
|
|
||||||
na = lrn;
|
|
||||||
ma = kr4m*m + lrm;
|
|
||||||
val = ia * NL / 10 + ja * NL / 100 + na * NL / 1000 + ma;
|
|
||||||
if (A4[ia][ja][na][ma] != val)
|
|
||||||
erria = Min(erria, val);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erria, errib, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
|
|
||||||
// printf("erri = %u, ER = %u, s = %u, cs = %u\n", erri, ER, s, cs);
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B4);
|
|
||||||
free(A4);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REALIGN443*/
|
|
||||||
/* ALIGN arrB[i][j][n][m] WITH arrA[i][2*j][3*n][4*m]
|
|
||||||
REALIGN arrB[i][j][n][m] WITH arrA[i+1][j+2]+[n+3][m+4] */
|
|
||||||
|
|
||||||
void realign443()
|
|
||||||
{
|
|
||||||
#define AN1 10
|
|
||||||
#define AN2 8
|
|
||||||
#define AN3 14
|
|
||||||
#define AN4 12
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 3
|
|
||||||
#define BN3 5
|
|
||||||
#define BN4 3
|
|
||||||
/* parameters for ALIGN arrB[i][j][n][m] WITH arrA[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm] */
|
|
||||||
int k1i = 1, li = 0;
|
|
||||||
int k2j = 2, lj = 0;
|
|
||||||
int k3n = 3, ln = 0;
|
|
||||||
int k4m = 4, lm = 0;
|
|
||||||
/* parameters for REALIGN arrB[i][j][n][m] WITH arrA[kr1i*i+lri][kr2j*j+lrj][kr3n*n+lrn][kr4m*m+lrm] */
|
|
||||||
int kr1i = 1, lri = 1;
|
|
||||||
int kr2j = 1, lrj = 2;
|
|
||||||
int kr3n = 1, lrn = 3;
|
|
||||||
int kr4m = 1, lrm = 4;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
#pragma dvm array align([i][j][n][m] with A4[k1i*i + li][k2j*j + lj][k3n*n + ln][k4m*m + lm])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "realign443";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 5;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m + 1;
|
|
||||||
if (((i - li) == (((i - li) / k1i) * k1i)) &&
|
|
||||||
((j - lj) == (((j - lj) / k2j) * k2j)) &&
|
|
||||||
((n - ln) == (((n - ln) / k3n) * k3n)) &&
|
|
||||||
((m - lm) == (((m - lm) / k4m) * k4m)) &&
|
|
||||||
(((i - li) / k1i) >= 0) &&
|
|
||||||
(((j - lj) / k2j) >= 0) &&
|
|
||||||
(((n - ln) / k3n) >= 0) &&
|
|
||||||
(((m - lm) / k4m) >= 0) &&
|
|
||||||
(((i - li) / k1i) < BN1) &&
|
|
||||||
(((j - lj) / k2j) < BN2) &&
|
|
||||||
(((n - ln) / k3n) < BN3) &&
|
|
||||||
(((m - lm) / k4m) < BN4))
|
|
||||||
{
|
|
||||||
ib = (i - li) / k1i;
|
|
||||||
jb = (j - lj) / k2j;
|
|
||||||
nb = (n - ln) / k3n;
|
|
||||||
mb = (m - lm) / k4m;
|
|
||||||
B4[ib][jb][nb][mb] += ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm realign(B4[i][j][n][m] with A4[kr1i*i + lri][kr2j*j + lrj][kr3n*n + lrn][kr4m*m + lrm])
|
|
||||||
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erria, errib, s)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erria), min(errib), sum(s)), private(ia, ja, na, ma)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s += B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] != val + 5)
|
|
||||||
errib = Min(errib, val);
|
|
||||||
|
|
||||||
ia=kr1i*i+lri;
|
|
||||||
ja=kr2j*j+lrj;
|
|
||||||
na=kr3n*n+lrn;
|
|
||||||
ma=kr4m*m+lrm;
|
|
||||||
val = ia * NL / 10 + ja * NL / 100 + na * NL / 1000 + ma;
|
|
||||||
if (A4[ia][ja][na][ma] != val + 1)
|
|
||||||
erria = Min(erria, val);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m + 5;
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf ("%d, %d, %d\n", erria, errib, s);
|
|
||||||
}
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REAGLIGN444*/
|
|
||||||
/* ALIGN arrB[i][j][n][m] WITH arrA[m][i+1][j][2*n]
|
|
||||||
REALIGN arrB[i][j][n][m] WITH arrA[i+2][3*j+4][2*n+2][m+1] */
|
|
||||||
|
|
||||||
void realign444()
|
|
||||||
{
|
|
||||||
#define AN1 12
|
|
||||||
#define AN2 15
|
|
||||||
#define AN3 16
|
|
||||||
#define AN4 10
|
|
||||||
#define BN1 4
|
|
||||||
#define BN2 4
|
|
||||||
#define BN3 5
|
|
||||||
#define BN4 3
|
|
||||||
/* parameters for ALIGN arrB[i][j][n][m] WITH arrA4[k4m*m+lm][k1i*i+li][k2j*j+lj][k3n*n+ln] */
|
|
||||||
int k1i = 1, li = 1;
|
|
||||||
int k2j = 1, lj = 0;
|
|
||||||
int k3n = 2, ln = 0;
|
|
||||||
int k4m = 1, lm = 0;
|
|
||||||
/* parameters for REALIGN arrB[i][j][n][m] WITH arrA[kr1i*i+lri][kr2j*j+lrj][kr3n*n+lrn][kr4m*m+lrm] */
|
|
||||||
int kr1i = 1, lri = 2;
|
|
||||||
int kr2j = 3, lrj = 4;
|
|
||||||
int kr3n = 2, lrn = 2;
|
|
||||||
int kr4m = 1, lrm = 1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int A4[AN1][AN2][AN3][AN4];
|
|
||||||
#pragma dvm array align([i][j][n][m] with A4[k4m*m+lm][k1i*i+li][k2j*j+lj][k3n*n+ln])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
char tname[] = "realign444";
|
|
||||||
|
|
||||||
erria = ER;
|
|
||||||
errib = ER;
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
B4[i][j][n][m] = 4;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][n][m] on A4[i][j][n][m]) private(ib, jb, nb, mb)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
{
|
|
||||||
A4[i][j][n][m] = 10 + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
if (
|
|
||||||
((i-lm) == (((i-lm)/k4m) * k4m)) &&
|
|
||||||
((j-li) == (((j-li)/k1i) * k1i)) &&
|
|
||||||
((n-lj) == (((n-lj)/k2j) * k2j)) &&
|
|
||||||
((m-ln) == (((m-ln)/k3n) * k3n)) &&
|
|
||||||
(((i-lm)/k4m) >= 0) &&
|
|
||||||
(((j-li)/k1i) >= 0) &&
|
|
||||||
(((n-lj)/k2j) >= 0) &&
|
|
||||||
(((m-ln)/k3n) >= 0) &&
|
|
||||||
(((i-lm)/k4m) < BN4)&&
|
|
||||||
(((j-li)/k1i) < BN1) &&
|
|
||||||
(((n-lj)/k2j) < BN2) &&
|
|
||||||
(((m-ln)/k3n) < BN3)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ib = (j-li)/k1i;
|
|
||||||
jb = (n-lj)/k2j;
|
|
||||||
nb = (m-ln)/k3n;
|
|
||||||
mb = (i-lm)/k4m;
|
|
||||||
B4[ib][jb][nb][mb] += ib * NL / 10 + jb * NL / 100 + nb * NL / 1000 + mb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm realign(B4[i][j][n][m] with A4[kr1i*i + lri][kr2j*j + lrj][kr3n*n + lrn][kr4m*m + lrm])
|
|
||||||
|
|
||||||
s = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(erria, errib, s)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][n][m] on B4[i][j][n][m]) reduction(min(erria), min(errib), sum(s)), private(ia, ja, na, ma)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
{
|
|
||||||
int val = i * NL / 10 + j * NL / 100 + n * NL / 1000 + m;
|
|
||||||
s += B4[i][j][n][m];
|
|
||||||
if (B4[i][j][n][m] != val+4)
|
|
||||||
errib = Min(errib, val);
|
|
||||||
|
|
||||||
ia=kr1i*i+lri;
|
|
||||||
ja=kr2j*j+lrj;
|
|
||||||
na=kr3n*n+lrn;
|
|
||||||
ma=kr4m*m+lrm;
|
|
||||||
val = ia * NL / 10 + ja * NL / 100 + na * NL / 1000 + ma;
|
|
||||||
if (A4[ia][ja][na][ma] != val+10)
|
|
||||||
erria = Min(erria, val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erria, errib, s)
|
|
||||||
|
|
||||||
cs = 0;
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
cs = cs + i * NL / 10 + j * NL / 100 + n * NL / 1000 + m + 4;
|
|
||||||
|
|
||||||
if ((erria == ER) && (errib == ER) && (s == cs))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
}
|
|
||||||
/* --------------------------------------------- */
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,995 +0,0 @@
|
|||||||
/* Testing REDUCTION clause
|
|
||||||
REDUCTION operations: SUM,PRODUCT,MAX,MIN,AND,OR,MAXLOC,MINLOC and
|
|
||||||
their combinations are executed
|
|
||||||
for distributed array A(N)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void red1101();
|
|
||||||
static void red1102();
|
|
||||||
static void red1103();
|
|
||||||
static void red1104();
|
|
||||||
static void red1105();
|
|
||||||
static void red1106();
|
|
||||||
static void red1107();
|
|
||||||
static void red1108();
|
|
||||||
static void red1111(); /* tests 109-110 are absent */
|
|
||||||
static void red1112();
|
|
||||||
static void red1113();
|
|
||||||
static void red1114();
|
|
||||||
static void red1115();
|
|
||||||
static void red1116();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int sersum1(int *AR, int N, int NL);
|
|
||||||
static int sersum1m(int *AR, int N, int NL);
|
|
||||||
static float sers1mr(float *RAR, int N, float RNL);
|
|
||||||
static int serprod1(int *AR, int N, int NL);
|
|
||||||
static float serprodr1(float *AR, int N, float RNL);
|
|
||||||
static int serand1(int *AR, int N);
|
|
||||||
static int seror1(int *AR, int N);
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("===START OF red11n ========================\n");
|
|
||||||
|
|
||||||
red1101();
|
|
||||||
red1102();
|
|
||||||
red1103();
|
|
||||||
red1104();
|
|
||||||
red1105();
|
|
||||||
red1106();
|
|
||||||
red1107();
|
|
||||||
red1108();
|
|
||||||
red1111();
|
|
||||||
red1112();
|
|
||||||
red1113();
|
|
||||||
red1114();
|
|
||||||
red1115();
|
|
||||||
red1116();
|
|
||||||
|
|
||||||
printf("=== END OF red11n ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1101 */
|
|
||||||
void red1101()
|
|
||||||
{
|
|
||||||
#define N 32
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
int C[N];
|
|
||||||
int i, isum1, isumt1;
|
|
||||||
|
|
||||||
char tname[] = "RED1101";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
isum1 = sersum1(C, N, NL);
|
|
||||||
isumt1=0;
|
|
||||||
|
|
||||||
#pragma dvm actual(isumt1)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL+i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(sum(isumt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
isumt1 = isumt1 + A[i];
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(isumt1)
|
|
||||||
|
|
||||||
if (isum1 == isumt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf("isum1=%d isumt1=%d\n",isum1,isumt1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1102 */
|
|
||||||
void red1102()
|
|
||||||
{
|
|
||||||
#define N 15
|
|
||||||
#define NL 2
|
|
||||||
|
|
||||||
int C[N];
|
|
||||||
int i;
|
|
||||||
int iprod1, iprodt1;
|
|
||||||
char tname[] = "RED1102";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
iprod1 = serprod1(C, N, NL);
|
|
||||||
|
|
||||||
iprodt1 = 1;
|
|
||||||
|
|
||||||
#pragma dvm actual(iprodt1)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(product(iprodt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
iprodt1 = iprodt1 * A[i];
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(iprodt1)
|
|
||||||
|
|
||||||
if (iprod1 == iprodt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf ("iprod1 = %d, iprodt1 = %d\n", iprod1, iprodt1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1103 */
|
|
||||||
void red1103()
|
|
||||||
{
|
|
||||||
#define N 30
|
|
||||||
#define NL 1003
|
|
||||||
|
|
||||||
int C[N];
|
|
||||||
int i, imax1, imaxt1, ni;
|
|
||||||
char tname[] = "RED1103";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
ni = N / 2 - 1;
|
|
||||||
A[ni] = N + 1 + NL;
|
|
||||||
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[1])
|
|
||||||
{
|
|
||||||
imaxt1 = A[1];
|
|
||||||
}
|
|
||||||
#pragma dvm actual(imaxt1)
|
|
||||||
} /* end host_section */
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(max(imaxt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
if (A[i] > imaxt1) imaxt1 = A[i];
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(imaxt1)
|
|
||||||
|
|
||||||
imax1 = N + 1 + NL;
|
|
||||||
|
|
||||||
if (imax1 == imaxt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf("imax1=%d imaxt1=%d\n",imax1,imaxt1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1104 */
|
|
||||||
void red1104()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define NL 1004
|
|
||||||
int C[N];
|
|
||||||
int i, imin1, imint1, ni;
|
|
||||||
char tname[] = "RED1104";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm remote_access(A[1])
|
|
||||||
{
|
|
||||||
imint1 = A[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
ni = N / 2 + 1;
|
|
||||||
A[ni] = -(N + 1 + NL);
|
|
||||||
imin1 = -(N + 1 + NL);
|
|
||||||
|
|
||||||
#pragma dvm actual(imint1, A[ni])
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(min(imint1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
if (A[i] < imint1) imint1 = A[i];
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(imint1)
|
|
||||||
|
|
||||||
if (imin1 == imint1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf("imin1=%d imint1=%d\n",imin1,imint1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1105 */
|
|
||||||
void red1105()
|
|
||||||
{
|
|
||||||
#define N 32
|
|
||||||
#define RNL 1005.
|
|
||||||
|
|
||||||
float C[N];
|
|
||||||
int i, ni;
|
|
||||||
float imax1, imaxt1;
|
|
||||||
char tname[] = "RED1105";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
float A[N];
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = RNL + i;
|
|
||||||
|
|
||||||
ni = N / 2 - 1;
|
|
||||||
A[ni] = N + 1. + RNL;
|
|
||||||
imax1 = N + 1. + RNL;
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(imax1)
|
|
||||||
|
|
||||||
#pragma dvm remote_access(A[1])
|
|
||||||
{
|
|
||||||
imaxt1 = A[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm actual(imaxt1)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(max(imaxt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
if (A[i] > imaxt1) imaxt1=A[i];
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(imaxt1)
|
|
||||||
|
|
||||||
if (imax1 == imaxt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf("imax1=%f imaxt1=%f\n",imax1,imaxt1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef RNL
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1106 */
|
|
||||||
void red1106()
|
|
||||||
{
|
|
||||||
#define N 11
|
|
||||||
float RNL = 1.;
|
|
||||||
|
|
||||||
float C[N];
|
|
||||||
int i;
|
|
||||||
float iprod1, iprodt1;
|
|
||||||
char tname[] = "RED1106";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
float A[N];
|
|
||||||
|
|
||||||
iprod1 = serprodr1(C, N, RNL);
|
|
||||||
iprodt1 = 1.;
|
|
||||||
|
|
||||||
#pragma dvm actual(iprodt1)
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = RNL + i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(product(iprodt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
iprodt1 = iprodt1 * A[i];
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(iprodt1)
|
|
||||||
|
|
||||||
if (iprod1 == iprodt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf ("iprod1 = %f, iprodt1 = %f\n", iprod1, iprodt1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1107 */
|
|
||||||
void red1107()
|
|
||||||
{
|
|
||||||
#define N 31
|
|
||||||
|
|
||||||
int CL[N];
|
|
||||||
int i;
|
|
||||||
int land1, landt1;
|
|
||||||
char tname[] = "RED1107";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
land1 = serand1(CL, N);
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i+=2)
|
|
||||||
A[i] = 1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 1; i < N; i+=2)
|
|
||||||
A[i] = 0;
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
// # pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
#pragma dvm remote_access(A[1])
|
|
||||||
{
|
|
||||||
landt1 = A[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm actual(landt1)
|
|
||||||
|
|
||||||
#pragma dvm region inlocal(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(and(landt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
landt1 = landt1 && A[i];
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(landt1)
|
|
||||||
|
|
||||||
if (land1 == landt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1108 */
|
|
||||||
void red1108()
|
|
||||||
{
|
|
||||||
#define N 17
|
|
||||||
|
|
||||||
int CL[N];
|
|
||||||
int i;
|
|
||||||
int lor1,lort1;
|
|
||||||
char tname[] = "RED1108";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
lor1 = seror1(CL, N);
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = i % 2;
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[1])
|
|
||||||
{
|
|
||||||
lort1 = A[1];
|
|
||||||
}
|
|
||||||
#pragma dvm actual(lort1)
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(or(lort1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
lort1 = lort1 || A[i];
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(lort1)
|
|
||||||
|
|
||||||
if (lor1 == lort1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1111 */
|
|
||||||
void red1111()
|
|
||||||
{
|
|
||||||
#define N 32
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
int C[N];
|
|
||||||
int i, imaxloc1, imaxloct1, it1, ni;
|
|
||||||
char tname[] = "RED1111";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
|
|
||||||
ni = N / 2 + 1;
|
|
||||||
A[ni] = N + 1 + NL;
|
|
||||||
imaxloc1 = N + 1 + NL;
|
|
||||||
|
|
||||||
#pragma dvm remote_access(A[0])
|
|
||||||
{
|
|
||||||
imaxloct1 = A[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm actual(imaxloct1)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(maxloc(imaxloct1, it1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
if (A[i] > imaxloct1) {
|
|
||||||
imaxloct1 = A[i];
|
|
||||||
it1 = i;
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(imaxloct1,it1)
|
|
||||||
|
|
||||||
if ((imaxloct1 == imaxloc1) && (it1 == ni))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf("imax1=%d imaxt1=%d imaxloct1=%d it1=%d ni=%d\n",
|
|
||||||
// imax1,imaxt1,imaxloct1,it1,ni);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1112 */
|
|
||||||
void red1112()
|
|
||||||
{
|
|
||||||
#define N 27
|
|
||||||
int NL = 1012;
|
|
||||||
int C[N];
|
|
||||||
int i, ni, iminloc1, iminloct1,it2;
|
|
||||||
char tname[] = "RED1112";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
|
|
||||||
ni = N / 2 + 2;
|
|
||||||
A[ni] = - (N + 1 + NL);
|
|
||||||
#pragma dvm actual(A[ni])
|
|
||||||
iminloc1 = -(N + 1 + NL);
|
|
||||||
|
|
||||||
#pragma dvm remote_access(A[3])
|
|
||||||
{
|
|
||||||
iminloct1=A[3];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm actual(iminloct1)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(minloc(iminloct1, it2))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
if (A[i] < iminloct1) {
|
|
||||||
iminloct1 = A[i];
|
|
||||||
it2 = i;
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(iminloct1, it2)
|
|
||||||
|
|
||||||
if ((iminloct1 == iminloc1) && (it2 == ni))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf("imin1=%d imint1=%d iminloct1=%d it2=%d ni=%d\n",
|
|
||||||
// imin1,imint1,iminloct1,it2,ni);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1113 */
|
|
||||||
void red1113()
|
|
||||||
{
|
|
||||||
#define N 24
|
|
||||||
#define NL 1003
|
|
||||||
|
|
||||||
int C[N];
|
|
||||||
int i, isum1, isumt1, imax1, imaxt1, imin1, imint1, ni;
|
|
||||||
char tname[] = "RED1113";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
isum1 = sersum1m(C, N, NL);
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL+i;
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
ni = N / 2 - 2;
|
|
||||||
A[ni] = N + 1 + NL;
|
|
||||||
#pragma dvm actual(A[ni])
|
|
||||||
|
|
||||||
imax1 = N + 1 + NL;
|
|
||||||
|
|
||||||
#pragma dvm remote_access(A[1])
|
|
||||||
{
|
|
||||||
imaxt1 = A[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
ni = N / 2;
|
|
||||||
A[ni] = -(N + 1 + NL);
|
|
||||||
#pragma dvm actual(A[ni])
|
|
||||||
|
|
||||||
imin1 = -(N + 1 + NL);
|
|
||||||
imint1 = imaxt1;
|
|
||||||
|
|
||||||
isumt1 = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(isumt1, imaxt1, imint1)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(sum(isumt1), max(imaxt1), min(imint1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
{
|
|
||||||
isumt1 = isumt1 + A[i];
|
|
||||||
if (A[i] > imaxt1) imaxt1 = A[i];
|
|
||||||
if (A[i] < imint1) imint1 = A[i];
|
|
||||||
}
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(isumt1, imaxt1, imint1)
|
|
||||||
|
|
||||||
if ((isum1 == isumt1) && (imax1 == imaxt1) && (imin1 == imint1))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf("isum1=%d isumt1=%d\n",isum1,isumt1);
|
|
||||||
// printf("imax1=%d imaxt1=%d\n",imax1,imaxt1);
|
|
||||||
// printf("imin1=%d imint1=%d\n",imin1,imint1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1114 */
|
|
||||||
void red1114()
|
|
||||||
{
|
|
||||||
#define N 13
|
|
||||||
#define NL 2
|
|
||||||
|
|
||||||
int C[N],CL[N];
|
|
||||||
char tname[] = "RED1114";
|
|
||||||
int i;
|
|
||||||
int iprod1, iprodt1;
|
|
||||||
int land1, landt1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
#pragma dvm array align([i] with A[i])
|
|
||||||
int B[N];
|
|
||||||
|
|
||||||
iprod1 = serprod1(C, N, NL);
|
|
||||||
land1 = serand1(CL, N);
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL + i;
|
|
||||||
#pragma dvm parallel([i] on B[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
B[i] = i%2;
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
// #pragma dvm get_actual (B[1])
|
|
||||||
|
|
||||||
#pragma dvm remote_access(B[1])
|
|
||||||
{
|
|
||||||
landt1 = B[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
iprodt1 = 1;
|
|
||||||
|
|
||||||
#pragma dvm actual (landt1, iprodt1)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(product(iprodt1), and(landt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
{
|
|
||||||
iprodt1 = iprodt1 * A[i];
|
|
||||||
landt1 = landt1 && B[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(iprodt1, landt1)
|
|
||||||
|
|
||||||
if ((iprod1 == iprodt1) && (land1 == landt1))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf ("iprod1 = %f, iprodt1 = %f\n", iprod1, iprodt1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1115 */
|
|
||||||
void red1115()
|
|
||||||
{
|
|
||||||
#define N 22
|
|
||||||
#define NL 1015
|
|
||||||
|
|
||||||
int C[N];
|
|
||||||
int i, imax1, imaxt1, imin1, ni1, ni2;
|
|
||||||
int imaxloct1, iminloct1, it1, it2;
|
|
||||||
char tname[] = "RED1115";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int A[N];
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = NL+i;
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
ni1 = N / 2 - 3;
|
|
||||||
A[ni1] = N + 1 + NL;
|
|
||||||
imax1 = N + 1 + NL;
|
|
||||||
|
|
||||||
ni2 = N / 2 + 2;
|
|
||||||
A[ni2] = -(N + 1 + NL);
|
|
||||||
imin1 = -(N + 1 + NL);
|
|
||||||
|
|
||||||
#pragma dvm remote_access(A[1])
|
|
||||||
{
|
|
||||||
imaxt1=A[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
imaxloct1 = imaxt1;
|
|
||||||
iminloct1 = imaxloct1;
|
|
||||||
|
|
||||||
#pragma dvm actual(A[ni1], A[ni2], imaxt1, imaxloct1, iminloct1)
|
|
||||||
|
|
||||||
#pragma dvm region inout(A)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(max(imaxt1),maxloc(imaxloct1,it1), minloc(iminloct1,it2))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
{
|
|
||||||
if (A[i] > imaxt1) imaxt1 = A[i];
|
|
||||||
if (A[i] > imaxloct1)
|
|
||||||
{
|
|
||||||
imaxloct1 = A[i];
|
|
||||||
it1 = i;
|
|
||||||
}
|
|
||||||
if (A[i] < iminloct1)
|
|
||||||
{
|
|
||||||
iminloct1 = A[i];
|
|
||||||
it2 = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(imaxt1, imaxloct1, it1, iminloct1, it2)
|
|
||||||
|
|
||||||
if ((imaxloct1 == imax1) && (iminloct1 == imin1) &&
|
|
||||||
(imaxt1 == imaxloct1) && (it1 == ni1) && (it2 == ni2))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf("imax1=%d imaxt1=%d imaxloct1=%d it1=%d ni1=%d\n",
|
|
||||||
// imax1,imaxt1,imaxloct1,it1,ni1);
|
|
||||||
// printf("imin1=%d iminloct1=%d it2=%d ni2=%d\n",
|
|
||||||
// imin1,iminloct1,it2,ni2);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef NL
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED1116 */
|
|
||||||
void red1116()
|
|
||||||
{
|
|
||||||
#define N 28
|
|
||||||
#define RNL 1016.
|
|
||||||
|
|
||||||
float C[N];
|
|
||||||
int i, ni1, ni2, it1, it2;
|
|
||||||
float isum1, isumt1, imax1, imin1;
|
|
||||||
float imaxloct1, iminloct1;
|
|
||||||
char tname[] = "RED1116";
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
float A[N];
|
|
||||||
|
|
||||||
isum1 = sers1mr(C, N, RNL);
|
|
||||||
|
|
||||||
/* printf("c=%d isum1=%d\n",C[1],isum1); */
|
|
||||||
|
|
||||||
imax1 = N + 1. + RNL;
|
|
||||||
imin1 = -(N + 1 + RNL);
|
|
||||||
|
|
||||||
#pragma dvm region inout(A, ni1, ni2)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on A[i])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
A[i] = RNL + i;
|
|
||||||
|
|
||||||
ni1 = N / 2 - 1;
|
|
||||||
A[ni1] = N + 1. + RNL;
|
|
||||||
|
|
||||||
ni2 = N / 2 + 1;
|
|
||||||
A[ni2] = -(N + 1 + RNL);
|
|
||||||
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[1])
|
|
||||||
{
|
|
||||||
imaxloct1 = A[1];
|
|
||||||
}
|
|
||||||
#pragma dvm actual(imaxloct1)
|
|
||||||
}
|
|
||||||
|
|
||||||
iminloct1 = imaxloct1;
|
|
||||||
|
|
||||||
isumt1 = 0.;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A[i]) reduction(sum(isumt1), maxloc(imaxloct1, it1), minloc(iminloct1, it2))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
{
|
|
||||||
isumt1 = isumt1 + A[i];
|
|
||||||
if (A[i] > imaxloct1)
|
|
||||||
{
|
|
||||||
imaxloct1 = A[i];
|
|
||||||
it1 = i;
|
|
||||||
}
|
|
||||||
if (A[i] < iminloct1)
|
|
||||||
{
|
|
||||||
iminloct1 = A[i];
|
|
||||||
it2 = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} /* end region */
|
|
||||||
|
|
||||||
#pragma dvm get_actual(isumt1, imaxloct1, iminloct1)
|
|
||||||
|
|
||||||
if ((isum1 == isumt1) && (imaxloct1 == imax1) && (iminloct1 == imin1) &&
|
|
||||||
(it1 == ni1) && (it2 == ni2))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ansno(tname);
|
|
||||||
// printf("isum1=%f isumt1=%f\n",isum1,isumt1);
|
|
||||||
// printf("imax1=%f imaxloct1=%f it1=%d ni1=%d\n",
|
|
||||||
// imax1,imaxloct1,it1,ni1);
|
|
||||||
// printf("imin1=%f iminloct1=%f it2=%d ni2=%d\n",
|
|
||||||
// imin1,iminloct1,it2,ni2);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef RNL
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --------------------------------------------- */
|
|
||||||
|
|
||||||
int sersum1(int *AR, int NN, int NL)
|
|
||||||
{
|
|
||||||
int i, s;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
AR[i] = NL+i;
|
|
||||||
|
|
||||||
s=0;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
s = s + AR[i];
|
|
||||||
|
|
||||||
// printf("s=%d\n",s);
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sersum1m(int *AR, int NN, int NL)
|
|
||||||
{
|
|
||||||
int i, ni, s;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
AR[i] = NL + i;
|
|
||||||
ni = NN / 2 - 2;
|
|
||||||
AR[ni] = NN + 1 + NL;
|
|
||||||
ni= NN / 2;
|
|
||||||
AR[ni] = -(NN + 1 + NL);
|
|
||||||
|
|
||||||
s = 0;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
s = s + AR[i];
|
|
||||||
|
|
||||||
// printf("s=%d\n",s);
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
float sers1mr(float *RAR, int NN, float RNL)
|
|
||||||
{
|
|
||||||
int i, ni;
|
|
||||||
float s;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
RAR[i] = RNL + i;
|
|
||||||
ni = NN / 2 - 1;
|
|
||||||
RAR[ni]=NN + 1.+ RNL;
|
|
||||||
ni = NN / 2 + 1;
|
|
||||||
RAR[ni] = -(NN + 1.+ RNL);
|
|
||||||
|
|
||||||
s = 0;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
s = s + RAR[i];
|
|
||||||
// printf("s=%d\n",s);
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
int serprod1(int *AR, int NN, int NL)
|
|
||||||
{
|
|
||||||
int i, p;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
AR[i] = NL + i;
|
|
||||||
|
|
||||||
p = 1;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
p = p * AR[i];
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
float serprodr1(float *AR, int NN, float RNL)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
float p;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
AR[i] = RNL + i;
|
|
||||||
|
|
||||||
p = 1.;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
p = p * AR[i];
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
int serand1(int *AR, int NN)
|
|
||||||
{
|
|
||||||
int i, ni, LAND;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
AR[i] = i % 2;
|
|
||||||
|
|
||||||
LAND = AR[1];
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
LAND = LAND && AR[i];
|
|
||||||
|
|
||||||
return LAND;
|
|
||||||
}
|
|
||||||
|
|
||||||
int seror1(int *AR, int NN)
|
|
||||||
{
|
|
||||||
int i, LOR;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
AR[i] = i % 2;
|
|
||||||
|
|
||||||
LOR = AR[1];
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
LOR = LOR || AR[i];
|
|
||||||
|
|
||||||
return LOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --------------------------------------------- */
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,915 +0,0 @@
|
|||||||
/* TESTING OF THE REDUCTION CLAUSE .
|
|
||||||
REDUCTION OPERATION : SUM.PRODUCT,MAX,MIN,AND,OR,MAXLOC,MINLOC AND
|
|
||||||
THEIR COMBINATION ARE EXECUTED
|
|
||||||
FOR DISTRIBUTED ARRAY A[N][M].
|
|
||||||
*/
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define N 8
|
|
||||||
#define M 8
|
|
||||||
#define NL 1000
|
|
||||||
#define RNL 1000.
|
|
||||||
#define PNL 1
|
|
||||||
#define RPNL 1.
|
|
||||||
|
|
||||||
static void red2101();
|
|
||||||
static void red2102();
|
|
||||||
static void red2103();
|
|
||||||
static void red2104();
|
|
||||||
static void red2105();
|
|
||||||
static void red2106();
|
|
||||||
static void red2107();
|
|
||||||
static void red2108();
|
|
||||||
static void red2109();
|
|
||||||
static void red2111();
|
|
||||||
static void red2112();
|
|
||||||
static void red2113();
|
|
||||||
static void red2114();
|
|
||||||
|
|
||||||
static int sersum2(int AR[N][M], int NN, int NM, int NNL);
|
|
||||||
static int sersum2m(int AR[N][M], int NN, int NM, int NNL);
|
|
||||||
static float sers2mr(float RAR[N][M], int NN, int NM, float RNNL);
|
|
||||||
static long serprod2(int AR[N][M], int NN, int NM, int NNL);
|
|
||||||
static float serprodr2(float AR[N][M], int NN, int NM, float NNL);
|
|
||||||
static int serand2(int AR[N][M], int NN, int NM, int NNL);
|
|
||||||
static int seror2(int AR[N][M], int NN, int NM, int NNL);
|
|
||||||
static int serxor2(int AR[N][M], int NN, int NM, int NNL);
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START OF red21m ========================\n");
|
|
||||||
red2101();
|
|
||||||
red2102();
|
|
||||||
red2103();
|
|
||||||
red2104();
|
|
||||||
red2105();
|
|
||||||
red2106();
|
|
||||||
red2107();
|
|
||||||
red2108();
|
|
||||||
red2109();
|
|
||||||
red2111();
|
|
||||||
red2112();
|
|
||||||
red2113();
|
|
||||||
red2114();
|
|
||||||
|
|
||||||
printf("=== END OF red21m ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------RED2101 */
|
|
||||||
void red2101()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "RED2101";
|
|
||||||
int i, j, NN, NM, NNL, ISUM1, isum1, isumt1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
isum1 = sersum2(C, NN, NM, NNL);
|
|
||||||
/* printf("isum1=%d\n",isum1);*/
|
|
||||||
|
|
||||||
isumt1 = 0;
|
|
||||||
#pragma dvm actual(isumt1)
|
|
||||||
#pragma dvm region local(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(sum(isumt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
isumt1 = isumt1 + A[i][j];
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(isumt1)
|
|
||||||
|
|
||||||
if (isum1 == isumt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
// printf("isum1=%d isumt1=%d\n",isum1,isumt1);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------RED2102 */
|
|
||||||
void red2102()
|
|
||||||
{
|
|
||||||
int C[N][M], CL[N][M];
|
|
||||||
char tname[] = "RED2102";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
long iprod1, iprodt1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = PNL;
|
|
||||||
|
|
||||||
iprod1 = serprod2(C, NN, NM, NNL);
|
|
||||||
|
|
||||||
iprodt1 = 1;
|
|
||||||
#pragma dvm actual(iprodt1)
|
|
||||||
#pragma dvm region local(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NNL + i + j;
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(product(iprodt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
iprodt1 = iprodt1 * A[i][j];
|
|
||||||
/* printf("iprodt1=%ld\n",iprodt1);*/
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(iprodt1)
|
|
||||||
/* printf("iprod1=%ld iprodt1=%ld \n",
|
|
||||||
iprod1,iprodt1);*/
|
|
||||||
|
|
||||||
if (iprod1 == iprodt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------RED2103*/
|
|
||||||
void red2103()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "RED2103";
|
|
||||||
int i, j, NN, NM, NNL, imax1, imaxt1, ni, nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
ni = N / 2 - 1;
|
|
||||||
nj = M / 2 - 1;
|
|
||||||
imax1 = N + M + 1 + NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(imax1, ni, nj)
|
|
||||||
// #pragma dvm region local(A)
|
|
||||||
// {
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NNL + i + j;
|
|
||||||
A[ni][nj] = N + M + 1 + NNL;
|
|
||||||
|
|
||||||
#pragma dvm actual(A)
|
|
||||||
#pragma dvm region in(A)
|
|
||||||
{
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[0][0])
|
|
||||||
{
|
|
||||||
imaxt1=A[0][0];
|
|
||||||
// printf("imaxt1=%d\n",imaxt1);
|
|
||||||
}
|
|
||||||
#pragma dvm actual(imaxt1)
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(max(imaxt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
if (A[i][j] > imaxt1) imaxt1=A[i][j];
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(imaxt1)
|
|
||||||
|
|
||||||
if (imax1 == imaxt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
// printf("imax1=%d imaxt1=%d\n",imax1,imaxt1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------RED2104 */
|
|
||||||
void red2104()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "RED2104";
|
|
||||||
int i, j, NN, NM, NNL, imin1, imint1, ni, nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
ni = N / 2 +1;
|
|
||||||
nj = M / 2 + 1;
|
|
||||||
imin1 = -(N + M + 1 + NL);
|
|
||||||
|
|
||||||
#pragma dvm actual(imin1, ni, nj)
|
|
||||||
// #pragma dvm region local(A)
|
|
||||||
// {
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
A[ni][nj] = -(N + M + 1 + NL);
|
|
||||||
|
|
||||||
#pragma dvm actual(A)
|
|
||||||
#pragma dvm region in(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[0][0])
|
|
||||||
{
|
|
||||||
imint1=A[0][0];
|
|
||||||
// printf("imint1=%d\n",imint1);
|
|
||||||
}
|
|
||||||
#pragma dvm actual(imint1)
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(min(imint1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
if (A[i][j] < imint1) imint1=A[i][j];
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(imint1)
|
|
||||||
|
|
||||||
if (imin1 == imint1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
// printf("imin1=%d imint1=%d\n",imin1,imint1);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------RED2105*/
|
|
||||||
void red2105()
|
|
||||||
{
|
|
||||||
float C[N][M];
|
|
||||||
char tname[] = "RED2105";
|
|
||||||
int i, j, NN, NM, NNL, ni, nj;
|
|
||||||
float imax1, imaxt1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
float A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
ni = N / 2 - 1;
|
|
||||||
nj = M / 2 - 1;
|
|
||||||
imax1= N + M + 1. + RNL;
|
|
||||||
|
|
||||||
#pragma dvm actual(imax1, ni, nj)
|
|
||||||
// #pragma dvm region local(A)
|
|
||||||
// {
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
A[ni][nj] = N + M + 1. + RNL;
|
|
||||||
|
|
||||||
#pragma dvm actual(A)
|
|
||||||
#pragma dvm region in(A)
|
|
||||||
{
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[0][0])
|
|
||||||
{
|
|
||||||
imaxt1=A[0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm actual(imaxt1)
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(max(imaxt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
if (A[i][j] > imaxt1) imaxt1 = A[i][j];
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(imaxt1)
|
|
||||||
if (imax1 == imaxt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
/* printf("imax1=%f imaxt1=%f\n",imax1,imaxt1); */
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------RED2106 */
|
|
||||||
void red2106()
|
|
||||||
{
|
|
||||||
float C[N][M], CL[N][M];
|
|
||||||
char tname[] = "RED2106";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
float iprod1, iprodt1, RNNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
float A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
RNNL = RPNL;
|
|
||||||
|
|
||||||
iprod1 = serprodr2(C, NN, NM, RNNL);
|
|
||||||
iprodt1 = 1;
|
|
||||||
|
|
||||||
#pragma dvm actual(iprodt1)
|
|
||||||
#pragma dvm region local(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(product(iprodt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
iprodt1 = iprodt1 * A[i][j];
|
|
||||||
/* printf("iprodt1=%ld\n",iprodt1);*/
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(iprodt1)
|
|
||||||
/* printf("iprod1=%ld iprodt1=%ld \n",
|
|
||||||
iprod1,iprodt1);
|
|
||||||
*/
|
|
||||||
if (iprod1 == iprodt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED2107*/
|
|
||||||
void red2107()
|
|
||||||
{
|
|
||||||
int C[N][M], CL[N][M];
|
|
||||||
char tname[] = "RED2107";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
int land1, landt1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
land1 = serand2(CL, NN, NM, NNL);
|
|
||||||
|
|
||||||
#pragma dvm actual(land1)
|
|
||||||
#pragma dvm region local(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j += 2)
|
|
||||||
A[i][j] = 1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 1; j < M; j += 2)
|
|
||||||
A[i][j] = 0;
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[0][0])
|
|
||||||
{
|
|
||||||
landt1=A[0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm actual(landt1)
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(and(landt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
landt1 = landt1 && A[i][j];
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(landt1)
|
|
||||||
/* printf(" land1=%d landt1=%d\n",
|
|
||||||
land1,landt1);*/
|
|
||||||
|
|
||||||
if (land1 == landt1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------RED2108*/
|
|
||||||
void red2108()
|
|
||||||
{
|
|
||||||
int C[N][M], CL[N][M];
|
|
||||||
char tname[] = "RED2108";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
int lor1, lort1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
lor1 = seror2(CL, NN, NM, NNL);
|
|
||||||
|
|
||||||
#pragma dvm actual(lor1)
|
|
||||||
#pragma dvm region local(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j += 2)
|
|
||||||
A[i][j] = 1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 1; j < M; j += 2)
|
|
||||||
A[i][j] = 0;
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[0][0])
|
|
||||||
{
|
|
||||||
lort1=A[0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm actual(lort1)
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(or(lort1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
lort1 = lort1 || A[i][j];
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(lort1)
|
|
||||||
|
|
||||||
if (lor1 == lort1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------RED2109*/
|
|
||||||
void red2109()
|
|
||||||
{
|
|
||||||
int C[N][M], CL[N][M];
|
|
||||||
char tname[] = "RED2109";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
int lxor1, lxort1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
lxor1 = serxor2(CL, NN, NM, NNL);
|
|
||||||
|
|
||||||
#pragma dvm actual(lxor1)
|
|
||||||
#pragma dvm region local(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j += 2)
|
|
||||||
A[i][j] = 1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 1; j < M; j += 2)
|
|
||||||
A[i][j] = 0;
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
lxort1 = 0;
|
|
||||||
#pragma dvm actual(lxort1)
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(xor(lxort1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
lxort1 = lxort1 ^ A[i][j];
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(lxort1)
|
|
||||||
|
|
||||||
if (lxor1 == lxort1)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED2111*/
|
|
||||||
void red2111()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "RED2111";
|
|
||||||
int i, j, NN, NM, NNL, imax1, imaxt1, ni, ni1, nj, nj1;
|
|
||||||
int imaxloct1;
|
|
||||||
int coor[2];
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
ni = N / 2 - 1;
|
|
||||||
nj = M / 2 - 1;
|
|
||||||
imax1 = N + M + 1 + NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(imax1,ni,nj)
|
|
||||||
// #pragma dvm region local(A)
|
|
||||||
// {
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
A[ni][nj] = N + M + 1 + NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(A)
|
|
||||||
#pragma dvm region in(A)
|
|
||||||
{
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[0][0])
|
|
||||||
{
|
|
||||||
imaxt1=A[0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm actual(imaxt1)
|
|
||||||
}
|
|
||||||
imaxloct1 = imaxt1;
|
|
||||||
coor[0] = 0;
|
|
||||||
coor[1] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(maxloc(imaxloct1, coor))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
if (A[i][j] > imaxloct1)
|
|
||||||
{
|
|
||||||
imaxloct1 = A[i][j];
|
|
||||||
coor[0] = i;
|
|
||||||
coor[1] = j;
|
|
||||||
}
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(imaxloct1, coor)
|
|
||||||
if ((imaxloct1 == imax1) && (coor[0] == ni) && (coor[1] == nj))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
/* printf("imax1=%d imaxt1=%d imaxloct1=%d coor=%d %d ni=%d\n",
|
|
||||||
imax1,imaxt1,imaxloct1,coor[0],coor[1],ni); */
|
|
||||||
}
|
|
||||||
/*---------------------------------------------RED2112*/
|
|
||||||
void red2112()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "RED2112";
|
|
||||||
int i, j, NN, NM, NNL, imin1, imint1, ni, ni1, nj1;
|
|
||||||
int iminloct1;
|
|
||||||
int coor[2];
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
ni1 = N /2 + 1;
|
|
||||||
nj1 = M / 2 +1;
|
|
||||||
imin1 = -(N + 1 + M + NL);
|
|
||||||
|
|
||||||
#pragma dvm actual(imin1, ni1, nj1)
|
|
||||||
// #pragma dvm region local(A)
|
|
||||||
// {
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
A[ni1][nj1] = -(N + 1 + M + NL);
|
|
||||||
|
|
||||||
#pragma dvm actual(A)
|
|
||||||
#pragma dvm region in(A)
|
|
||||||
{
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[0][0])
|
|
||||||
{
|
|
||||||
imint1 = A[0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm actual(imint1)
|
|
||||||
}
|
|
||||||
iminloct1 = imint1;
|
|
||||||
coor[0] = 0;
|
|
||||||
coor[1] = 0;
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(minloc(iminloct1,coor))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
if (A[i][j] < iminloct1)
|
|
||||||
{
|
|
||||||
iminloct1 = A[i][j];
|
|
||||||
coor[0] = i;
|
|
||||||
coor[1] = j;
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(iminloct1, coor)
|
|
||||||
|
|
||||||
if ((iminloct1 == imin1) && (coor[0] == ni1) && (coor[1] == nj1))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
/* printf("imin1=%d imint1=%d iminloct1=%d coor=%d %d ni1=%d\n",
|
|
||||||
imin1,imint1,iminloct1,coor[0],coor[1],ni1);*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------RED2113*/
|
|
||||||
void red2113()
|
|
||||||
{
|
|
||||||
int C[N][M];
|
|
||||||
char tname[] = "RED2113";
|
|
||||||
int i, j, NN, NM, NNL, ISUM1, isum1, isumt1, imax1, imaxt1, imin1, imint1, ni, nj;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
isum1 = sersum2m(C, NN, NM, NNL);
|
|
||||||
imax1 = N + M + 1 + NL;
|
|
||||||
|
|
||||||
ni = N / 2 - 1;
|
|
||||||
nj = M / 2 - 1;
|
|
||||||
imin1 = -(N + M + 1 + NL);
|
|
||||||
isumt1 = 0;
|
|
||||||
|
|
||||||
#pragma dvm actual(imin1, imax1, isumt1, ni, nj)
|
|
||||||
// #pragma dvm region local(A)
|
|
||||||
// {
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
|
|
||||||
A[ni][nj] = -(N + M + 1 + NL);
|
|
||||||
A[ni+1][nj+1] = N + M + 1 + NL;
|
|
||||||
|
|
||||||
#pragma dvm actual(A)
|
|
||||||
#pragma dvm region in(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(A[0][0])
|
|
||||||
{
|
|
||||||
imaxt1 = A[0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm actual(imaxt1)
|
|
||||||
}
|
|
||||||
imint1 = imaxt1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(sum(isumt1), max(imaxt1), min(imint1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
{
|
|
||||||
isumt1 = isumt1 + A[i][j];
|
|
||||||
if (A[i][j] > imaxt1) imaxt1 = A[i][j];
|
|
||||||
if (A[i][j] < imint1) imint1 = A[i][j];
|
|
||||||
}
|
|
||||||
} /*end region*/
|
|
||||||
|
|
||||||
#pragma dvm get_actual(isumt1, imaxt1, imint1)
|
|
||||||
|
|
||||||
if ((isum1 == isumt1) && (imax1 == imaxt1) && (imin1 == imint1))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
/* printf("isum1=%d isumt1=%d\n",isum1,isumt1);
|
|
||||||
printf("imax1=%d imaxt1=%d\n",imax1,imaxt1);
|
|
||||||
printf("imin1=%d imint1=%d\n",imin1,imint1); */
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------RED2114*/
|
|
||||||
void red2114()
|
|
||||||
{
|
|
||||||
int C[N][M], CL[N][M];
|
|
||||||
char tname[] = "RED2114";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
int iprod1, iprodt1;
|
|
||||||
int land1, landt1;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
#pragma dvm array align([i][j]with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
|
|
||||||
iprod1 = serprod2(C, NN, NM, NNL);
|
|
||||||
land1 = serand2(CL, NN, NM, NNL);
|
|
||||||
|
|
||||||
#pragma dvm actual(iprod1, land1)
|
|
||||||
#pragma dvm region local(A), local(B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j += 2)
|
|
||||||
B[i][j] = 1;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 1; j < M; j += 2)
|
|
||||||
B[i][j] = 0;
|
|
||||||
|
|
||||||
#pragma dvm host_section
|
|
||||||
{
|
|
||||||
#pragma dvm remote_access(B[0][0])
|
|
||||||
{
|
|
||||||
landt1 = B[0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm actual(landt1)
|
|
||||||
}
|
|
||||||
|
|
||||||
iprodt1 = 1;
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j]) reduction(product(iprodt1), and(landt1))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
{
|
|
||||||
iprodt1 = iprodt1*A[i][j];
|
|
||||||
landt1 = landt1 && B[i][j];
|
|
||||||
}
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(iprodt1,landt1)
|
|
||||||
|
|
||||||
/* printf("iprod1=%d iprodt1=%d land1=%d landt1=%d\n",
|
|
||||||
iprod1,iprodt1,land1,landt1); */
|
|
||||||
|
|
||||||
if ((iprod1 == iprodt1) && (land1 == landt1))
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
int sersum2(int AR[N][M], int NN, int NM, int NNL)
|
|
||||||
{
|
|
||||||
int i, j, S;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
AR[i][j] = NNL + i + j;
|
|
||||||
|
|
||||||
S = 0;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
S = S + AR[i][j];
|
|
||||||
|
|
||||||
/* printf("s=%d\n",S);*/
|
|
||||||
return S;
|
|
||||||
}
|
|
||||||
int sersum2m(int AR[N][M], int NN, int NM, int NNL)
|
|
||||||
{
|
|
||||||
int i, j, ni, nj, S;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
AR[i][j] = NNL + i + j;
|
|
||||||
ni = NN / 2 - 1;
|
|
||||||
nj = NM / 2 - 1;
|
|
||||||
AR[ni][nj] = NN + NM + 1 + NNL;
|
|
||||||
ni = NN / 2;
|
|
||||||
nj = NM / 2;
|
|
||||||
AR[ni][nj] = -(NN + NM + 1 + NNL);
|
|
||||||
S = 0;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
S = S + AR[i][j];
|
|
||||||
/* printf("s=%d\n",S);*/
|
|
||||||
return S;
|
|
||||||
}
|
|
||||||
float sers2mr(float RAR[N][M], int NN, int NM, float NNL)
|
|
||||||
{
|
|
||||||
int i, j, ni, nj;
|
|
||||||
float S;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
RAR[i][j] = NNL+i+j;
|
|
||||||
|
|
||||||
ni = NN / 2 - 1;
|
|
||||||
nj = NM / 2 - 1;
|
|
||||||
RAR[ni][nj] = NN + NM + 1. + NNL;
|
|
||||||
ni = NN / 2 + 1;
|
|
||||||
nj = NM / 2 + 1;
|
|
||||||
RAR[ni][nj] = -(NN + NM + 1. + NNL);
|
|
||||||
S = 0;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
S = S + RAR[i][j];
|
|
||||||
|
|
||||||
/* printf("s=%d\n",S);*/
|
|
||||||
return S;
|
|
||||||
}
|
|
||||||
long serprod2(int AR[N][M], int NN, int NM, int NNL)
|
|
||||||
{
|
|
||||||
int i, j, ni, nj;
|
|
||||||
long P;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
AR[i][j] = NNL+i+j;
|
|
||||||
/* printf("I=%d J=%d AR=%d\n",I,J,AR[I][J]);*/
|
|
||||||
|
|
||||||
P = 1;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
P = P * AR[i][j];
|
|
||||||
return P;
|
|
||||||
}
|
|
||||||
float serprodr2(float AR[N][M], int NN, int NM, float NNL)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
float P;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
AR[i][j] = NNL+i+j;
|
|
||||||
P = 1;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
P = P * AR[i][j];
|
|
||||||
return P;
|
|
||||||
}
|
|
||||||
int serand2(int AR[N][M], int NN, int NM, int NNL)
|
|
||||||
{
|
|
||||||
int i, j, LAND;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j += 2)
|
|
||||||
AR[i][j] = 1;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 1; j < NM; j += 2)
|
|
||||||
AR[i][j] = 0;
|
|
||||||
|
|
||||||
LAND = AR[0][0];
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
LAND = LAND && AR[i][j];
|
|
||||||
|
|
||||||
return LAND;
|
|
||||||
}
|
|
||||||
|
|
||||||
int seror2(int AR[N][M], int NN, int NM, int NNL)
|
|
||||||
{
|
|
||||||
int i, j, LOR;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j += 2)
|
|
||||||
AR[i][j] = 1;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 1; j < NM; j += 2)
|
|
||||||
AR[i][j] = 0;
|
|
||||||
|
|
||||||
LOR = AR[0][0];
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
LOR = LOR || AR[i][j];
|
|
||||||
|
|
||||||
return LOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
int serxor2(int AR[N][M], int NN, int NM, int NNL)
|
|
||||||
{
|
|
||||||
int i, j, LXOR;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j += 2)
|
|
||||||
AR[i][j] = 1;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 1; j < NM; j += 2)
|
|
||||||
AR[i][j] = 0;
|
|
||||||
|
|
||||||
LXOR = 0;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
LXOR = LXOR ^ AR[i][j];
|
|
||||||
|
|
||||||
return LXOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,537 +0,0 @@
|
|||||||
// TESTING OF THE REMOTE_ACCESS DIRECTIVE AND THE REMOTE_ACCESS CLAUSE'.
|
|
||||||
// DISTRIBUTED ARRAY A(N) OR ELEMENTS OF THIS ARRAY ARE REPLICATED
|
|
||||||
// ON ALL PROCESSORS.
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
void rem1101();
|
|
||||||
void rem1102();
|
|
||||||
void rem1103();
|
|
||||||
void rem1104();
|
|
||||||
void rem1105();
|
|
||||||
void rem1106();
|
|
||||||
void rem1107();
|
|
||||||
void rem1108();
|
|
||||||
void rem1109();
|
|
||||||
void rem1110();
|
|
||||||
void rem1111();
|
|
||||||
void rem1112();
|
|
||||||
|
|
||||||
void serial1(int *ar, int n, int nl);
|
|
||||||
void ansyes(const char *name);
|
|
||||||
void ansno(const char *name);
|
|
||||||
|
|
||||||
#define n 16
|
|
||||||
#define nl 1000
|
|
||||||
#define Min(x, y) (x < y) ? (x) : (y)
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
printf("===START OF REM11========================\n");
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1101();
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1102();
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1103();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1104();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1105();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1106();
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1107();
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1108();
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1109();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1110();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1111();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1112();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
//
|
|
||||||
//
|
|
||||||
printf("=== END OF REM11 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------REM1101
|
|
||||||
void rem1101() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl, ib;
|
|
||||||
|
|
||||||
const char *tname = "REM1101";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(a[0])
|
|
||||||
#pragma dvm remote_access(a[0])
|
|
||||||
{ ib = a[0]; }
|
|
||||||
|
|
||||||
if (ib == c[0]) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1102() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl, ib;
|
|
||||||
|
|
||||||
const char *tname = "REM1102";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(a[n - 1])
|
|
||||||
#pragma dvm remote_access(a[n - 1])
|
|
||||||
{ ib = a[n - 1]; }
|
|
||||||
|
|
||||||
if (ib == c[n - 1]) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1103() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl, ib;
|
|
||||||
|
|
||||||
const char *tname = "REM1103";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(a[n / 2 - 1])
|
|
||||||
#pragma dvm remote_access(a[n / 2 - 1])
|
|
||||||
{ ib = a[n / 2 - 1]; }
|
|
||||||
|
|
||||||
if (ib == c[n / 2 - 1]) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1104() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n], d[n];
|
|
||||||
int nloop, i, nnl, isumc, isuma;
|
|
||||||
|
|
||||||
const char *tname = "REM1104";
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
#pragma dvm get_actual(a[i - 1])
|
|
||||||
#pragma dvm remote_access(a[i - 1])
|
|
||||||
{ d[i - 1] = a[i - 1]; }
|
|
||||||
isumc = isumc + c[i - 1];
|
|
||||||
isuma = isuma + d[i - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isumc == isuma) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1105() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n], d[n];
|
|
||||||
int nloop, i, nnl, isumc, isuma;
|
|
||||||
|
|
||||||
const char *tname = "REM1105";
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(a)
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
#pragma dvm remote_access(a[])
|
|
||||||
{ d[i - 1] = a[i - 1]; }
|
|
||||||
isumc = isumc + c[i - 1];
|
|
||||||
isuma = isuma + d[i - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isumc == isuma) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1106() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n], d[n];
|
|
||||||
int nloop, i, nnl, isumc, isuma;
|
|
||||||
|
|
||||||
const char *tname = "REM1106";
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int kk = 2;
|
|
||||||
int kk1 = 3;
|
|
||||||
for (i = 1; i <= n / kk - kk1; i++) {
|
|
||||||
#pragma dvm get_actual(a[kk * (i - 1) + kk1])
|
|
||||||
#pragma dvm remote_access(a[kk * (i - 1) + kk1])
|
|
||||||
{ d[i - 1] = a[kk * (i - 1) + kk1]; }
|
|
||||||
isumc = isumc + c[kk * (i - 1) + kk1];
|
|
||||||
isuma = isuma + d[i - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isumc == isuma) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1107() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1107";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[0])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
b[i - 1] = a[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on a[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
if (b[i - 1] != c[0]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1108() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1108";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[n - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
b[i - 1] = a[n - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
if (b[i - 1] != c[n - 1]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1109() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1109";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[n / 2 - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
b[i - 1] = a[n / 2 - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
if (b[i - 1] != c[n / 2 - 1]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1110() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1110";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
b[i - 1] = a[i - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
if (b[i - 1] != c[i - 1]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1111() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1111";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
b[i - 1] = a[i - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
if (b[i - 1] != c[i - 1]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1112() {
|
|
||||||
#pragma dvm array distribute[block]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1112";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
int kk = 2;
|
|
||||||
int kk1 = 3;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[kk * i + (kk1 - kk)])
|
|
||||||
for (i = 1; i <= n / kk - kk1; i++) {
|
|
||||||
b[i - 1] = a[kk * i + (kk1 - kk)];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n / kk - kk1; i++) {
|
|
||||||
if (b[i - 1] != c[kk * (i - 1) + kk1]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef n
|
|
||||||
#undef nl
|
|
||||||
|
|
||||||
void serial1(int *ar, int n, int nl) {
|
|
||||||
int i;
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
ar[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char *name) { printf("%s - complete\n", name); }
|
|
||||||
|
|
||||||
void ansno(const char *name) { printf("%s - ***error\n", name); }
|
|
||||||
@@ -1,537 +0,0 @@
|
|||||||
// TESTING OF THE REMOTE_ACCESS DIRECTIVE AND THE REMOTE_ACCESS CLAUSE'.
|
|
||||||
// DISTRIBUTED ARRAY A(N) OR ELEMENTS OF THIS ARRAY ARE REPLICATED
|
|
||||||
// ON ALL PROCESSORS.
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
void rem1101();
|
|
||||||
void rem1102();
|
|
||||||
void rem1103();
|
|
||||||
void rem1104();
|
|
||||||
void rem1105();
|
|
||||||
void rem1106();
|
|
||||||
void rem1107();
|
|
||||||
void rem1108();
|
|
||||||
void rem1109();
|
|
||||||
void rem1110();
|
|
||||||
void rem1111();
|
|
||||||
void rem1112();
|
|
||||||
|
|
||||||
void serial1(int *ar, int n, int nl);
|
|
||||||
void ansyes(const char *name);
|
|
||||||
void ansno(const char *name);
|
|
||||||
|
|
||||||
#define n 16
|
|
||||||
#define nl 1000
|
|
||||||
#define Min(x, y) (x < y) ? (x) : (y)
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
printf("===START OF REM11========================\n");
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1101();
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1102();
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1103();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1104();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1105();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1106();
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1107();
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1108();
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
|
||||||
rem1109();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1110();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1111();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
rem1112();
|
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
//
|
|
||||||
//
|
|
||||||
printf("=== END OF REM11 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------REM1101
|
|
||||||
void rem1101() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl, ib;
|
|
||||||
|
|
||||||
const char *tname = "REM1101";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(a[0])
|
|
||||||
#pragma dvm remote_access(a[0])
|
|
||||||
{ ib = a[0]; }
|
|
||||||
|
|
||||||
if (ib == c[0]) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1102() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl, ib;
|
|
||||||
|
|
||||||
const char *tname = "REM1102";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(a[n - 1])
|
|
||||||
#pragma dvm remote_access(a[n - 1])
|
|
||||||
{ ib = a[n - 1]; }
|
|
||||||
|
|
||||||
if (ib == c[n - 1]) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1103() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl, ib;
|
|
||||||
|
|
||||||
const char *tname = "REM1103";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(a[n / 2 - 1])
|
|
||||||
#pragma dvm remote_access(a[n / 2 - 1])
|
|
||||||
{ ib = a[n / 2 - 1]; }
|
|
||||||
|
|
||||||
if (ib == c[n / 2 - 1]) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1104() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n], d[n];
|
|
||||||
int nloop, i, nnl, isumc, isuma;
|
|
||||||
|
|
||||||
const char *tname = "REM1104";
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
#pragma dvm get_actual(a[i - 1])
|
|
||||||
#pragma dvm remote_access(a[i - 1])
|
|
||||||
{ d[i - 1] = a[i - 1]; }
|
|
||||||
isumc = isumc + c[i - 1];
|
|
||||||
isuma = isuma + d[i - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isumc == isuma) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1105() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n], d[n];
|
|
||||||
int nloop, i, nnl, isumc, isuma;
|
|
||||||
|
|
||||||
const char *tname = "REM1105";
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(a)
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
#pragma dvm remote_access(a[])
|
|
||||||
{ d[i - 1] = a[i - 1]; }
|
|
||||||
isumc = isumc + c[i - 1];
|
|
||||||
isuma = isuma + d[i - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isumc == isuma) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1106() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n], d[n];
|
|
||||||
int nloop, i, nnl, isumc, isuma;
|
|
||||||
|
|
||||||
const char *tname = "REM1106";
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region out(a)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int kk = 2;
|
|
||||||
int kk1 = 3;
|
|
||||||
for (i = 1; i <= n / kk - kk1; i++) {
|
|
||||||
#pragma dvm get_actual(a[kk * (i - 1) + kk1])
|
|
||||||
#pragma dvm remote_access(a[kk * (i - 1) + kk1])
|
|
||||||
{ d[i - 1] = a[kk * (i - 1) + kk1]; }
|
|
||||||
isumc = isumc + c[kk * (i - 1) + kk1];
|
|
||||||
isuma = isuma + d[i - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isumc == isuma) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1107() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1107";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[0])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
b[i - 1] = a[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on a[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
if (b[i - 1] != c[0]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1108() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1108";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[n - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
b[i - 1] = a[n - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
if (b[i - 1] != c[n - 1]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1109() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1109";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[n / 2 - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
b[i - 1] = a[n / 2 - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
if (b[i - 1] != c[n / 2 - 1]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1110() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1110";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
b[i - 1] = a[i - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
if (b[i - 1] != c[i - 1]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1111() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1111";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
b[i - 1] = a[i - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
if (b[i - 1] != c[i - 1]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rem1112() {
|
|
||||||
#pragma dvm array distribute[*]
|
|
||||||
int b[n];
|
|
||||||
#pragma dvm array align([i] with b[i])
|
|
||||||
int a[n];
|
|
||||||
int c[n];
|
|
||||||
int nloop, i, nnl;
|
|
||||||
|
|
||||||
const char *tname = "REM1112";
|
|
||||||
nnl = nl;
|
|
||||||
serial1(c, n, nnl);
|
|
||||||
nloop = nl;
|
|
||||||
int kk = 2;
|
|
||||||
int kk1 = 3;
|
|
||||||
|
|
||||||
#pragma dvm region local(a, b)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on a[i - 1])
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
a[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) remote_access(a[kk * i + (kk1 - kk)])
|
|
||||||
for (i = 1; i <= n / kk - kk1; i++) {
|
|
||||||
b[i - 1] = a[kk * i + (kk1 - kk)];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on b[i - 1]) reduction(min(nloop))
|
|
||||||
for (i = 1; i <= n / kk - kk1; i++) {
|
|
||||||
if (b[i - 1] != c[kk * (i - 1) + kk1]) {
|
|
||||||
nloop = Min(nloop, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == nl) {
|
|
||||||
ansyes(tname);
|
|
||||||
} else {
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef n
|
|
||||||
#undef nl
|
|
||||||
|
|
||||||
void serial1(int *ar, int n, int nl) {
|
|
||||||
int i;
|
|
||||||
for (i = 1; i <= n; i++) {
|
|
||||||
ar[i - 1] = nl + i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char *name) { printf("%s - complete\n", name); }
|
|
||||||
|
|
||||||
void ansno(const char *name) { printf("%s - ***error\n", name); }
|
|
||||||
@@ -1,943 +0,0 @@
|
|||||||
/* TESTING OF THE REMOTE_ACCESS DIRECTIVE AND THE REMOTE_ACCESS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M) OR ELEMENTS OF THIS ARRAY ARE REPLICATED
|
|
||||||
ON ALL PROCESSORS. */
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
#define N 16
|
|
||||||
#define M 8
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void rem2101();
|
|
||||||
static void rem2102();
|
|
||||||
static void rem2103();
|
|
||||||
static void rem2104();
|
|
||||||
static void rem2105();
|
|
||||||
static void rem2106();
|
|
||||||
static void rem2107();
|
|
||||||
static void rem2108();
|
|
||||||
static void rem2109();
|
|
||||||
static void rem2110();
|
|
||||||
static void rem2111();
|
|
||||||
static void rem2112();
|
|
||||||
static void rem2113();
|
|
||||||
static void rem2114();
|
|
||||||
static void rem2115();
|
|
||||||
static void rem2116();
|
|
||||||
static void rem2117();
|
|
||||||
static void rem2118();
|
|
||||||
static void rem2119();
|
|
||||||
static void rem2120();
|
|
||||||
static void serial2(int AR[N][M], int NN, int NM, int NNL);
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
int main(int an, char **as) {
|
|
||||||
printf("===START OF REM21========================\n");
|
|
||||||
rem2101();
|
|
||||||
rem2102();
|
|
||||||
rem2103();
|
|
||||||
rem2104();
|
|
||||||
rem2105();
|
|
||||||
rem2106();
|
|
||||||
rem2107();
|
|
||||||
rem2108();
|
|
||||||
rem2109();
|
|
||||||
rem2110();
|
|
||||||
rem2111();
|
|
||||||
rem2112();
|
|
||||||
rem2113();
|
|
||||||
rem2114();
|
|
||||||
rem2115();
|
|
||||||
rem2116();
|
|
||||||
rem2117();
|
|
||||||
rem2118();
|
|
||||||
rem2119();
|
|
||||||
rem2120();
|
|
||||||
|
|
||||||
printf("=== END OF REM21 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2101 */
|
|
||||||
void rem2101() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2101";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[0][0])
|
|
||||||
#pragma dvm remote_access(A[0][0])
|
|
||||||
{ ib = A[0][0]; }
|
|
||||||
if (ib == C[0][0])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2102 */
|
|
||||||
void rem2102() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2102";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A[N - 1][M - 1])
|
|
||||||
#pragma dvm remote_access(A[N - 1][M - 1])
|
|
||||||
{ ib = A[N - 1][M - 1]; }
|
|
||||||
if (ib == C[N - 1][M - 1])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2103 */
|
|
||||||
void rem2103() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2103";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A[0][M - 1])
|
|
||||||
#pragma dvm remote_access(A[0][M - 1])
|
|
||||||
{ ib = A[0][M - 1]; }
|
|
||||||
if (ib == C[0][M - 1])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2104 */
|
|
||||||
void rem2104() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2104";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[N - 1][0])
|
|
||||||
#pragma dvm remote_access(A[N - 1][0])
|
|
||||||
{ ib = A[N - 1][0]; }
|
|
||||||
if (ib == C[N - 1][0])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2105 */
|
|
||||||
void rem2105() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int ib, isuma, isumc;
|
|
||||||
char tname[] = "REM2105";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, N, M, NNL);
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
#pragma dvm remote_access(A[][])
|
|
||||||
{ D[i][j] = A[i][j]; }
|
|
||||||
isumc = isumc + C[i][j];
|
|
||||||
isuma = isuma + D[i][j];
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2106 */
|
|
||||||
void rem2106() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int ib, isuma, isumc;
|
|
||||||
char tname[] = "REM2106";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, N, M, NNL);
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][0])
|
|
||||||
for (i = 0; i < N; i++) {
|
|
||||||
#pragma dvm remote_access(A[][0])
|
|
||||||
{ D[i][0] = A[i][0]; }
|
|
||||||
isumc = isumc + C[i][0];
|
|
||||||
isuma = isuma + D[i][0];
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2107 */
|
|
||||||
void rem2107() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int isuma, isumc;
|
|
||||||
char tname[] = "REM2107";
|
|
||||||
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, N, M, NNL);
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[0][])
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
#pragma dvm remote_access(A[0][])
|
|
||||||
{ D[0][j] = A[0][j]; }
|
|
||||||
isumc = isumc + C[0][j];
|
|
||||||
isuma = isuma + D[0][j];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2108 */
|
|
||||||
void rem2108() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM2108";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][M - 1])
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++) {
|
|
||||||
#pragma dvm remote_access(A[][M - 1])
|
|
||||||
{ D[i][M - 1] = A[i][M - 1]; }
|
|
||||||
isumc = isumc + C[i][M - 1];
|
|
||||||
isuma = isuma + D[i][M - 1];
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2109 */
|
|
||||||
void rem2109() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM2109";
|
|
||||||
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[N - 1][])
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
#pragma dvm remote_access(A[N - 1][])
|
|
||||||
{ D[N - 1][j] = A[N - 1][j]; }
|
|
||||||
isumc = isumc + C[N - 1][j];
|
|
||||||
isuma = isuma + D[N - 1][j];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2110 */
|
|
||||||
void rem2110() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM2110";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
#pragma dvm remote_access(A[i][j])
|
|
||||||
{ D[i][j] = A[i][j]; }
|
|
||||||
isumc = isumc + C[i][j];
|
|
||||||
isuma = isuma + D[i][j];
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2111 */
|
|
||||||
void rem2111() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int nloop, ib, isuma, isumc, kk, kk1;
|
|
||||||
char tname[] = "REM2111";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][])
|
|
||||||
|
|
||||||
kk = 2;
|
|
||||||
kk1 = 3;
|
|
||||||
|
|
||||||
for (i = 0; i < N / (kk - kk1); i++)
|
|
||||||
for (j = 0; j < M / (kk - kk1); j++) {
|
|
||||||
#pragma dvm remote_access(A[kk * i + kk1][kk * j + kk1])
|
|
||||||
{ D[i][j] = A[kk * i + kk1][kk * j + kk1]; }
|
|
||||||
isumc = isumc + C[kk * i + kk1][kk * j + kk1];
|
|
||||||
isuma = isuma + D[i][j];
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2112 */
|
|
||||||
void rem2112() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2112";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[0][0])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[0][0])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2113 */
|
|
||||||
void rem2113() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2113";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[N - 1][M - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[N - 1][M - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[N - 1][M - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2114 */
|
|
||||||
void rem2114() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2114";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[0][M - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[0][M - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[0][M - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2115 */
|
|
||||||
void rem2115() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2115";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[N - 1][0])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[N - 1][0];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[N - 1][0])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2116 */
|
|
||||||
void rem2116() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2116";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[i][j];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[i][j])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2117 */
|
|
||||||
void rem2117() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2117";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[][0])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[i][0];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[i][0])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2118 */
|
|
||||||
void rem2118() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2118";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[0][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[0][j];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[0][j])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2119 */
|
|
||||||
void rem2119() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2119";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[][M - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[i][M - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[i][M - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2120 */
|
|
||||||
void rem2120() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2120";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[N - 1][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[N - 1][j];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[N - 1][j])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
void serial2(int AR[N][M], int NN, int NM, int NNL) {
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++) {
|
|
||||||
AR[i][j] = NNL + i + j;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[]) {
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
void ansno(const char name[]) {
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
@@ -1,943 +0,0 @@
|
|||||||
/* TESTING OF THE REMOTE_ACCESS DIRECTIVE AND THE REMOTE_ACCESS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M) OR ELEMENTS OF THIS ARRAY ARE REPLICATED
|
|
||||||
ON ALL PROCESSORS. */
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
#define N 16
|
|
||||||
#define M 8
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void rem2101();
|
|
||||||
static void rem2102();
|
|
||||||
static void rem2103();
|
|
||||||
static void rem2104();
|
|
||||||
static void rem2105();
|
|
||||||
static void rem2106();
|
|
||||||
static void rem2107();
|
|
||||||
static void rem2108();
|
|
||||||
static void rem2109();
|
|
||||||
static void rem2110();
|
|
||||||
static void rem2111();
|
|
||||||
static void rem2112();
|
|
||||||
static void rem2113();
|
|
||||||
static void rem2114();
|
|
||||||
static void rem2115();
|
|
||||||
static void rem2116();
|
|
||||||
static void rem2117();
|
|
||||||
static void rem2118();
|
|
||||||
static void rem2119();
|
|
||||||
static void rem2120();
|
|
||||||
static void serial2(int AR[N][M], int NN, int NM, int NNL);
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
int main(int an, char **as) {
|
|
||||||
printf("===START OF REM21========================\n");
|
|
||||||
rem2101();
|
|
||||||
rem2102();
|
|
||||||
rem2103();
|
|
||||||
rem2104();
|
|
||||||
rem2105();
|
|
||||||
rem2106();
|
|
||||||
rem2107();
|
|
||||||
rem2108();
|
|
||||||
rem2109();
|
|
||||||
rem2110();
|
|
||||||
rem2111();
|
|
||||||
rem2112();
|
|
||||||
rem2113();
|
|
||||||
rem2114();
|
|
||||||
rem2115();
|
|
||||||
rem2116();
|
|
||||||
rem2117();
|
|
||||||
rem2118();
|
|
||||||
rem2119();
|
|
||||||
rem2120();
|
|
||||||
|
|
||||||
printf("=== END OF REM21 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2101 */
|
|
||||||
void rem2101() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2101";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int B[N][M];
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[0][0])
|
|
||||||
#pragma dvm remote_access(A[0][0])
|
|
||||||
{ ib = A[0][0]; }
|
|
||||||
if (ib == C[0][0])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2102 */
|
|
||||||
void rem2102() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2102";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A[N - 1][M - 1])
|
|
||||||
#pragma dvm remote_access(A[N - 1][M - 1])
|
|
||||||
{ ib = A[N - 1][M - 1]; }
|
|
||||||
if (ib == C[N - 1][M - 1])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2103 */
|
|
||||||
void rem2103() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2103";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(A[0][M - 1])
|
|
||||||
#pragma dvm remote_access(A[0][M - 1])
|
|
||||||
{ ib = A[0][M - 1]; }
|
|
||||||
if (ib == C[0][M - 1])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2104 */
|
|
||||||
void rem2104() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2104";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[N - 1][0])
|
|
||||||
#pragma dvm remote_access(A[N - 1][0])
|
|
||||||
{ ib = A[N - 1][0]; }
|
|
||||||
if (ib == C[N - 1][0])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2105 */
|
|
||||||
void rem2105() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int ib, isuma, isumc;
|
|
||||||
char tname[] = "REM2105";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, N, M, NNL);
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
#pragma dvm remote_access(A[][])
|
|
||||||
{ D[i][j] = A[i][j]; }
|
|
||||||
isumc = isumc + C[i][j];
|
|
||||||
isuma = isuma + D[i][j];
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2106 */
|
|
||||||
void rem2106() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int ib, isuma, isumc;
|
|
||||||
char tname[] = "REM2106";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, N, M, NNL);
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][0])
|
|
||||||
for (i = 0; i < N; i++) {
|
|
||||||
#pragma dvm remote_access(A[][0])
|
|
||||||
{ D[i][0] = A[i][0]; }
|
|
||||||
isumc = isumc + C[i][0];
|
|
||||||
isuma = isuma + D[i][0];
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2107 */
|
|
||||||
void rem2107() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int isuma, isumc;
|
|
||||||
char tname[] = "REM2107";
|
|
||||||
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with A[i][j])
|
|
||||||
int B[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, N, M, NNL);
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[0][])
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
#pragma dvm remote_access(A[0][])
|
|
||||||
{ D[0][j] = A[0][j]; }
|
|
||||||
isumc = isumc + C[0][j];
|
|
||||||
isuma = isuma + D[0][j];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2108 */
|
|
||||||
void rem2108() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM2108";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][M - 1])
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++) {
|
|
||||||
#pragma dvm remote_access(A[][M - 1])
|
|
||||||
{ D[i][M - 1] = A[i][M - 1]; }
|
|
||||||
isumc = isumc + C[i][M - 1];
|
|
||||||
isuma = isuma + D[i][M - 1];
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2109 */
|
|
||||||
void rem2109() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM2109";
|
|
||||||
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[N - 1][])
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
#pragma dvm remote_access(A[N - 1][])
|
|
||||||
{ D[N - 1][j] = A[N - 1][j]; }
|
|
||||||
isumc = isumc + C[N - 1][j];
|
|
||||||
isuma = isuma + D[N - 1][j];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2110 */
|
|
||||||
void rem2110() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM2110";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
#pragma dvm remote_access(A[i][j])
|
|
||||||
{ D[i][j] = A[i][j]; }
|
|
||||||
isumc = isumc + C[i][j];
|
|
||||||
isuma = isuma + D[i][j];
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2111 */
|
|
||||||
void rem2111() {
|
|
||||||
|
|
||||||
int C[N][M], D[N][M];
|
|
||||||
int nloop, ib, isuma, isumc, kk, kk1;
|
|
||||||
char tname[] = "REM2111";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][])
|
|
||||||
|
|
||||||
kk = 2;
|
|
||||||
kk1 = 3;
|
|
||||||
|
|
||||||
for (i = 0; i < N / (kk - kk1); i++)
|
|
||||||
for (j = 0; j < M / (kk - kk1); j++) {
|
|
||||||
#pragma dvm remote_access(A[kk * i + kk1][kk * j + kk1])
|
|
||||||
{ D[i][j] = A[kk * i + kk1][kk * j + kk1]; }
|
|
||||||
isumc = isumc + C[kk * i + kk1][kk * j + kk1];
|
|
||||||
isuma = isuma + D[i][j];
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2112 */
|
|
||||||
void rem2112() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2112";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[0][0])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[0][0])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2113 */
|
|
||||||
void rem2113() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2113";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[N - 1][M - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[N - 1][M - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[N - 1][M - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2114 */
|
|
||||||
void rem2114() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2114";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[0][M - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[0][M - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[0][M - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2115 */
|
|
||||||
void rem2115() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2115";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[N - 1][0])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[N - 1][0];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[N - 1][0])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2116 */
|
|
||||||
void rem2116() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2116";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[i][j];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[i][j])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM2117 */
|
|
||||||
void rem2117() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2117";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[][0])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[i][0];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[i][0])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2118 */
|
|
||||||
void rem2118() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2118";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[0][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[0][j];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[0][j])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2119 */
|
|
||||||
void rem2119() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2119";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[][M - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[i][M - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[i][M - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM2120 */
|
|
||||||
void rem2120() {
|
|
||||||
|
|
||||||
int C[N][M];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM2120";
|
|
||||||
int i, j, NN, NM, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*]
|
|
||||||
int B[N][M];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j] with B[i][j])
|
|
||||||
int A[N][M];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NNL = NL;
|
|
||||||
serial2(C, NN, NM, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on A[i][j])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
A[i][j] = NL + i + j;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) remote_access(A[N - 1][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
B[i][j] = A[N - 1][j];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j] on B[i][j]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
if (B[i][j] != C[N - 1][j])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
void serial2(int AR[N][M], int NN, int NM, int NNL) {
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++) {
|
|
||||||
AR[i][j] = NNL + i + j;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[]) {
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
void ansno(const char name[]) {
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
@@ -1,702 +0,0 @@
|
|||||||
/* TESTING OF THE REMOTE_ACCESS DIRECTIVE AND THE REMOTE_ACCESS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M,K) OR ELEMENTS OF THIS ARRAY ARE REPLICATED
|
|
||||||
ON ALL PROCESSORS. */
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
#define N 16
|
|
||||||
#define M 8
|
|
||||||
#define K 8
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void rem3101();
|
|
||||||
static void rem3102();
|
|
||||||
static void rem3103();
|
|
||||||
static void rem3104();
|
|
||||||
static void rem3105();
|
|
||||||
static void rem3106();
|
|
||||||
static void rem3107();
|
|
||||||
static void rem3108();
|
|
||||||
static void rem3109();
|
|
||||||
static void rem3110();
|
|
||||||
static void rem3111();
|
|
||||||
static void rem3112();
|
|
||||||
static void rem3113();
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
static void serial3(int AR[N][M][K], int NN, int NM, int NK, int NNL);
|
|
||||||
|
|
||||||
int main(int an, char **as) {
|
|
||||||
printf("===START OF REM31========================\n");
|
|
||||||
rem3101();
|
|
||||||
rem3102();
|
|
||||||
rem3103();
|
|
||||||
rem3104();
|
|
||||||
rem3105();
|
|
||||||
rem3106();
|
|
||||||
rem3107();
|
|
||||||
rem3108();
|
|
||||||
rem3109();
|
|
||||||
rem3110();
|
|
||||||
rem3111();
|
|
||||||
rem3112();
|
|
||||||
rem3113();
|
|
||||||
|
|
||||||
printf("=== END OF REM31 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3101 */
|
|
||||||
void rem3101() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3101";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[0][0][0])
|
|
||||||
#pragma dvm remote_access(A[0][0][0])
|
|
||||||
{ ib = A[0][0][0]; }
|
|
||||||
if (ib == C[0][0][0])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3102 */
|
|
||||||
void rem3102() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3102";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[N - 1][M - 1][K - 1])
|
|
||||||
#pragma dvm remote_access(A[N - 1][M - 1][K - 1])
|
|
||||||
{ ib = A[N - 1][M - 1][K - 1]; }
|
|
||||||
if (ib == C[N - 1][M - 1][K - 1])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3103 */
|
|
||||||
void rem3103() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM3103";
|
|
||||||
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][])
|
|
||||||
#pragma dvm remote_access(A[][][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
isumc = isumc + C[i][j][ii];
|
|
||||||
isuma = isuma + A[i][j][ii];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3104 */
|
|
||||||
void rem3104() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM3104";
|
|
||||||
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[0][][])
|
|
||||||
#pragma dvm remote_access(A[0][][])
|
|
||||||
{
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
isumc = isumc + C[0][j][ii];
|
|
||||||
isuma = isuma + A[0][j][ii];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM3105 */
|
|
||||||
void rem3105() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM3105";
|
|
||||||
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][M - 1][])
|
|
||||||
#pragma dvm remote_access(A[][M - 1][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
isumc = isumc + C[i][M - 1][ii];
|
|
||||||
isuma = isuma + A[i][M - 1][ii];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3106 */
|
|
||||||
void rem3106() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM3106";
|
|
||||||
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][K - 1])
|
|
||||||
#pragma dvm remote_access(A[][][K - 1])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
isumc = isumc + C[i][j][K - 1];
|
|
||||||
isuma = isuma + A[i][j][K - 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM3107 */
|
|
||||||
void rem3107() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
int ki, ki1, kj, kj1, kii, kii1;
|
|
||||||
char tname[] = "REM3107";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
ki = 2;
|
|
||||||
ki1 = 3;
|
|
||||||
kj = 2;
|
|
||||||
kj1 = 3;
|
|
||||||
kii = 2;
|
|
||||||
kii1 = 3;
|
|
||||||
for (i = 0; i < N / ki - ki1; i++)
|
|
||||||
for (j = 0; j < M / kj - kj1; j++)
|
|
||||||
for (ii = 0; ii < K / kii - kii1; ii++) {
|
|
||||||
#pragma dvm remote_access(A[ki * i + ki1][kj * j + kj1][kii * ii + kii1])
|
|
||||||
{ isuma = isuma + A[ki * i + ki1][kj * j + kj1][kii * ii + kii1]; }
|
|
||||||
isumc = isumc + C[ki * i + ki1][kj * j + kj1][kii * ii + kii1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM3108 */
|
|
||||||
void rem3108() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3108";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) remote_access(A[0][0][0])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
|
|
||||||
B[i][j][ii] = A[0][0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[0][0][0])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3109 */
|
|
||||||
void rem3109() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3109";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) \
|
|
||||||
remote_access(A[N - 1][M - 1][K - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
|
|
||||||
B[i][j][ii] = A[N - 1][M - 1][K - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[N - 1][M - 1][K - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM3110 */
|
|
||||||
void rem3110() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3110";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) remote_access(A[][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
B[i][j][ii] = A[i][j][ii];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[i][j][ii])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3111 */
|
|
||||||
void rem3111() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3111";
|
|
||||||
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) remote_access(A[0][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
|
|
||||||
B[i][j][ii] = A[0][j][ii];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[0][j][ii])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3112 */
|
|
||||||
void rem3112() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3112";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) remote_access(A[][M - 1][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
B[i][j][ii] = A[i][M - 1][ii];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[i][M - 1][ii])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3113 */
|
|
||||||
void rem3113() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3113";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) remote_access(A[][][K - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
|
|
||||||
B[i][j][ii] = A[i][j][K - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[i][j][K - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
void serial3(int AR[N][M][K], int NN, int NM, int NK, int NNL) {
|
|
||||||
int i, j, ii;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
for (ii = 0; ii < NK; ii++)
|
|
||||||
|
|
||||||
{
|
|
||||||
AR[i][j][ii] = NNL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[]) {
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
void ansno(const char name[]) {
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
@@ -1,705 +0,0 @@
|
|||||||
/* TESTING OF THE REMOTE_ACCESS DIRECTIVE AND THE REMOTE_ACCESS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M,K) OR ELEMENTS OF THIS ARRAY ARE REPLICATED
|
|
||||||
ON ALL PROCESSORS. */
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
#define N 16
|
|
||||||
#define M 8
|
|
||||||
#define K 8
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void rem3101();
|
|
||||||
static void rem3102();
|
|
||||||
static void rem3103();
|
|
||||||
static void rem3104();
|
|
||||||
static void rem3105();
|
|
||||||
static void rem3106();
|
|
||||||
static void rem3107();
|
|
||||||
static void rem3108();
|
|
||||||
static void rem3109();
|
|
||||||
static void rem3110();
|
|
||||||
static void rem3111();
|
|
||||||
static void rem3112();
|
|
||||||
static void rem3113();
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
static void serial3(int AR[N][M][K], int NN, int NM, int NK, int NNL);
|
|
||||||
|
|
||||||
int main(int an, char **as) {
|
|
||||||
printf("===START OF REM31========================\n");
|
|
||||||
rem3101();
|
|
||||||
rem3102();
|
|
||||||
rem3103();
|
|
||||||
rem3104();
|
|
||||||
rem3105();
|
|
||||||
rem3106();
|
|
||||||
rem3107();
|
|
||||||
rem3108();
|
|
||||||
rem3109();
|
|
||||||
rem3110();
|
|
||||||
rem3111();
|
|
||||||
rem3112();
|
|
||||||
rem3113();
|
|
||||||
|
|
||||||
printf("=== END OF REM31 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3101 */
|
|
||||||
void rem3101() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3101";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[1][1][1])
|
|
||||||
#pragma dvm remote_access(A[1][1][1])
|
|
||||||
{ ib = A[1][1][1]; }
|
|
||||||
if (ib == C[1][1][1])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3102 */
|
|
||||||
void rem3102() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3102";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[N - 1][M - 1][K - 1])
|
|
||||||
#pragma dvm remote_access(A[N - 1][M - 1][K - 1])
|
|
||||||
{ ib = A[N - 1][M - 1][K - 1]; }
|
|
||||||
if (ib == C[N - 1][M - 1][K - 1])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3103 */
|
|
||||||
void rem3103() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM3103";
|
|
||||||
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][*]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][])
|
|
||||||
#pragma dvm remote_access(A[][][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
isumc = isumc + C[i][j][ii];
|
|
||||||
isuma = isuma + A[i][j][ii];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3104 */
|
|
||||||
void rem3104() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM3104";
|
|
||||||
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[1][][])
|
|
||||||
#pragma dvm remote_access(A[1][][])
|
|
||||||
{
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
isumc = isumc + C[1][j][ii];
|
|
||||||
isuma = isuma + A[1][j][ii];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM3105 */
|
|
||||||
void rem3105() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM3105";
|
|
||||||
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][M - 1][])
|
|
||||||
#pragma dvm remote_access(A[][M - 1][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
isumc = isumc + C[i][M - 1][ii];
|
|
||||||
isuma = isuma + A[i][M - 1][ii];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3106 */
|
|
||||||
void rem3106() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM3106";
|
|
||||||
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][*]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][K - 1])
|
|
||||||
#pragma dvm remote_access(A[][][K - 1])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++) {
|
|
||||||
isumc = isumc + C[i][j][K - 1];
|
|
||||||
isuma = isuma + A[i][j][K - 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM3107 */
|
|
||||||
void rem3107() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
int ki, ki1, kj, kj1, kii, kii1;
|
|
||||||
char tname[] = "REM3107";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isuma = 0;
|
|
||||||
isumc = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A)
|
|
||||||
ki = 2;
|
|
||||||
ki1 = 3;
|
|
||||||
kj = 2;
|
|
||||||
kj1 = 3;
|
|
||||||
kii = 2;
|
|
||||||
kii1 = 3;
|
|
||||||
for (i = 0; i < N / ki - ki1; i++)
|
|
||||||
for (j = 0; j < M / kj - kj1; j++)
|
|
||||||
for (ii = 0; ii < K / kii - kii1; ii++) {
|
|
||||||
#pragma dvm remote_access(A[ki * i + ki1][kj * j + kj1][kii * ii + kii1])
|
|
||||||
{ isuma = isuma + A[ki * i + ki1][kj * j + kj1][kii * ii + kii1]; }
|
|
||||||
isumc = isumc + C[ki * i + ki1][kj * j + kj1][kii * ii + kii1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM3108 */
|
|
||||||
void rem3108() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3108";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) remote_access(A[1][1][1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
|
|
||||||
B[i][j][ii] = A[1][1][1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[1][1][1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3109 */
|
|
||||||
void rem3109() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3109";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][*]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) \
|
|
||||||
remote_access(A[N - 1][M - 1][K - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
|
|
||||||
B[i][j][ii] = A[N - 1][M - 1][K - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[N - 1][M - 1][K - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM3110 */
|
|
||||||
void rem3110() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3110";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) remote_access(A[][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
|
|
||||||
B[i][j][ii] = A[i][j][ii];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[i][j][ii])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3111 */
|
|
||||||
void rem3111() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3111";
|
|
||||||
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) remote_access(A[1][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
|
|
||||||
B[i][j][ii] = A[1][j][ii];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[1][j][ii])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3112 */
|
|
||||||
void rem3112() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3112";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][*]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) remote_access(A[][M - 1][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
|
|
||||||
B[i][j][ii] = A[i][M - 1][ii];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[i][M - 1][ii])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM3113 */
|
|
||||||
void rem3113() {
|
|
||||||
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM3113";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) remote_access(A[][][K - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
|
|
||||||
B[i][j][ii] = A[i][j][K - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
if (B[i][j][ii] != C[i][j][K - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
void serial3(int AR[N][M][K], int NN, int NM, int NK, int NNL) {
|
|
||||||
int i, j, ii;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
for (ii = 0; ii < NK; ii++)
|
|
||||||
|
|
||||||
{
|
|
||||||
AR[i][j][ii] = NNL + i + j + ii;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[]) {
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
void ansno(const char name[]) {
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
@@ -1,811 +0,0 @@
|
|||||||
/* TESTING OF THE REMOTE_ACCESS DIRECTIVE AND THE REMOTE_ACCESS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M,K,L) OR ELEMENTS OF THIS ARRAY ARE REPLICATED
|
|
||||||
ON ALL PROCESSORS. */
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void rem4101();
|
|
||||||
static void rem4102();
|
|
||||||
static void rem4103();
|
|
||||||
static void rem4104();
|
|
||||||
static void rem4105();
|
|
||||||
static void rem4106();
|
|
||||||
static void rem4107();
|
|
||||||
static void rem4108();
|
|
||||||
static void rem4109();
|
|
||||||
static void rem4110();
|
|
||||||
static void rem4111();
|
|
||||||
static void rem4112();
|
|
||||||
static void rem4113();
|
|
||||||
static void rem4114();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
static void serial4(int AR[N][M][K][L], int NN, int NM, int NK, int NLL,
|
|
||||||
int NNL);
|
|
||||||
|
|
||||||
int main(int an, char **as) {
|
|
||||||
printf("===START OF REM41========================\n");
|
|
||||||
rem4101();
|
|
||||||
rem4102();
|
|
||||||
rem4103();
|
|
||||||
rem4104();
|
|
||||||
rem4105();
|
|
||||||
rem4106();
|
|
||||||
rem4107();
|
|
||||||
rem4108();
|
|
||||||
rem4109();
|
|
||||||
rem4110();
|
|
||||||
rem4111();
|
|
||||||
rem4112();
|
|
||||||
rem4113();
|
|
||||||
rem4114();
|
|
||||||
|
|
||||||
printf("=== END OF REM41 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4101 */
|
|
||||||
void rem4101() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4101";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[1][1][1][1])
|
|
||||||
#pragma dvm remote_access(A[1][1][1][1])
|
|
||||||
{ ib = A[1][1][1][1]; }
|
|
||||||
if (ib == C[1][1][1][1])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4102 */
|
|
||||||
void rem4102() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4102";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
#pragma dvm remote_access(A[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
{ ib = A[N - 1][M - 1][K - 1][L - 1]; }
|
|
||||||
|
|
||||||
if (ib == C[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM4103 */
|
|
||||||
void rem4103() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4103";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][][])
|
|
||||||
#pragma dvm remote_access(A[][][][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < K; jj++) {
|
|
||||||
isumc = isumc + C[i][j][ii][jj];
|
|
||||||
isuma = isuma + A[i][j][ii][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4104 */
|
|
||||||
void rem4104() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4104";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[1][][][])
|
|
||||||
#pragma dvm remote_access(A[1][][][])
|
|
||||||
{
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < K; jj++) {
|
|
||||||
isumc = isumc + C[1][j][ii][jj];
|
|
||||||
isuma = isuma + A[1][j][ii][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4105 */
|
|
||||||
void rem4105() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4105";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][M - 1][][])
|
|
||||||
#pragma dvm remote_access(A[][M - 1][][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < K; jj++) {
|
|
||||||
isumc = isumc + C[i][M - 1][ii][jj];
|
|
||||||
isuma = isuma + A[i][M - 1][ii][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4106 */
|
|
||||||
void rem4106() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4106";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][K - 1][])
|
|
||||||
|
|
||||||
#pragma dvm remote_access(A[][][K - 1][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
isumc = isumc + C[i][j][K - 1][jj];
|
|
||||||
isuma = isuma + A[i][j][K - 1][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4107 */
|
|
||||||
void rem4107() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4107";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][][L - 1])
|
|
||||||
#pragma dvm remote_access(A[][][][L - 1])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
isumc = isumc + C[i][j][ii][L - 1];
|
|
||||||
isuma = isuma + A[i][j][ii][L - 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4108 */
|
|
||||||
void rem4108() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4108";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[1][1][1][1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[1][1][1][1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[1][1][1][1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4109 */
|
|
||||||
void rem4109() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4109";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[N - 1][M - 1][K - 1][L - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4110 */
|
|
||||||
void rem4110() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4110";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) remote_access(A[][][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][j][ii][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][j][ii][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4111 */
|
|
||||||
void rem4111() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4111";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[1][][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[1][j][ii][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[1][j][ii][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM4112 */
|
|
||||||
void rem4112() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4112";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[][M - 1][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][M - 1][ii][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][M - 1][ii][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4113 */
|
|
||||||
void rem4113() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4113";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[][][K - 1][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][j][K - 1][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][j][K - 1][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4114 */
|
|
||||||
void rem4114() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4114";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[][][][L - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][j][ii][L - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][j][ii][L - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
void serial4(int AR[N][M][K][L], int NN, int NM, int NK, int NLL, int NNL) {
|
|
||||||
int i, j, ii, jj;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
for (ii = 0; ii < NK; ii++)
|
|
||||||
for (jj = 0; jj < NLL; jj++)
|
|
||||||
|
|
||||||
{
|
|
||||||
AR[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void ansyes(const char name[]) {
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
void ansno(const char name[]) {
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
@@ -1,811 +0,0 @@
|
|||||||
/* TESTING OF THE REMOTE_ACCESS DIRECTIVE AND THE REMOTE_ACCESS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M,K,L) OR ELEMENTS OF THIS ARRAY ARE REPLICATED
|
|
||||||
ON ALL PROCESSORS. */
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void rem4101();
|
|
||||||
static void rem4102();
|
|
||||||
static void rem4103();
|
|
||||||
static void rem4104();
|
|
||||||
static void rem4105();
|
|
||||||
static void rem4106();
|
|
||||||
static void rem4107();
|
|
||||||
static void rem4108();
|
|
||||||
static void rem4109();
|
|
||||||
static void rem4110();
|
|
||||||
static void rem4111();
|
|
||||||
static void rem4112();
|
|
||||||
static void rem4113();
|
|
||||||
static void rem4114();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
static void serial4(int AR[N][M][K][L], int NN, int NM, int NK, int NLL,
|
|
||||||
int NNL);
|
|
||||||
|
|
||||||
int main(int an, char **as) {
|
|
||||||
printf("===START OF REM41========================\n");
|
|
||||||
rem4101();
|
|
||||||
rem4102();
|
|
||||||
rem4103();
|
|
||||||
rem4104();
|
|
||||||
rem4105();
|
|
||||||
rem4106();
|
|
||||||
rem4107();
|
|
||||||
rem4108();
|
|
||||||
rem4109();
|
|
||||||
rem4110();
|
|
||||||
rem4111();
|
|
||||||
rem4112();
|
|
||||||
rem4113();
|
|
||||||
rem4114();
|
|
||||||
|
|
||||||
printf("=== END OF REM41 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4101 */
|
|
||||||
void rem4101() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4101";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[0][0][0][0])
|
|
||||||
#pragma dvm remote_access(A[0][0][0][0])
|
|
||||||
{ ib = A[0][0][0][0]; }
|
|
||||||
if (ib == C[0][0][0][0])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4102 */
|
|
||||||
void rem4102() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4102";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
#pragma dvm remote_access(A[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
{ ib = A[N - 1][M - 1][K - 1][L - 1]; }
|
|
||||||
|
|
||||||
if (ib == C[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM4103 */
|
|
||||||
void rem4103() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4103";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][][])
|
|
||||||
#pragma dvm remote_access(A[][][][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < K; jj++) {
|
|
||||||
isumc = isumc + C[i][j][ii][jj];
|
|
||||||
isuma = isuma + A[i][j][ii][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4104 */
|
|
||||||
void rem4104() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4104";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[0][0][0][0])
|
|
||||||
#pragma dvm remote_access(A[0][][][])
|
|
||||||
{
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < K; jj++) {
|
|
||||||
isumc = isumc + C[0][j][ii][jj];
|
|
||||||
isuma = isuma + A[0][j][ii][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4105 */
|
|
||||||
void rem4105() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4105";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][M - 1][][])
|
|
||||||
#pragma dvm remote_access(A[][M - 1][][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < K; jj++) {
|
|
||||||
isumc = isumc + C[i][M - 1][ii][jj];
|
|
||||||
isuma = isuma + A[i][M - 1][ii][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4106 */
|
|
||||||
void rem4106() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4106";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][K - 1][])
|
|
||||||
|
|
||||||
#pragma dvm remote_access(A[][][K - 1][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
isumc = isumc + C[i][j][K - 1][jj];
|
|
||||||
isuma = isuma + A[i][j][K - 1][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4107 */
|
|
||||||
void rem4107() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4107";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][][L - 1])
|
|
||||||
#pragma dvm remote_access(A[][][][L - 1])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
isumc = isumc + C[i][j][ii][L - 1];
|
|
||||||
isuma = isuma + A[i][j][ii][L - 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4108 */
|
|
||||||
void rem4108() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4108";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[0][0][0][0])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[0][0][0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[0][0][0][0])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4109 */
|
|
||||||
void rem4109() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4109";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[N - 1][M - 1][K - 1][L - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4110 */
|
|
||||||
void rem4110() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4110";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) remote_access(A[][][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][j][ii][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][j][ii][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4111 */
|
|
||||||
void rem4111() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4111";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[0][][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[0][j][ii][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[0][j][ii][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM4112 */
|
|
||||||
void rem4112() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4112";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[][M - 1][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][M - 1][ii][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][M - 1][ii][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4113 */
|
|
||||||
void rem4113() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4113";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[][][K - 1][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][j][K - 1][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][j][K - 1][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4114 */
|
|
||||||
void rem4114() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4114";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][*][*][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[][][][L - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][j][ii][L - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][j][ii][L - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
void serial4(int AR[N][M][K][L], int NN, int NM, int NK, int NLL, int NNL) {
|
|
||||||
int i, j, ii, jj;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
for (ii = 0; ii < NK; ii++)
|
|
||||||
for (jj = 0; jj < NLL; jj++)
|
|
||||||
|
|
||||||
{
|
|
||||||
AR[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void ansyes(const char name[]) {
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
void ansno(const char name[]) {
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
@@ -1,811 +0,0 @@
|
|||||||
/* TESTING OF THE REMOTE_ACCESS DIRECTIVE AND THE REMOTE_ACCESS CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M,K,L) OR ELEMENTS OF THIS ARRAY ARE REPLICATED
|
|
||||||
ON ALL PROCESSORS. */
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#define Min(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void rem4101();
|
|
||||||
static void rem4102();
|
|
||||||
static void rem4103();
|
|
||||||
static void rem4104();
|
|
||||||
static void rem4105();
|
|
||||||
static void rem4106();
|
|
||||||
static void rem4107();
|
|
||||||
static void rem4108();
|
|
||||||
static void rem4109();
|
|
||||||
static void rem4110();
|
|
||||||
static void rem4111();
|
|
||||||
static void rem4112();
|
|
||||||
static void rem4113();
|
|
||||||
static void rem4114();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
static void serial4(int AR[N][M][K][L], int NN, int NM, int NK, int NLL,
|
|
||||||
int NNL);
|
|
||||||
|
|
||||||
int main(int an, char **as) {
|
|
||||||
printf("===START OF REM41========================\n");
|
|
||||||
rem4101();
|
|
||||||
rem4102();
|
|
||||||
rem4103();
|
|
||||||
rem4104();
|
|
||||||
rem4105();
|
|
||||||
rem4106();
|
|
||||||
rem4107();
|
|
||||||
rem4108();
|
|
||||||
rem4109();
|
|
||||||
rem4110();
|
|
||||||
rem4111();
|
|
||||||
rem4112();
|
|
||||||
rem4113();
|
|
||||||
rem4114();
|
|
||||||
|
|
||||||
printf("=== END OF REM41 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4101 */
|
|
||||||
void rem4101() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4101";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[0][0][0][0])
|
|
||||||
#pragma dvm remote_access(A[0][0][0][0])
|
|
||||||
{ ib = A[0][0][0][0]; }
|
|
||||||
if (ib == C[0][0][0][0])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4102 */
|
|
||||||
void rem4102() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4102";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][*][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
#pragma dvm remote_access(A[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
{ ib = A[N - 1][M - 1][K - 1][L - 1]; }
|
|
||||||
|
|
||||||
if (ib == C[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM4103 */
|
|
||||||
void rem4103() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4103";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][][])
|
|
||||||
#pragma dvm remote_access(A[][][][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < K; jj++) {
|
|
||||||
isumc = isumc + C[i][j][ii][jj];
|
|
||||||
isuma = isuma + A[i][j][ii][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4104 */
|
|
||||||
void rem4104() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4104";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[0][0][0][0])
|
|
||||||
#pragma dvm remote_access(A[0][][][])
|
|
||||||
{
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < K; jj++) {
|
|
||||||
isumc = isumc + C[0][j][ii][jj];
|
|
||||||
isuma = isuma + A[0][j][ii][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4105 */
|
|
||||||
void rem4105() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4105";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][M - 1][][])
|
|
||||||
#pragma dvm remote_access(A[][M - 1][][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < K; jj++) {
|
|
||||||
isumc = isumc + C[i][M - 1][ii][jj];
|
|
||||||
isuma = isuma + A[i][M - 1][ii][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4106 */
|
|
||||||
void rem4106() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4106";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][*][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][K - 1][])
|
|
||||||
|
|
||||||
#pragma dvm remote_access(A[][][K - 1][])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
isumc = isumc + C[i][j][K - 1][jj];
|
|
||||||
isuma = isuma + A[i][j][K - 1][jj];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4107 */
|
|
||||||
void rem4107() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib, isuma, isumc;
|
|
||||||
char tname[] = "REM4107";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
isumc = 0;
|
|
||||||
isuma = 0;
|
|
||||||
|
|
||||||
#pragma dvm region out(A)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(A[][][][L - 1])
|
|
||||||
#pragma dvm remote_access(A[][][][L - 1])
|
|
||||||
{
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
isumc = isumc + C[i][j][ii][L - 1];
|
|
||||||
isuma = isuma + A[i][j][ii][L - 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isuma == isumc)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4108 */
|
|
||||||
void rem4108() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4108";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[0][0][0][0])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[0][0][0][0];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[0][0][0][0])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4109 */
|
|
||||||
void rem4109() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4109";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[N - 1][M - 1][K - 1][L - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[N - 1][M - 1][K - 1][L - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4110 */
|
|
||||||
void rem4110() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4110";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][*][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) remote_access(A[][][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][j][ii][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][j][ii][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4111 */
|
|
||||||
void rem4111() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4111";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][*][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[0][][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[0][j][ii][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[0][j][ii][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------REM4112 */
|
|
||||||
void rem4112() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4112";
|
|
||||||
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[*][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[][M - 1][][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][M - 1][ii][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][M - 1][ii][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4113 */
|
|
||||||
void rem4113() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4113";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][*]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[][][K - 1][])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][j][K - 1][jj];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][j][K - 1][jj])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------REM4114 */
|
|
||||||
void rem4114() {
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloop, ib;
|
|
||||||
char tname[] = "REM4114";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][*][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NLL = L;
|
|
||||||
NNL = NL;
|
|
||||||
serial4(C, NN, NM, NK, NLL, NNL);
|
|
||||||
nloop = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A, B)
|
|
||||||
{
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) \
|
|
||||||
remote_access(A[][][][L - 1])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
|
|
||||||
B[i][j][ii][jj] = A[i][j][ii][L - 1];
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloop))
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++) {
|
|
||||||
if (B[i][j][ii][jj] != C[i][j][ii][L - 1])
|
|
||||||
nloop = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(nloop)
|
|
||||||
if (nloop == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
void serial4(int AR[N][M][K][L], int NN, int NM, int NK, int NLL, int NNL) {
|
|
||||||
int i, j, ii, jj;
|
|
||||||
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
for (ii = 0; ii < NK; ii++)
|
|
||||||
for (jj = 0; jj < NLL; jj++)
|
|
||||||
|
|
||||||
{
|
|
||||||
AR[i][j][ii][jj] = NNL + i + j + ii + jj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void ansyes(const char name[]) {
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
void ansno(const char name[]) {
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,706 +0,0 @@
|
|||||||
/* TESTING OF THE SHADOW DIRECTIVE AND THE SHADOW_RENEW CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M,K) IS TO HAVE DIFFERENT SHADOW WIDTH
|
|
||||||
ON BOTH SIDES */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define N 60
|
|
||||||
#define M 60
|
|
||||||
#define K 60
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void sh3101();
|
|
||||||
static void sh3102();
|
|
||||||
static void sh3103();
|
|
||||||
static void sh3104();
|
|
||||||
static void sh3105();
|
|
||||||
static void sh3106();
|
|
||||||
static void sh3107();
|
|
||||||
static void sh3108();
|
|
||||||
static void sh3109();
|
|
||||||
static void sh3110();
|
|
||||||
static void sh3111();
|
|
||||||
static void serial3(int AR[N][M][K], int NN, int NM, int NK, int NNL);
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
printf("===START OF SH31========================\n");
|
|
||||||
sh3101();
|
|
||||||
sh3102();
|
|
||||||
sh3103();
|
|
||||||
sh3104();
|
|
||||||
sh3105();
|
|
||||||
sh3106();
|
|
||||||
sh3107();
|
|
||||||
sh3108();
|
|
||||||
sh3109();
|
|
||||||
sh3110();
|
|
||||||
sh3111();
|
|
||||||
|
|
||||||
printf("=== END OF SH31 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH3101 */
|
|
||||||
void sh3101()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
char tname[] = "SH3101";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii])
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
B[i][j][ii] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) shadow_renew(A (corner))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1;j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
B[i][j][ii] = A[i+1][j][ii]+A[i][j+1][ii]+A[i][j][ii+1]+A[i-1][j][ii]+
|
|
||||||
A[i][j-1][ii]+A[i][j][ii-1]+A[i-1][j-1][ii-1]+
|
|
||||||
A[i+1][j+1][ii+1]+A[i-1][j+1][ii]+A[i+1][j-1][ii]+
|
|
||||||
A[i-1][j+1][ii-1]+A[i-1][j+1][ii+1]+A[i+1][j-1][ii-1]+
|
|
||||||
A[i+1][j-1][ii+1];
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1;j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
if (B[i][j][ii]!=C[i+1][j][ii]+C[i][j+1][ii]+C[i][j][ii+1]+
|
|
||||||
C[i-1][j][ii]+C[i][j-1][ii]+C[i][j][ii-1]+
|
|
||||||
C[i-1][j-1][ii-1]+C[i+1][j+1][ii+1]+C[i-1][j+1][ii]+
|
|
||||||
C[i+1][j-1][ii]+C[i-1][j+1][ii-1]+C[i-1][j+1][ii+1]+
|
|
||||||
C[i+1][j-1][ii-1]+C[i+1][j-1][ii+1])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH3102 */
|
|
||||||
void sh3102()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
char tname[] = "SH3102";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii]), shadow[2:2][2:2][2:2]
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
B[i][j][ii] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) shadow_renew(A[1:2][2:2][1:2](corner))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
B[i][j][ii] = A[i-1][j-2][ii+2]+A[i-1][j+2][ii-1]+A[i-1][j+2][ii+2]+
|
|
||||||
A[i+2][j+2][ii+2]+A[i+2][j+2][ii-1]+A[i+2][j-2][ii+2]+
|
|
||||||
A[i+2][j-2][ii-1]+A[i-1][j-2][ii-1];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
if (B[i][j][ii]!= C[i-1][j-2][ii+2]+C[i-1][j+2][ii-1]+C[i-1][j+2][ii+2]+
|
|
||||||
C[i+2][j+2][ii+2]+C[i+2][j+2][ii-1]+C[i+2][j-2][ii+2]+
|
|
||||||
C[i+2][j-2][ii-1]+C[i-1][j-2][ii-1])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH3103 */
|
|
||||||
void sh3103()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
char tname[] = "SH3103";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii]), shadow[2:2][2:2][2:2]
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
B[i][j][ii] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) shadow_renew(A[0:2][2:2][0:2] (corner))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
B[i][j][ii] = A[i+2][j+2][ii+2]+A[i][j-2][ii]+
|
|
||||||
A[i+2][j-2][ii]+A[i][j+2][ii]+ A[i][j+2][ii+2]+
|
|
||||||
A[i+2][j-2][ii+2]+A[i+2][j+2][ii];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
if (B[i][j][ii]!= C[i+2][j+2][ii+2]+C[i][j-2][ii]+
|
|
||||||
C[i+2][j-2][ii]+C[i][j+2][ii]+ C[i][j+2][ii+2]+
|
|
||||||
C[i+2][j-2][ii+2]+C[i+2][j+2][ii] )
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH3104 */
|
|
||||||
void sh3104()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
char tname[] = "SH3104";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii]), shadow[2:2][2:2][2:2]
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
B[i][j][ii] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) shadow_renew(A[2:2][2:0][2:0] (corner))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
B[i][j][ii] = A[i+2][j][ii]+A[i-2][j-2][ii-2]
|
|
||||||
+ A[i+2][j-2][ii-2]+A[i-2][j][ii-2]+ A[i-2][j-2][ii]+
|
|
||||||
A[i-2][j][ii]+A[i+2][j-2][ii]+A[i+2][j][ii-2];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
if (B[i][j][ii]!=C[i+2][j][ii]+C[i-2][j-2][ii-2]
|
|
||||||
+ C[i+2][j-2][ii-2]+C[i-2][j][ii-2]+ C[i-2][j-2][ii]+
|
|
||||||
C[i-2][j][ii]+C[i+2][j-2][ii]+C[i+2][j][ii-2])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
/* printf ("%i,%i,%i\n",nloopi,nloopj,nloopii);*/
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH3105 */
|
|
||||||
void sh3105()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
char tname[] = "SH3105";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii]), shadow[0:2][2:2][0:2]
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
B[i][j][ii] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) shadow_renew(A[0:2][2:2][0:2] (corner))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
B[i][j][ii] = A[i+2][j+2][ii+2]+A[i][j-2][ii]+
|
|
||||||
A[i+2][j-2][ii]+A[i][j+2][ii]+ A[i][j+2][ii+2]+
|
|
||||||
A[i+2][j-2][ii+2]+A[i+2][j+2][ii];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
if (B[i][j][ii]!= C[i+2][j+2][ii+2]+C[i][j-2][ii]+
|
|
||||||
C[i+2][j-2][ii]+C[i][j+2][ii]+ C[i][j+2][ii+2]+
|
|
||||||
C[i+2][j-2][ii+2]+C[i+2][j+2][ii])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH3106 */
|
|
||||||
void sh3106()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
char tname[] = "SH3106";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii]), shadow[3:3][3:3][3:3]
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
B[i][j][ii] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) shadow_renew(A (corner))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
B[i][j][ii] = A[i-3][j-3][ii+3]+A[i+3][j+3][ii-3]+A[i+3][j-3][ii+3]+
|
|
||||||
A[i-3][j+3][ii+3]+A[i-3][j+3][ii-3]+A[i+3][j-3][ii-3]+
|
|
||||||
A[i+3][j+3][ii+3]+A[i-3][j-3][ii-3];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
if (B[i][j][ii]!= C[i-3][j-3][ii+3]+C[i+3][j+3][ii-3]+C[i+3][j-3][ii+3]+
|
|
||||||
C[i-3][j+3][ii+3]+C[i-3][j+3][ii-3]+C[i+3][j-3][ii-3]+
|
|
||||||
C[i+3][j+3][ii+3]+C[i-3][j-3][ii-3])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH3107 */
|
|
||||||
void sh3107()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
char tname[] = "SH3107";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii]), shadow[3:3][0:3][3:0]
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
B[i][j][ii] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) shadow_renew(A (corner))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
B[i][j][ii] = A[i+3][j+3][ii]+A[i-3][j][ii-3]+A[i+3][j][ii-3]+
|
|
||||||
A[i-3][j+3][ii-3]+A[i-3][j][ii]+A[i-3][j+3][ii]+
|
|
||||||
A[i+3][j][ii]+A[i+3][j+3][ii-3];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
if (B[i][j][ii]!= C[i-3][j-3][ii+3]+C[i+3][j+3][ii-3]+C[i+3][j-3][ii+3]+
|
|
||||||
C[i-3][j+3][ii+3]+C[i-3][j+3][ii-3]+C[i+3][j-3][ii-3]+
|
|
||||||
C[i+3][j+3][ii+3]+C[i-3][j-3][ii-3])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH3108 */
|
|
||||||
void sh3108()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
char tname[] = "SH3108";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii]), shadow[0:3][0:3][0:3]
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
B[i][j][ii] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) shadow_renew(A[0:3][0:3][0:3] (corner))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
B[i][j][ii] = A[i+3][j+3][ii+3]+A[i+3][j][ii]+A[i][j+3][ii]+
|
|
||||||
A[i][j][ii+3]+A[i][j+3][ii+3]+A[i+3][j][ii+3]+
|
|
||||||
A[i+3][j+3][ii];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
if (B[i][j][ii]!=C[i+3][j+3][ii+3]+C[i+3][j][ii]+C[i][j+3][ii]+
|
|
||||||
C[i][j][ii+3]+C[i][j+3][ii+3]+C[i+3][j][ii+3]+
|
|
||||||
C[i+3][j+3][ii] )
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH3109 */
|
|
||||||
void sh3109()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
char tname[] = "SH3109";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
#pragma dvm array align([i][j][ii] with B[i][j][ii]), shadow[9:9][9:9][9:9]
|
|
||||||
int A[N][M][K];
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
B[i][j][ii] = 0;
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) shadow_renew(A[9:9][9:9][9:9] (corner))
|
|
||||||
for (i = 9; i < N - 9; i++)
|
|
||||||
for (j = 9; j < M - 9; j++)
|
|
||||||
for (ii = 9; ii < K - 9; ii++)
|
|
||||||
B[i][j][ii]=A[i+9][j+9][ii+9]+A[i-9][j-9][ii-9]+A[i+9][j-9][ii-9]+
|
|
||||||
A[i-9][j+9][ii-9]+A[i-9][j-9][ii+9]+A[i-9][j+9][ii+9]+
|
|
||||||
A[i+9][j-9][ii+9]+A[i+9][j+9][ii-9];
|
|
||||||
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 9; i < N - 9; i++)
|
|
||||||
for (j = 9; j < M - 9; j++)
|
|
||||||
for (ii = 9; ii < K - 9; ii++)
|
|
||||||
if (B[i][j][ii]!=C[i+9][j+9][ii+9]+C[i-9][j-9][ii-9]+C[i+9][j-9][ii-9]+
|
|
||||||
C[i-9][j+9][ii-9]+C[i-9][j-9][ii+9]+C[i-9][j+9][ii+9]+
|
|
||||||
C[i+9][j-9][ii+9]+C[i+9][j+9][ii-9])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH3110 */
|
|
||||||
void sh3110()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
char tname[] = "SH3110";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block]
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array shadow[9:9][9:9][9:9]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
#pragma dvm realign(A[i][j][ii] with B[i][j][ii])
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
B[i][j][ii] = 0;
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) shadow_renew(A[9:9][9:9][9:9] (corner))
|
|
||||||
for (i = 9; i < N - 9; i++)
|
|
||||||
for (j = 9; j < M - 9; j++)
|
|
||||||
for (ii = 9; ii < K - 9; ii++)
|
|
||||||
B[i][j][ii]=A[i+9][j+9][ii+9]+A[i-9][j-9][ii-9]+A[i+9][j-9][ii-9]+
|
|
||||||
A[i-9][j+9][ii-9]+A[i-9][j-9][ii+9]+A[i-9][j+9][ii+9]+
|
|
||||||
A[i+9][j-9][ii+9]+A[i+9][j+9][ii-9];
|
|
||||||
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 9; i < N - 9; i++)
|
|
||||||
for (j = 9; j < M - 9; j++)
|
|
||||||
for (ii = 9; ii < K - 9; ii++)
|
|
||||||
if (B[i][j][ii]!=C[i+9][j+9][ii+9]+C[i-9][j-9][ii-9]+C[i+9][j-9][ii-9]+
|
|
||||||
C[i-9][j+9][ii-9]+C[i-9][j-9][ii+9]+C[i-9][j+9][ii+9]+
|
|
||||||
C[i+9][j-9][ii+9]+C[i+9][j+9][ii-9])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH3111 */
|
|
||||||
void sh3111()
|
|
||||||
{
|
|
||||||
int C[N][M][K];
|
|
||||||
int nloopi, nloopj, nloopii;
|
|
||||||
char tname[] = "SH3111";
|
|
||||||
int i, j, ii, NN, NM, NK, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array
|
|
||||||
int B[N][M][K];
|
|
||||||
|
|
||||||
#pragma dvm array shadow[9:9][9:9][9:9]
|
|
||||||
int A[N][M][K];
|
|
||||||
|
|
||||||
NN = N;
|
|
||||||
NM = M;
|
|
||||||
NK = K;
|
|
||||||
NNL = NL;
|
|
||||||
serial3(C, NN, NM, NK, NNL);
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
#pragma dvm redistribute(B[block][block][block])
|
|
||||||
#pragma dvm realign(A[i][j][ii] with B[i][j][ii])
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii] on A[i][j][ii])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++) {
|
|
||||||
A[i][j][ii] = NL + i + j + ii;
|
|
||||||
B[i][j][ii] = 0;
|
|
||||||
}
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) shadow_renew(A[9:9][9:9][9:9] (corner))
|
|
||||||
for (i = 9; i < N - 9; i++)
|
|
||||||
for (j = 9; j < M - 9; j++)
|
|
||||||
for (ii = 9; ii < K - 9; ii++)
|
|
||||||
B[i][j][ii]=A[i+9][j+9][ii+9]+A[i-9][j-9][ii-9]+A[i+9][j-9][ii-9]+
|
|
||||||
A[i-9][j+9][ii-9]+A[i-9][j-9][ii+9]+A[i-9][j+9][ii+9]+
|
|
||||||
A[i+9][j-9][ii+9]+A[i+9][j+9][ii-9];
|
|
||||||
|
|
||||||
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii] on B[i][j][ii]) reduction(min(nloopi), min(nloopj), min(nloopii))
|
|
||||||
for (i = 9; i < N - 9; i++)
|
|
||||||
for (j = 9; j < M - 9; j++)
|
|
||||||
for (ii = 9; ii < K - 9; ii++)
|
|
||||||
if (B[i][j][ii]!=C[i+9][j+9][ii+9]+C[i-9][j-9][ii-9]+C[i+9][j-9][ii-9]+
|
|
||||||
C[i-9][j+9][ii-9]+C[i-9][j-9][ii+9]+C[i-9][j+9][ii+9]+
|
|
||||||
C[i+9][j-9][ii+9]+C[i+9][j+9][ii-9])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
}
|
|
||||||
|
|
||||||
void serial3(int AR[N][M][K], int NN, int NM, int NK, int NNL)
|
|
||||||
{
|
|
||||||
int i, j, ii;
|
|
||||||
for (i = 0; i < NN; i++)
|
|
||||||
for (j = 0; j < NM; j++)
|
|
||||||
for (ii = 0; ii < NK; ii++)
|
|
||||||
AR[i][j][ii] = NNL + i + j + ii;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf ("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,923 +0,0 @@
|
|||||||
/* TESTING OF THE SHADOW DIRECTIVE AND THE SHADOW_RENEW CLAUSE'.
|
|
||||||
DISTRIBUTED ARRAY A(N,M,K,L) IS TO HAVE DIFFERENT SHADOW WIDTH
|
|
||||||
ON BOTH SIDES */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define NL 1000
|
|
||||||
|
|
||||||
static void sh4101();
|
|
||||||
static void sh4102();
|
|
||||||
static void sh4103();
|
|
||||||
static void sh4104();
|
|
||||||
static void sh4105();
|
|
||||||
static void sh4106();
|
|
||||||
static void sh4107();
|
|
||||||
static void sh4108();
|
|
||||||
static void sh4109();
|
|
||||||
static void sh4110();
|
|
||||||
static void sh4111();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("===START OF SH41========================\n");
|
|
||||||
sh4101();
|
|
||||||
sh4102();
|
|
||||||
sh4103();
|
|
||||||
sh4104();
|
|
||||||
sh4105();
|
|
||||||
sh4106();
|
|
||||||
sh4107();
|
|
||||||
sh4108();
|
|
||||||
sh4109();
|
|
||||||
sh4110();
|
|
||||||
sh4111();
|
|
||||||
|
|
||||||
printf("=== END OF SH41 ========================= \n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH4101 */
|
|
||||||
void sh4101()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define M 8
|
|
||||||
#define K 8
|
|
||||||
#define L 8
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
char tname[] = "SH4101";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj]), shadow[1:1][1:1][1:1][1:1]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) shadow_renew(A(corner))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
B[i][j][ii][jj] = A[i+1][j+1][ii+1][jj+1]+A[i-1][j-1][ii-1][jj-1]+
|
|
||||||
A[i+1][j-1][ii-1][jj-1]+A[i-1][j+1][ii-1][jj-1]+
|
|
||||||
A[i-1][j-1][ii+1][jj-1]+A[i-1][j-1][ii-1][jj+1]+
|
|
||||||
A[i+1][j+1][ii-1][jj-1]+A[i-1][j+1][ii+1][jj-1]+
|
|
||||||
A[i-1][j-1][ii+1][jj+1]+A[i+1][j-1][ii-1][jj+1]+
|
|
||||||
A[i+1][j-1][ii+1][jj-1]+A[i-1][j+1][ii-1][jj+1]+
|
|
||||||
A[i+1][j+1][ii+1][jj-1]+A[i-1][j+1][ii+1][jj+1]+
|
|
||||||
A[i+1][j-1][ii+1][jj+1]+A[i+1][j+1][ii-1][jj+1];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 1; i < N - 1; i++)
|
|
||||||
for (j = 1; j < M - 1; j++)
|
|
||||||
for (ii = 1; ii < K - 1; ii++)
|
|
||||||
for (jj = 1; jj < L - 1; jj++)
|
|
||||||
if (B[i][j][ii][jj]!=
|
|
||||||
C[i+1][j+1][ii+1][jj+1]+C[i-1][j-1][ii-1][jj-1]+
|
|
||||||
C[i+1][j-1][ii-1][jj-1]+C[i-1][j+1][ii-1][jj-1]+
|
|
||||||
C[i-1][j-1][ii+1][jj-1]+C[i-1][j-1][ii-1][jj+1]+
|
|
||||||
C[i+1][j+1][ii-1][jj-1]+C[i-1][j+1][ii+1][jj-1]+
|
|
||||||
C[i-1][j-1][ii+1][jj+1]+C[i+1][j-1][ii-1][jj+1]+
|
|
||||||
C[i+1][j-1][ii+1][jj-1]+C[i-1][j+1][ii-1][jj+1]+
|
|
||||||
C[i+1][j+1][ii+1][jj-1]+C[i-1][j+1][ii+1][jj+1]+
|
|
||||||
C[i+1][j-1][ii+1][jj+1]+C[i+1][j+1][ii-1][jj+1])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/*-----------------------------------------------------------SH4102 */
|
|
||||||
void sh4102()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
char tname[] = "SH4102";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj]), shadow[2:2][2:2][2:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel ([i][j][ii][jj] on B[i][j][ii][jj]) shadow_renew(A (corner))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
B[i][j][ii][jj] =
|
|
||||||
A[i+2][j+2][ii+2][jj+2]+A[i-2][j-2][ii-2][jj-2]+
|
|
||||||
A[i+2][j-2][ii-2][jj-2]+A[i-2][j+2][ii-2][jj-2]+
|
|
||||||
A[i-2][j-2][ii+2][jj-2]+A[i-2][j-2][ii-2][jj+2]+
|
|
||||||
A[i+2][j+2][ii-2][jj-2]+A[i-2][j+2][ii+2][jj-2]+
|
|
||||||
A[i-2][j-2][ii+2][jj+2]+A[i+2][j-2][ii-2][jj+2]+
|
|
||||||
A[i+2][j-2][ii+2][jj-2]+A[i-2][j+2][ii-2][jj+2]+
|
|
||||||
A[i+2][j+2][ii+2][jj-2]+A[i-2][j+2][ii+2][jj+2]+
|
|
||||||
A[i+2][j-2][ii+2][jj+2]+A[i+2][j+2][ii-2][jj+2];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
if (B[i][j][ii][jj]!=
|
|
||||||
C[i+2][j+2][ii+2][jj+2]+C[i-2][j-2][ii-2][jj-2]+
|
|
||||||
C[i+2][j-2][ii-2][jj-2]+C[i-2][j+2][ii-2][jj-2]+
|
|
||||||
C[i-2][j-2][ii+2][jj-2]+C[i-2][j-2][ii-2][jj+2]+
|
|
||||||
C[i+2][j+2][ii-2][jj-2]+C[i-2][j+2][ii+2][jj-2]+
|
|
||||||
C[i-2][j-2][ii+2][jj+2]+C[i+2][j-2][ii-2][jj+2]+
|
|
||||||
C[i+2][j-2][ii+2][jj-2]+C[i-2][j+2][ii-2][jj+2]+
|
|
||||||
C[i+2][j+2][ii+2][jj-2]+C[i-2][j+2][ii+2][jj+2]+
|
|
||||||
C[i+2][j-2][ii+2][jj+2]+C[i+2][j+2][ii-2][jj+2])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH4103 */
|
|
||||||
void sh4103()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
char tname[] = "SH4103";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj]), shadow[2:2][2:2][2:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) shadow_renew(A[2:0][2:2][2:0][2:0] (corner))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
B[i][j][ii][jj] =
|
|
||||||
A[i-2][j-2][ii-2][jj-2]+A[i][j-2][ii][jj]+
|
|
||||||
A[i-2][j-2][ii][jj] +A[i][j-2][ii][jj]+
|
|
||||||
A[i][j-2][ii-2][jj] +A[i-2][j-2][ii][jj]+
|
|
||||||
A[i][j-2][ii-2][jj-2] +A[i][j-2][ii][jj-2]+
|
|
||||||
A[i-2][j-2][ii-2][jj] +A[i][j-2][ii-2][jj-2];
|
|
||||||
}/* end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
if (B[i][j][ii][jj]!=
|
|
||||||
C[i-2][j-2][ii-2][jj-2]+C[i][j-2][ii][jj]+
|
|
||||||
C[i-2][j-2][ii][jj] +C[i][j-2][ii][jj]+
|
|
||||||
C[i][j-2][ii-2][jj] +C[i-2][j-2][ii][jj]+
|
|
||||||
C[i][j-2][ii-2][jj-2] +C[i][j-2][ii][jj-2]+
|
|
||||||
C[i-2][j-2][ii-2][jj] +C[i][j-2][ii-2][jj-2])
|
|
||||||
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH4104 */
|
|
||||||
void sh4104()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
char tname[] = "SH4104";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj]), shadow[0:2][2:2][0:2][0:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) shadow_renew(A(corner))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
B[i][j][ii][jj] = A[i+2][j+2][ii+2][jj+2]+A[i][j-2][ii][jj]+
|
|
||||||
A[i+2][j-2][ii][jj] +A[i][j-2][ii][jj]+
|
|
||||||
A[i][j+2][ii][jj] +A[i][j-2][ii+2][jj]+
|
|
||||||
A[i+2][j+2][ii][jj] +A[i][j-2][ii+2][jj+2]+
|
|
||||||
A[i][j+2][ii][jj+2] +A[i+2][j+2][ii+2][jj]+
|
|
||||||
A[i][j+2][ii+2][jj+2] +A[i+2][j-2][ii+2][jj+2];
|
|
||||||
}/*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
if (B[i][j][ii][jj]!=
|
|
||||||
C[i+2][j+2][ii+2][jj+2]+C[i][j-2][ii][jj]+
|
|
||||||
C[i+2][j-2][ii][jj] +C[i][j-2][ii][jj]+
|
|
||||||
C[i][j+2][ii][jj] +C[i][j-2][ii+2][jj]+
|
|
||||||
C[i+2][j+2][ii][jj] +C[i][j-2][ii+2][jj+2]+
|
|
||||||
C[i][j+2][ii][jj+2] +C[i+2][j+2][ii+2][jj]+
|
|
||||||
C[i][j+2][ii+2][jj+2] +C[i+2][j-2][ii+2][jj+2])
|
|
||||||
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH4105 */
|
|
||||||
void sh4105()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
char tname[] = "SH4105";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj]), shadow[2:2][2:0][0:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) shadow_renew(A[0:0][0:0][0:0][0:2] (corner))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
B[i][j][ii][jj] = A[i][j][ii][jj+2];
|
|
||||||
}/*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 2; i < N - 2; i++)
|
|
||||||
for (j = 2; j < M - 2; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
if (B[i][j][ii][jj]!=C[i][j][ii][jj+2])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH4106 */
|
|
||||||
void sh4106()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
char tname[] = "SH4106";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj]), shadow[3:3][3:3][3:3][3:3]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) shadow_renew(A (corner))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
B[i][j][ii][jj] = A[i+3][j+3][ii+3][jj+3]+A[i-3][j-3][ii-3][jj-3]+
|
|
||||||
A[i+3][j-3][ii-3][jj-3]+A[i-3][j+3][ii-3][jj-3]+
|
|
||||||
A[i-3][j-3][ii+3][jj-3]+A[i-3][j-3][ii-3][jj+3]+
|
|
||||||
A[i+3][j+3][ii-3][jj-3]+A[i-3][j+3][ii+3][jj-3]+
|
|
||||||
A[i-3][j-3][ii+3][jj+3]+A[i+3][j-3][ii-3][jj+3]+
|
|
||||||
A[i+3][j-3][ii+3][jj-3]+A[i-3][j+3][ii-3][jj+3]+
|
|
||||||
A[i+3][j+3][ii+3][jj-3]+A[i-3][j+3][ii+3][jj+3]+
|
|
||||||
A[i+3][j-3][ii+3][jj+3]+A[i+3][j+3][ii-3][jj+3];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
if (B[i][j][ii][jj]!=
|
|
||||||
C[i+3][j+3][ii+3][jj+3]+C[i-3][j-3][ii-3][jj-3]+
|
|
||||||
C[i+3][j-3][ii-3][jj-3]+C[i-3][j+3][ii-3][jj-3]+
|
|
||||||
C[i-3][j-3][ii+3][jj-3]+C[i-3][j-3][ii-3][jj+3]+
|
|
||||||
C[i+3][j+3][ii-3][jj-3]+C[i-3][j+3][ii+3][jj-3]+
|
|
||||||
C[i-3][j-3][ii+3][jj+3]+C[i+3][j-3][ii-3][jj+3]+
|
|
||||||
C[i+3][j-3][ii+3][jj-3]+C[i-3][j+3][ii-3][jj+3]+
|
|
||||||
C[i+3][j+3][ii+3][jj-3]+C[i-3][j+3][ii+3][jj+3]+
|
|
||||||
C[i+3][j-3][ii+3][jj+3]+C[i+3][j+3][ii-3][jj+3] )
|
|
||||||
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH4107 */
|
|
||||||
void sh4107()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
char tname[] = "SH4107";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj]), shadow[0:3][3:3][0:3][0:3]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) shadow_renew(A(corner))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
B[i][j][ii][jj] =
|
|
||||||
A[i+3][j+3][ii+3][jj+3]+A[i][j-3][ii][jj]+
|
|
||||||
A[i+3][j-3][ii][jj]+A[i][j+3][ii][jj]+
|
|
||||||
A[i][j-3][ii+3][jj]+A[i+3][j+3][ii][jj]+
|
|
||||||
A[i][j-3][ii+3][jj+3]+A[i][j+3][ii][jj+3]+
|
|
||||||
A[i+3][j+3][ii+3][jj]+A[i][j+3][ii+3][jj+3]+
|
|
||||||
A[i+3][j-3][ii+3][jj+3];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
if (B[i][j][ii][jj]!=
|
|
||||||
C[i+3][j+3][ii+3][jj+3]+C[i][j-3][ii][jj]+
|
|
||||||
C[i+3][j-3][ii][jj]+ C[i][j+3][ii][jj]+
|
|
||||||
C[i][j-3][ii+3][jj]+ C[i+3][j+3][ii][jj]+
|
|
||||||
C[i][j-3][ii+3][jj+3]+ C[i][j+3][ii][jj+3]+
|
|
||||||
C[i+3][j+3][ii+3][jj]+ C[i][j+3][ii+3][jj+3]+
|
|
||||||
C[i+3][j-3][ii+3][jj+3])
|
|
||||||
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH4108 */
|
|
||||||
void sh4108()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
char tname[] = "SH4108";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj]), shadow[0:3][3:3][0:3][0:3]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) shadow_renew(A[0:0][0:0][0:0][0:3] (corner))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
B[i][j][ii][jj] = A[i][j][ii][jj+3];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
if (B[i][j][ii][jj]!=C[i][j][ii][jj+3])
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH4109 */
|
|
||||||
void sh4109()
|
|
||||||
{
|
|
||||||
#define N 48
|
|
||||||
#define M 48
|
|
||||||
#define K 24
|
|
||||||
#define L 24
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
char tname[] = "SH4109";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
#pragma dvm array align([i][j][ii][jj] with B[i][j][ii][jj]), shadow[9:9][9:9][2:2][2:2]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) shadow_renew(A[9:9][9:9][2:2][2:2] (corner))
|
|
||||||
for (i = 9; i < N - 9; i++)
|
|
||||||
for (j = 9; j < M - 9; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
B[i][j][ii][jj] = A[i+9][j+9][ii+2][jj+2]+A[i-9][j-9][ii-2][jj-2]+
|
|
||||||
A[i+9][j-9][ii-2][jj-2]+A[i-9][j+9][ii-2][jj-2]+
|
|
||||||
A[i-9][j-9][ii+2][jj-2]+A[i-9][j-9][ii-2][jj+2]+
|
|
||||||
A[i+9][j+9][ii-2][jj-2]+A[i-9][j+9][ii+2][jj-2]+
|
|
||||||
A[i-9][j-9][ii+2][jj+2]+A[i+9][j-9][ii-2][jj+2]+
|
|
||||||
A[i+9][j-9][ii+2][jj-2]+A[i-9][j+9][ii-2][jj+2]+
|
|
||||||
A[i+9][j+9][ii+2][jj-2]+A[i-9][j+9][ii+2][jj+2]+
|
|
||||||
A[i+9][j-9][ii+2][jj+2]+A[i+9][j+9][ii-2][jj+2];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 9; i < N - 9; i++)
|
|
||||||
for (j = 9; j < M - 9; j++)
|
|
||||||
for (ii = 2; ii < K - 2; ii++)
|
|
||||||
for (jj = 2; jj < L - 2; jj++)
|
|
||||||
if (B[i][j][ii][jj]!=
|
|
||||||
C[i+9][j+9][ii+2][jj+2]+C[i-9][j-9][ii-2][jj-2]+
|
|
||||||
C[i+9][j-9][ii-2][jj-2]+C[i-9][j+9][ii-2][jj-2]+
|
|
||||||
C[i-9][j-9][ii+2][jj-2]+C[i-9][j-9][ii-2][jj+2]+
|
|
||||||
C[i+9][j+9][ii-2][jj-2]+C[i-9][j+9][ii+2][jj-2]+
|
|
||||||
C[i-9][j-9][ii+2][jj+2]+C[i+9][j-9][ii-2][jj+2]+
|
|
||||||
C[i+9][j-9][ii+2][jj-2]+C[i-9][j+9][ii-2][jj+2]+
|
|
||||||
C[i+9][j+9][ii+2][jj-2]+C[i-9][j+9][ii+2][jj+2]+
|
|
||||||
C[i+9][j-9][ii+2][jj+2]+C[i+9][j+9][ii-2][jj+2] )
|
|
||||||
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH4110 */
|
|
||||||
void sh4110()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
char tname[] = "SH4110";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
#pragma dvm array distribute[block][block][block][block]
|
|
||||||
int B[N][M][K][L];
|
|
||||||
#pragma dvm array shadow[3:3][3:3][3:3][3:3]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
#pragma dvm realign(A[i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) shadow_renew(A (corner))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
B[i][j][ii][jj] = A[i+3][j+3][ii+3][jj+3]+A[i-3][j-3][ii-3][jj-3]+
|
|
||||||
A[i+3][j-3][ii-3][jj-3]+A[i-3][j+3][ii-3][jj-3]+
|
|
||||||
A[i-3][j-3][ii+3][jj-3]+A[i-3][j-3][ii-3][jj+3]+
|
|
||||||
A[i+3][j+3][ii-3][jj-3]+A[i-3][j+3][ii+3][jj-3]+
|
|
||||||
A[i-3][j-3][ii+3][jj+3]+A[i+3][j-3][ii-3][jj+3]+
|
|
||||||
A[i+3][j-3][ii+3][jj-3]+A[i-3][j+3][ii-3][jj+3]+
|
|
||||||
A[i+3][j+3][ii+3][jj-3]+A[i-3][j+3][ii+3][jj+3]+
|
|
||||||
A[i+3][j-3][ii+3][jj+3]+A[i+3][j+3][ii-3][jj+3];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
if (B[i][j][ii][jj]!=
|
|
||||||
C[i+3][j+3][ii+3][jj+3]+C[i-3][j-3][ii-3][jj-3]+
|
|
||||||
C[i+3][j-3][ii-3][jj-3]+C[i-3][j+3][ii-3][jj-3]+
|
|
||||||
C[i-3][j-3][ii+3][jj-3]+C[i-3][j-3][ii-3][jj+3]+
|
|
||||||
C[i+3][j+3][ii-3][jj-3]+C[i-3][j+3][ii+3][jj-3]+
|
|
||||||
C[i-3][j-3][ii+3][jj+3]+C[i+3][j-3][ii-3][jj+3]+
|
|
||||||
C[i+3][j-3][ii+3][jj-3]+C[i-3][j+3][ii-3][jj+3]+
|
|
||||||
C[i+3][j+3][ii+3][jj-3]+C[i-3][j+3][ii+3][jj+3]+
|
|
||||||
C[i+3][j-3][ii+3][jj+3]+C[i+3][j+3][ii-3][jj+3] )
|
|
||||||
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
/* ---------------------------------------------SH4111 */
|
|
||||||
void sh4111()
|
|
||||||
{
|
|
||||||
#define N 16
|
|
||||||
#define M 16
|
|
||||||
#define K 16
|
|
||||||
#define L 16
|
|
||||||
|
|
||||||
int C[N][M][K][L];
|
|
||||||
int nloopi, nloopj, nloopii, nloopjj;
|
|
||||||
char tname[] = "SH4111";
|
|
||||||
int i, j, ii, jj, NN, NM, NK, NLL, NNL;
|
|
||||||
#pragma dvm array
|
|
||||||
int B[N][M][K][L];
|
|
||||||
#pragma dvm array shadow[3:3][3:3][3:3][3:3]
|
|
||||||
int A[N][M][K][L];
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
C[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
nloopi = NL;
|
|
||||||
nloopj = NL;
|
|
||||||
nloopii = NL;
|
|
||||||
nloopjj = NL;
|
|
||||||
|
|
||||||
#pragma dvm redistribute(B[block][block][block][block])
|
|
||||||
#pragma dvm realign(A[i][j][ii][jj] with B[i][j][ii][jj])
|
|
||||||
|
|
||||||
#pragma dvm region local(A), out(B)
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on A[i][j][ii][jj])
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
for (j = 0; j < M; j++)
|
|
||||||
for (ii = 0; ii < K; ii++)
|
|
||||||
for (jj = 0; jj < L; jj++)
|
|
||||||
A[i][j][ii][jj] = NL + i + j + ii + jj;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) shadow_renew(A (corner))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
B[i][j][ii][jj] = A[i+3][j+3][ii+3][jj+3]+A[i-3][j-3][ii-3][jj-3]+
|
|
||||||
A[i+3][j-3][ii-3][jj-3]+A[i-3][j+3][ii-3][jj-3]+
|
|
||||||
A[i-3][j-3][ii+3][jj-3]+A[i-3][j-3][ii-3][jj+3]+
|
|
||||||
A[i+3][j+3][ii-3][jj-3]+A[i-3][j+3][ii+3][jj-3]+
|
|
||||||
A[i-3][j-3][ii+3][jj+3]+A[i+3][j-3][ii-3][jj+3]+
|
|
||||||
A[i+3][j-3][ii+3][jj-3]+A[i-3][j+3][ii-3][jj+3]+
|
|
||||||
A[i+3][j+3][ii+3][jj-3]+A[i-3][j+3][ii+3][jj+3]+
|
|
||||||
A[i+3][j-3][ii+3][jj+3]+A[i+3][j+3][ii-3][jj+3];
|
|
||||||
} /*end region*/
|
|
||||||
#pragma dvm get_actual(B)
|
|
||||||
#pragma dvm parallel([i][j][ii][jj] on B[i][j][ii][jj]) reduction(min(nloopi), min(nloopj), min(nloopii), min(nloopjj))
|
|
||||||
for (i = 3; i < N - 3; i++)
|
|
||||||
for (j = 3; j < M - 3; j++)
|
|
||||||
for (ii = 3; ii < K - 3; ii++)
|
|
||||||
for (jj = 3; jj < L - 3; jj++)
|
|
||||||
if (B[i][j][ii][jj]!=
|
|
||||||
C[i+3][j+3][ii+3][jj+3]+C[i-3][j-3][ii-3][jj-3]+
|
|
||||||
C[i+3][j-3][ii-3][jj-3]+C[i-3][j+3][ii-3][jj-3]+
|
|
||||||
C[i-3][j-3][ii+3][jj-3]+C[i-3][j-3][ii-3][jj+3]+
|
|
||||||
C[i+3][j+3][ii-3][jj-3]+C[i-3][j+3][ii+3][jj-3]+
|
|
||||||
C[i-3][j-3][ii+3][jj+3]+C[i+3][j-3][ii-3][jj+3]+
|
|
||||||
C[i+3][j-3][ii+3][jj-3]+C[i-3][j+3][ii-3][jj+3]+
|
|
||||||
C[i+3][j+3][ii+3][jj-3]+C[i-3][j+3][ii+3][jj+3]+
|
|
||||||
C[i+3][j-3][ii+3][jj+3]+C[i+3][j+3][ii-3][jj+3] )
|
|
||||||
|
|
||||||
{
|
|
||||||
if (nloopi > i) nloopi = i;
|
|
||||||
if (nloopj > j) nloopj = j;
|
|
||||||
if (nloopii > ii) nloopii = ii;
|
|
||||||
if (nloopjj > jj) nloopjj = jj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nloopi == NL && nloopj == NL && nloopii == NL && nloopjj == NL)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef N
|
|
||||||
#undef M
|
|
||||||
#undef K
|
|
||||||
#undef L
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,190 +0,0 @@
|
|||||||
/* TEMPL1
|
|
||||||
TESTING template CLAUSE */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void templ111();
|
|
||||||
static void templ121();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, ia, ib, ic, ja, jb, jc, k;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF TEMPL1 ======================\n");
|
|
||||||
/* TEMPLATE A1[BLOCK] ALIGN B1[i] WITH A1[i + 4]
|
|
||||||
ALIGN C1[i] WITH A1[2*i + 4] */
|
|
||||||
templ111();
|
|
||||||
/* TEMPLATE A1[BLOCK] ALIGN B1[][i] WITH A1[i]
|
|
||||||
ALIGN C1[i][] WITH A1[2*i + 1] */
|
|
||||||
templ121();
|
|
||||||
printf("=== END OF TEMPL1 ========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------TEMPL111*/
|
|
||||||
/* TEMPLATE A1[BLOCK] ALIGN B1[i] WITH A1[i + 4]
|
|
||||||
ALIGN C1[i] WITH A1[2*i + 4] */
|
|
||||||
void templ111()
|
|
||||||
{
|
|
||||||
#define AN1 14
|
|
||||||
#define BN1 8
|
|
||||||
#define CN1 4
|
|
||||||
int k1i = 1, k2i = 0, li = 4;
|
|
||||||
int kc1i = 2, kc2i = 0, lci = 4;
|
|
||||||
char tname[] = "templ111 ";
|
|
||||||
|
|
||||||
#pragma dvm template[AN1] distribute[block]
|
|
||||||
void *A1;
|
|
||||||
#pragma dvm array align([i] with A1[k1i * i + li])
|
|
||||||
int B1[BN1];
|
|
||||||
#pragma dvm array align([i] with A1[kc1i * i + lci])
|
|
||||||
int C1[CN1];
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on C1[i])
|
|
||||||
for (i = 0; i < CN1; i++)
|
|
||||||
C1[i] = i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(ib, erri, ic)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
if (((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1))
|
|
||||||
{
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
if (B1[ib] != (ib))
|
|
||||||
erri = i;
|
|
||||||
}
|
|
||||||
if (((i-lci) == (((i-lci)/kc1i) * kc1i)) &&
|
|
||||||
(((i-lci)/kc1i) >= 0) &&
|
|
||||||
(((i-lci)/kc1i) < CN1))
|
|
||||||
{
|
|
||||||
ic = (i-lci)/kc1i;
|
|
||||||
if (C1[ic] != (ic))
|
|
||||||
erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef BN1
|
|
||||||
#undef CN1
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------TEMPL121*/
|
|
||||||
/* TEMPLATE A1[BLOCK] ALIGN B1[][i] WITH A1[i]
|
|
||||||
ALIGN C1[i][] WITH A1[2*i + 1] */
|
|
||||||
void templ121()
|
|
||||||
{
|
|
||||||
int AN1 = 9;
|
|
||||||
int BN1 = 8;
|
|
||||||
int BN2 = 8;
|
|
||||||
int CN1 = 4;
|
|
||||||
int CN2 = 4;
|
|
||||||
|
|
||||||
int k1i = 1, k2i = 0, li = 0;
|
|
||||||
int kc1i = 2, kc2i = 0, lci = 1;
|
|
||||||
|
|
||||||
char tname[] = "templ121 ";
|
|
||||||
|
|
||||||
#pragma dvm template[AN1] distribute[block]
|
|
||||||
void *A1;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B2)[BN2];
|
|
||||||
#pragma dvm array
|
|
||||||
int (*C2)[CN2];
|
|
||||||
|
|
||||||
B2 = malloc(sizeof(int[BN1][BN2]));
|
|
||||||
C2 = malloc(sizeof(int[CN1][CN2]));
|
|
||||||
#pragma dvm realign(B2[][i] with A1[k1i * i + li])
|
|
||||||
#pragma dvm realign(C2[i][] with A1[kc1i * i + lci])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i][j] on B2[i][j])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
for(j = 0; j < BN2; j++)
|
|
||||||
B2[i][j] = i*NL + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([i][j] on C2[i][j])
|
|
||||||
for (i = 0; i < CN1; i++)
|
|
||||||
for(j = 0; j < CN2; j++)
|
|
||||||
C2[i][j] = i*NL + j;
|
|
||||||
|
|
||||||
|
|
||||||
#pragma dvm parallel([i] on A1[i]) private(j, ib, jb, erri, jc, ic, k)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
for (j = 0; j < BN1; j++)
|
|
||||||
{
|
|
||||||
if (((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN2))
|
|
||||||
{
|
|
||||||
ib = j;
|
|
||||||
jb = (i-li)/k1i;
|
|
||||||
if (B2[ib][jb] != ib*NL + jb)
|
|
||||||
erri = i*NL/10 + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (k = 0; k < CN2; k++)
|
|
||||||
{
|
|
||||||
if (((i-lci) == (((i-lci)/kc1i) * kc1i)) &&
|
|
||||||
(((i-lci)/kc1i) >= 0) &&
|
|
||||||
(((i-lci)/kc1i) < CN1))
|
|
||||||
{
|
|
||||||
jc = k;
|
|
||||||
ic = (i-lci)/kc1i;
|
|
||||||
if (C2[ic][jc] != (ic*NL + jc))
|
|
||||||
erri = i*NL/10 + j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B2);
|
|
||||||
free(C2);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,198 +0,0 @@
|
|||||||
/* TEMPL2
|
|
||||||
TESTING template CLAUSE */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void templ211();
|
|
||||||
static void templ221();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, ia, ib, ic, ja, jb, jc, k;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF TEMPL2 ======================\n");
|
|
||||||
/* TEMPLATE A2[BLOCK][BLOCK] ALIGN B1[i] WITH A2[1][i]
|
|
||||||
ALIGN C2[i][j] WITH A2[2*i+2][j] */
|
|
||||||
templ211();
|
|
||||||
/* TEMPLATE A2[BLOCK][BLOCK] ALIGN B1[i][j] WITH A2[i+4][j+4]
|
|
||||||
ALIGN C2[i][j] WITH A2[i+1][j+1] */
|
|
||||||
templ221();
|
|
||||||
printf("=== END OF TEMPL2 ========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------TEMPL211*/
|
|
||||||
/* TEMPLATE A2[BLOCK][BLOCK] ALIGN B1[i] WITH A2[1][i]
|
|
||||||
ALIGN C2[i][j] WITH A2[2*i+2][j] */
|
|
||||||
void templ211()
|
|
||||||
{
|
|
||||||
#define AN1 14
|
|
||||||
#define AN2 14
|
|
||||||
#define BN1 8
|
|
||||||
#define CN1 4
|
|
||||||
#define CN2 4
|
|
||||||
|
|
||||||
int k1i = 0, k2i = 0, li = 1, k1j = 1, k2j = 0, lj = 0;
|
|
||||||
int kc1i = 2, kc2i = 0, lci = 2, kc1j = 0, kc2j = 1, lcj = 0;
|
|
||||||
char tname[] = "templ211 ";
|
|
||||||
|
|
||||||
#pragma dvm template[AN1][AN2] distribute[block][block]
|
|
||||||
void *A2;
|
|
||||||
#pragma dvm array align([i] with A2[1][i])
|
|
||||||
int B1[BN1];
|
|
||||||
#pragma dvm array align([i][j] with A2[kc1i * i + lci][kc2j * j + lcj])
|
|
||||||
int C2[CN1][CN1];
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([i] on B1[i])
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B1[i] = i;
|
|
||||||
|
|
||||||
#pragma dvm parallel([j][i] on C2[i][j])
|
|
||||||
for (j = 0; j < CN2; j++)
|
|
||||||
for (i = 0; i < CN1; i++)
|
|
||||||
C2[i][j] = (i*NL+j);
|
|
||||||
|
|
||||||
#pragma dvm parallel([j][i] on A2[j][i]) private(ib, erri, ic, jc)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
if (i == 0)
|
|
||||||
{
|
|
||||||
if (j < BN1)
|
|
||||||
{
|
|
||||||
ib = j;
|
|
||||||
if (B1[ib] != (ib))
|
|
||||||
erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (((i-lci) == (((i-lci)/kc1i) * kc1i)) &&
|
|
||||||
((j-lcj) == (((j-lcj)/kc2j) * kc2j)) &&
|
|
||||||
(((i-lci)/kc1i) >= 0) &&
|
|
||||||
(((j-lcj)/kc2j) >= 0) &&
|
|
||||||
(((i-lci)/kc1i) < CN1) &&
|
|
||||||
(((j-lcj)/kc2j) < CN2))
|
|
||||||
{
|
|
||||||
ic = (i-lci)/kc1i;
|
|
||||||
jc = (j-lcj)/kc2j;
|
|
||||||
if (C2[ic][jc] != (ic*NL+jc))
|
|
||||||
erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef BN1
|
|
||||||
#undef CN1
|
|
||||||
#undef CN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------TEMPL221*/
|
|
||||||
/* TEMPLATE A2[BLOCK][BLOCK] ALIGN B1[i][j] WITH A2[i+4][j+4]
|
|
||||||
ALIGN C2[i][j] WITH A2[i+1][j+1] */
|
|
||||||
void templ221()
|
|
||||||
{
|
|
||||||
int AN1 = 14, AN2 = 14, CN1 = 4, CN2 = 4, BN1 = 8, BN2 = 8;
|
|
||||||
|
|
||||||
int k1i = 1, k2i = 0, li = 4, k1j = 0, k2j = 1, lj = 4;
|
|
||||||
int kc1i = 1, kc2i = 0, lci = 1, kc1j = 0, kc2j = 1, lcj = 1;
|
|
||||||
|
|
||||||
char tname[] = "templ221 ";
|
|
||||||
|
|
||||||
#pragma dvm template[AN1][AN2] distribute[block][block]
|
|
||||||
void *A2;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B2)[BN2];
|
|
||||||
#pragma dvm array
|
|
||||||
int (*C2)[CN2];
|
|
||||||
|
|
||||||
B2 = malloc(sizeof(int[BN1][BN2]));
|
|
||||||
C2 = malloc(sizeof(int[CN1][CN2]));
|
|
||||||
#pragma dvm realign(B2[i][j] with A2[k1i * i + li][k2j * j + lj])
|
|
||||||
#pragma dvm realign(C2[i][j] with A2[kc1i * i + lci][kc2j * j + lcj])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([j][i] on B2[i][j])
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B2[i][j] = i*NL + j;
|
|
||||||
|
|
||||||
#pragma dvm parallel([j][i] on C2[i][j])
|
|
||||||
for (j = 0; j < CN2; j++)
|
|
||||||
for (i = 0; i < CN1; i++)
|
|
||||||
C2[i][j] = i*NL + j;
|
|
||||||
|
|
||||||
|
|
||||||
#pragma dvm parallel([j][i] on A2[i][j]) private(ib, ic, erri, jb, jc)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
if (((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
((j-lj) == (((j-lj)/k2j) * k2j)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((j-lj)/k2j) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1) &&
|
|
||||||
(((j-lj)/k2j) < BN2))
|
|
||||||
{
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
jb = (j-lj)/k2j;
|
|
||||||
if (B2[ib][jb] != (ib*NL + jb))
|
|
||||||
erri = i;
|
|
||||||
}
|
|
||||||
if (((i-lci) == (((i-lci)/kc1i) * kc1i)) &&
|
|
||||||
((j-lcj) == (((j-lcj)/kc2j) * kc2j)) &&
|
|
||||||
(((i-lci)/kc1i) >= 0) &&
|
|
||||||
(((j-lcj)/kc2j) >= 0) &&
|
|
||||||
(((i-lci)/kc1i) < CN1) &&
|
|
||||||
(((j-lcj)/kc2j) < CN2))
|
|
||||||
{
|
|
||||||
ic = (i-lci)/kc1i;
|
|
||||||
jc = (j-lcj)/kc2j;
|
|
||||||
if (C2[ic][jc] != (ic*NL+jc))
|
|
||||||
erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B2);
|
|
||||||
free(C2);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,265 +0,0 @@
|
|||||||
/* TEMPL4
|
|
||||||
TESTING template CLAUSE */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static void templ441();
|
|
||||||
static void templ442();
|
|
||||||
|
|
||||||
static void ansyes(const char tname[]);
|
|
||||||
static void ansno(const char tname[]);
|
|
||||||
|
|
||||||
static int NL = 1000;
|
|
||||||
static int ER = 10000;
|
|
||||||
static int erri, i, j, ia, ib, ic, ja, jb, jc, k, m, n, mb, nb, mc, nc;
|
|
||||||
|
|
||||||
int main(int an, char **as)
|
|
||||||
{
|
|
||||||
printf("=== START OF TEMPL4 ======================\n");
|
|
||||||
/* TEMPLATE A4[BLOCK][BLOCK][BLOCK][BLOCK]
|
|
||||||
ALIGN B4[i][j][k][l] WITH A4[i+2][j][k][l+3]
|
|
||||||
ALIGN C2[i][j] WITH A4[i+2][2][3][l+3] */
|
|
||||||
templ441();
|
|
||||||
/* TEMPLATE A4[BLOCK][BLOCK][BLOCK][BLOCK]
|
|
||||||
ALIGN B4[i][j][k][l] WITH A4[l][i][j][k]
|
|
||||||
ALIGN C4[i][j][k][l] WITH A4[i+2][j][k][l+3] */
|
|
||||||
templ442();
|
|
||||||
printf("=== END OF TEMPL4 ========================\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------TEMPL441*/
|
|
||||||
/* TEMPLATE A4[BLOCK][BLOCK][BLOCK][BLOCK]
|
|
||||||
ALIGN B4[i][j][k][l] WITH A4[i+2][j][k][l+3]
|
|
||||||
ALIGN C2[i][j] WITH A4[i+2][2][3][l+3] */
|
|
||||||
void templ441()
|
|
||||||
{
|
|
||||||
#define AN1 7
|
|
||||||
#define AN2 7
|
|
||||||
#define AN3 7
|
|
||||||
#define AN4 7
|
|
||||||
#define BN1 2
|
|
||||||
#define BN2 2
|
|
||||||
#define BN3 2
|
|
||||||
#define BN4 2
|
|
||||||
#define CN1 4
|
|
||||||
#define CN2 4
|
|
||||||
|
|
||||||
int k1i = 1, k2i = 0, k3i = 0, k4i = 0, li = 2;
|
|
||||||
int k1j = 0, k2j = 1, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 0, k3n = 1, k4n = 0, ln = 0;
|
|
||||||
int k1m = 0, k2m = 0, k3m = 0, k4m = 1, lm = 3;
|
|
||||||
int kc1i = 1, kc2i = 0, kc3i = 0, kc4i = 0, lci = 2;
|
|
||||||
int kc1j = 0, kc2j = 0, kc3j = 0, kc4j = 0, lcj = 2;
|
|
||||||
int kc1n = 0, kc2n = 0, kc3n = 0, kc4n = 0, lcn = 3;
|
|
||||||
int kc1m = 0, kc2m = 1, kc3m = 0, kc4m = 0, lcm = 3;
|
|
||||||
char tname[] = "templ441 ";
|
|
||||||
|
|
||||||
#pragma dvm template[AN1][AN2][AN3][AN4] distribute[block][block][block][block]
|
|
||||||
void *A4;
|
|
||||||
#pragma dvm array align([i][j][n][m] with A4[k1i*i+li][k2j*j+lj][k3n*n+ln][k4m*m+lm])
|
|
||||||
int B4[BN1][BN2][BN3][BN4];
|
|
||||||
#pragma dvm array align([i][j] with A4[kc1i*i+lci][lcj][lcn][kc2m*j+lcm])
|
|
||||||
int C2[CN1][CN2];
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([m][n][j][i] on B4[i][j][n][m])
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B4[i][j][n][m] = (i*NL/10+j*NL/100+n*NL/1000+m);
|
|
||||||
|
|
||||||
#pragma dvm parallel([j][i] on C2[i][j])
|
|
||||||
for (j = 0; j < CN2; j++)
|
|
||||||
for (i = 0; i < CN1; i++)
|
|
||||||
C2[i][j] = (i*NL+j);
|
|
||||||
|
|
||||||
#pragma dvm parallel([m][n][j][i] on A4[i][j][n][m]) private(ib, jb, nb, mb, ic, jc, erri)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
if (((i-li) == (((i-li)/k1i) * k1i)) &&
|
|
||||||
((j-lj) == (((j-lj)/k2j) *k2j)) &&
|
|
||||||
((n-ln) == (((n-ln)/k3n) * k3n)) &&
|
|
||||||
((m-lm) == (((m-lm)/k4m) *k4m)) &&
|
|
||||||
(((i-li)/k1i) >= 0) &&
|
|
||||||
(((j-lj)/k2j) >= 0) &&
|
|
||||||
(((n-ln)/k3n) >= 0) &&
|
|
||||||
(((m-lm)/k4m) >= 0) &&
|
|
||||||
(((i-li)/k1i) < BN1) &&
|
|
||||||
(((j-lj)/k2j) < BN2) &&
|
|
||||||
(((n-ln)/k3n) < BN3) &&
|
|
||||||
(((m-lm)/k4m) < BN4))
|
|
||||||
{
|
|
||||||
ib = (i-li)/k1i;
|
|
||||||
jb = (j-lj)/k2j;
|
|
||||||
nb = (n-ln)/k3n;
|
|
||||||
mb = (m-lm)/k4m;
|
|
||||||
if (B4[ib][jb][nb][mb] != (ib*NL/10+jb*NL/100+nb*NL/1000+mb))
|
|
||||||
erri = i*NL/10 + j*NL/100+ n*NL/1000+ m;
|
|
||||||
}
|
|
||||||
if ((j == lcj) && (n == lcn) &&
|
|
||||||
((i-lci) == (((i-lci)/kc1i) * kc1i)) &&
|
|
||||||
((m-lcm) == (((m-lcm)/kc2m) *kc2m)) &&
|
|
||||||
(((i-lci)/kc1i) >= 0) &&
|
|
||||||
(((m-lcm)/kc2m) >= 0) &&
|
|
||||||
(((i-lci)/kc1i) < CN1) &&
|
|
||||||
(((m-lcm)/kc2m) < CN2))
|
|
||||||
{
|
|
||||||
ic = (i-lci)/kc1i;
|
|
||||||
jc = (m-lcm)/kc2m;
|
|
||||||
if (C2[ic][jc] != (ic*NL+jc))
|
|
||||||
erri = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
#undef AN1
|
|
||||||
#undef AN2
|
|
||||||
#undef AN3
|
|
||||||
#undef AN4
|
|
||||||
#undef BN1
|
|
||||||
#undef BN2
|
|
||||||
#undef BN3
|
|
||||||
#undef BN4
|
|
||||||
#undef CN1
|
|
||||||
#undef CN2
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------TEMPL442*/
|
|
||||||
/* TEMPLATE A4[BLOCK][BLOCK][BLOCK][BLOCK]
|
|
||||||
ALIGN B4[i][j][k][l] WITH A4[l][i][j][k]
|
|
||||||
ALIGN C4[i][j][k][l] WITH A4[i+2][j][k][l+3] */
|
|
||||||
void templ442()
|
|
||||||
{
|
|
||||||
int AN1 = 7, AN2 = 7, AN3 = 7, AN4 = 7;
|
|
||||||
int BN1 = 2, BN2 = 2, BN3 = 2, BN4 = 2;
|
|
||||||
int CN1 = 4, CN2 = 4, CN3 = 4, CN4 = 4;
|
|
||||||
|
|
||||||
int k1i = 0, k2i = 0, k3i = 0, k4i = 1, li = 0;
|
|
||||||
int k1j = 1, k2j = 0, k3j = 0, k4j = 0, lj = 0;
|
|
||||||
int k1n = 0, k2n = 1, k3n = 0, k4n = 0, ln = 0;
|
|
||||||
int k1m = 0, k2m = 0, k3m = 1, k4m = 0, lm = 0;
|
|
||||||
int kc1i = 1, kc2i = 0, kc3i = 0, kc4i = 0, lci = 2;
|
|
||||||
int kc1j = 0, kc2j = 1, kc3j = 0, kc4j = 0, lcj = 0;
|
|
||||||
int kc1n = 0, kc2n = 0, kc3n = 1, kc4n = 0, lcn = 0;
|
|
||||||
int kc1m = 0, kc2m = 0, kc3m = 0, kc4m = 1, lcm = 3;
|
|
||||||
|
|
||||||
char tname[] = "templ442 ";
|
|
||||||
|
|
||||||
#pragma dvm template[AN1][AN2][AN3][AN4] distribute[block][block][block][block]
|
|
||||||
void *A4;
|
|
||||||
#pragma dvm array
|
|
||||||
int (*B4)[BN2][BN3][BN4];
|
|
||||||
#pragma dvm array
|
|
||||||
int (*C4)[CN2][CN3][CN4];
|
|
||||||
|
|
||||||
B4 = malloc(sizeof(int[BN1][BN2][BN3][BN4]));
|
|
||||||
C4 = malloc(sizeof(int[CN1][CN2][CN3][CN4]));
|
|
||||||
#pragma dvm realign(B4[i][j][n][m] with A4[k4i*m+li][k1j*i+lj][k2n*j+ln][k3m*n+lm])
|
|
||||||
#pragma dvm realign(C4[i][j][n][m] with A4[kc1i*i+lci][kc2j*j+lcj][ kc3n*n+lcn][kc4m*m+lcm])
|
|
||||||
|
|
||||||
erri = ER;
|
|
||||||
#pragma dvm actual(erri)
|
|
||||||
|
|
||||||
#pragma dvm region
|
|
||||||
{
|
|
||||||
#pragma dvm parallel([m][n][j][i] on B4[i][j][n][m])
|
|
||||||
for (m = 0; m < BN4; m++)
|
|
||||||
for (n = 0; n < BN3; n++)
|
|
||||||
for (j = 0; j < BN2; j++)
|
|
||||||
for (i = 0; i < BN1; i++)
|
|
||||||
B4[i][j][n][m] = (i*NL/10+j*NL/100+n*NL/1000+m);
|
|
||||||
|
|
||||||
#pragma dvm parallel([m][n][j][i] on C4[i][j][n][m])
|
|
||||||
for (m = 0; m < CN4; m++)
|
|
||||||
for (n = 0; n < CN3; n++)
|
|
||||||
for (j = 0; j < CN2; j++)
|
|
||||||
for (i = 0; i < CN1; i++)
|
|
||||||
C4[i][j][n][m] = (i*NL/10+j*NL/100+n*NL/1000+m);
|
|
||||||
|
|
||||||
#pragma dvm parallel([m][n][j][i] on A4[i][j][n][m]) private(ib, jb, nb, mb, ic, jc, nc, mc, erri)
|
|
||||||
for (m = 0; m < AN4; m++)
|
|
||||||
for (n = 0; n < AN3; n++)
|
|
||||||
for (j = 0; j < AN2; j++)
|
|
||||||
for (i = 0; i < AN1; i++)
|
|
||||||
{
|
|
||||||
if (((i-li) == (((i-li)/k4i) * k4i)) &&
|
|
||||||
((j-lj) == (((j-lj)/k1j) *k1j)) &&
|
|
||||||
((n-ln) == (((n-ln)/k2n) * k2n)) &&
|
|
||||||
((m-lm) == (((m-lm)/k3m) *k3m)) &&
|
|
||||||
(((i-li)/k4i) >= 0) &&
|
|
||||||
(((j-lj)/k1j) >= 0) &&
|
|
||||||
(((n-ln)/k2n) >= 0) &&
|
|
||||||
(((m-lm)/k3m) >= 0) &&
|
|
||||||
(((i-li)/k4i) < BN4) &&
|
|
||||||
(((j-lj)/k1j) < BN1) &&
|
|
||||||
(((n-ln)/k2n) < BN2) &&
|
|
||||||
(((m-lm)/k3m) < BN3))
|
|
||||||
{
|
|
||||||
mb = (i-li)/k4i;
|
|
||||||
ib = (j-lj)/k1j;
|
|
||||||
jb = (n-ln)/k2n;
|
|
||||||
nb = (m-lm)/k3m;
|
|
||||||
if (B4[ib][jb][nb][mb] != (ib*NL/10+jb*NL/100+nb*NL/1000+mb))
|
|
||||||
erri = i*NL/10 + j*NL/100+ n*NL/1000+ m;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
((i-lci) == (((i-lci)/kc1i) * kc1i)) &&
|
|
||||||
((j-lcj) == (((j-lcj)/kc2j) * kc2j)) &&
|
|
||||||
((n-lcn) == (((n-lcn)/kc3n) * kc3n)) &&
|
|
||||||
((m-lcm) == (((m-lcm)/kc4m) *kc4m)) &&
|
|
||||||
(((i-lci)/kc1i) >= 0) &&
|
|
||||||
(((j-lcj)/kc2j) >= 0) &&
|
|
||||||
(((n-lcn)/kc3n) >= 0) &&
|
|
||||||
(((m-lcm)/kc2m) >= 0) &&
|
|
||||||
(((i-lci)/kc1i) < CN1) &&
|
|
||||||
(((j-lcj)/kc2j) < CN2) &&
|
|
||||||
(((n-lcn)/kc3n) < CN3) &&
|
|
||||||
(((m-lcm)/kc2m) < CN2))
|
|
||||||
{
|
|
||||||
ic = (i-lci)/kc1i;
|
|
||||||
jc = (j-lcj)/kc2j;
|
|
||||||
nc = (n-lcn)/kc3n;
|
|
||||||
mc = (m-lcm)/kc4m;
|
|
||||||
if (C4[ic][jc][nc][mc] != (ic*NL/10+jc*NL/100+nc*NL/1000+mc))
|
|
||||||
erri = i*NL/10 + j*NL/100+ n*NL/1000+ m;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma dvm get_actual(erri)
|
|
||||||
|
|
||||||
if (erri == ER)
|
|
||||||
ansyes(tname);
|
|
||||||
else
|
|
||||||
ansno(tname);
|
|
||||||
|
|
||||||
free(B4);
|
|
||||||
free(C4);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansyes(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - complete\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ansno(const char name[])
|
|
||||||
{
|
|
||||||
printf("%s - ***error\n", name);
|
|
||||||
}
|
|
||||||
@@ -1,591 +0,0 @@
|
|||||||
program ACR11
|
|
||||||
|
|
||||||
c TESTING OF THE ACROSS CLAUSE'.
|
|
||||||
c DISTRIBUTED ARRAY A(N) IS TO HAVE DIFFERENT
|
|
||||||
c FLOW-DEP-LENGTH ON BOTH SIDES
|
|
||||||
|
|
||||||
print *,'===START OF ACR11========================'
|
|
||||||
C --------------------------------------------------
|
|
||||||
call acr1101
|
|
||||||
C --------------------------------------------------
|
|
||||||
call acr1102
|
|
||||||
C --------------------------------------------------
|
|
||||||
call acr1103
|
|
||||||
C -------------------------------------------------
|
|
||||||
call acr1104
|
|
||||||
C -------------------------------------------------
|
|
||||||
call acr1105
|
|
||||||
C -------------------------------------------------
|
|
||||||
call acr1106
|
|
||||||
C --------------------------------------------------
|
|
||||||
call acr1107
|
|
||||||
C --------------------------------------------------
|
|
||||||
call acr1108
|
|
||||||
C --------------------------------------------------
|
|
||||||
call acr1109
|
|
||||||
C -------------------------------------------------
|
|
||||||
call acr1110
|
|
||||||
C -------------------------------------------------
|
|
||||||
|
|
||||||
C
|
|
||||||
print *,'=== END OF ACR11 ========================= '
|
|
||||||
end
|
|
||||||
C ---------------------------------------------ACR1101
|
|
||||||
subroutine ACR1101
|
|
||||||
integer,parameter :: N = 8, NL=1000
|
|
||||||
character*7 tname
|
|
||||||
integer,allocatable:: A(:), C(:)
|
|
||||||
integer nloop
|
|
||||||
!dvm$ distribute A(BLOCK)
|
|
||||||
|
|
||||||
tname='ACR1101'
|
|
||||||
allocate (A(N), C(N))
|
|
||||||
nloop=NL
|
|
||||||
|
|
||||||
do iloop=0,2
|
|
||||||
NNL=NL
|
|
||||||
call serial1(C,N,NNL)
|
|
||||||
|
|
||||||
do i=2,N-1
|
|
||||||
C(i) = C(i-1)+C(i+1)
|
|
||||||
enddo
|
|
||||||
!dvm$ actual (nloop, C)
|
|
||||||
!dvm$ region
|
|
||||||
!dvm$ parallel (i) on A(i)
|
|
||||||
do i=1,N
|
|
||||||
A(i) = NL+i
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i),across(A(1:1)),stage(iloop)
|
|
||||||
do i=2,N-1
|
|
||||||
A(i) = A(i-1)+A(i+1)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i), reduction( min( nloop ) )
|
|
||||||
do i=2,N-1
|
|
||||||
if (A(i).ne. C(i)) then
|
|
||||||
nloop=min(nloop,i)
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
!dvm$ end region
|
|
||||||
!dvm$ get_actual (nloop)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
if (nloop .eq.NL) then
|
|
||||||
call ansyes(tname)
|
|
||||||
else
|
|
||||||
call ansno(tname)
|
|
||||||
endif
|
|
||||||
deallocate (A,C)
|
|
||||||
|
|
||||||
end
|
|
||||||
C ---------------------------------------------ACR1102
|
|
||||||
subroutine ACR1102
|
|
||||||
integer,parameter :: N = 16, NL=1000
|
|
||||||
|
|
||||||
character*7 tname
|
|
||||||
integer,allocatable:: A(:),C(:)
|
|
||||||
integer nloop
|
|
||||||
|
|
||||||
!dvm$ distribute A(BLOCK)
|
|
||||||
|
|
||||||
tname='ACR1102'
|
|
||||||
allocate (A(N), C(N))
|
|
||||||
nloop=NL
|
|
||||||
|
|
||||||
do iloop=0,2
|
|
||||||
NNL=NL
|
|
||||||
call serial1(C,N,NNL)
|
|
||||||
do i=1,N-1
|
|
||||||
C(i) = C(i)+C(i+1)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ actual (nloop, C)
|
|
||||||
!dvm$ region
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i)
|
|
||||||
do i=1,N
|
|
||||||
A(i) = NL+i
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i),across(A(0:1)),stage(iloop)
|
|
||||||
do i=1,N-1
|
|
||||||
A(i) = A(i)+A(i+1)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i), reduction( min( nloop ) )
|
|
||||||
do i=2,N-1
|
|
||||||
if (A(i).ne. C(i)) then
|
|
||||||
nloop=min(nloop,i)
|
|
||||||
endif
|
|
||||||
|
|
||||||
enddo
|
|
||||||
!dvm$ end region
|
|
||||||
!dvm$ get_actual (nloop)
|
|
||||||
enddo
|
|
||||||
if (nloop .eq.NL) then
|
|
||||||
call ansyes(tname)
|
|
||||||
else
|
|
||||||
call ansno(tname)
|
|
||||||
endif
|
|
||||||
deallocate (A, C)
|
|
||||||
|
|
||||||
end
|
|
||||||
C -----------------------------------------ACR1103
|
|
||||||
subroutine acr1103
|
|
||||||
integer,parameter :: N = 16, NL=1000
|
|
||||||
|
|
||||||
character*7 tname
|
|
||||||
integer,allocatable:: A(:), C(:)
|
|
||||||
integer nloop
|
|
||||||
|
|
||||||
!dvm$ distribute A(BLOCK)
|
|
||||||
|
|
||||||
tname='ACR1103'
|
|
||||||
allocate (A(N), C(N))
|
|
||||||
nloop=NL
|
|
||||||
|
|
||||||
do iloop=0,2
|
|
||||||
NNL=NL
|
|
||||||
call serial1(C,N,NNL)
|
|
||||||
do i=2,N
|
|
||||||
C(i) = C(i)+ C(i-1)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ actual (nloop, C)
|
|
||||||
!dvm$ region
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i)
|
|
||||||
do i=1,N
|
|
||||||
A(i) = NL+i
|
|
||||||
enddo
|
|
||||||
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i),across(A(1:0)),stage(iloop)
|
|
||||||
do i=2,N
|
|
||||||
A(i) =A(i)+ A(i-1)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i), reduction( min( nloop ) )
|
|
||||||
do i=2,N-1
|
|
||||||
if (A(i).ne. C(i)) then
|
|
||||||
nloop=min(nloop,i)
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
!dvm$ end region
|
|
||||||
!dvm$ get_actual (nloop)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
if (nloop .eq.NL) then
|
|
||||||
call ansyes(tname)
|
|
||||||
else
|
|
||||||
call ansno(tname)
|
|
||||||
endif
|
|
||||||
deallocate (A, C)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
C -------------------------------------------ACR1104
|
|
||||||
|
|
||||||
subroutine ACR1104
|
|
||||||
integer,parameter :: N = 16, NL=1000
|
|
||||||
|
|
||||||
character*7 tname
|
|
||||||
integer,allocatable:: A(:), C(:)
|
|
||||||
integer nloop
|
|
||||||
|
|
||||||
!dvm$ distribute A(BLOCK)
|
|
||||||
!dvm$ shadow A(2:2)
|
|
||||||
|
|
||||||
tname='ACR1104'
|
|
||||||
allocate (A(N), C(N))
|
|
||||||
nloop=NL
|
|
||||||
|
|
||||||
do iloop=0,2
|
|
||||||
NNL=NL
|
|
||||||
call serial1(C,N,NNL)
|
|
||||||
do i=3,N-2
|
|
||||||
C(i) = C(i-1)+C(i+1)+C(i+2)+C(i-2)
|
|
||||||
enddo
|
|
||||||
!dvm$ actual (nloop, C)
|
|
||||||
!dvm$ region
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i)
|
|
||||||
do i=1,N
|
|
||||||
A(i) = NL+i
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i),across(A(2:2)),stage(iloop)
|
|
||||||
do i=3,N-2
|
|
||||||
A(i) = A(i-1)+A(i+1)+A(i+2)+A(i-2)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i), reduction( min( nloop ) )
|
|
||||||
do i=3,N-2
|
|
||||||
if (A(i).ne. C(i)) then
|
|
||||||
nloop=min(nloop,i)
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
!dvm$ end region
|
|
||||||
!dvm$ get_actual (nloop)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
if (nloop .eq.NL) then
|
|
||||||
call ansyes(tname)
|
|
||||||
else
|
|
||||||
call ansno(tname)
|
|
||||||
endif
|
|
||||||
deallocate (A, C)
|
|
||||||
|
|
||||||
end
|
|
||||||
C -------------------------------------------ACR1105
|
|
||||||
|
|
||||||
subroutine ACR1105
|
|
||||||
integer,parameter :: N = 16, NL=1000
|
|
||||||
|
|
||||||
character*7 tname
|
|
||||||
integer,allocatable:: A(:),C(:)
|
|
||||||
integer nloop
|
|
||||||
|
|
||||||
!dvm$ distribute A(BLOCK)
|
|
||||||
!dvm$ shadow A(2:2)
|
|
||||||
|
|
||||||
tname='ACR1105'
|
|
||||||
allocate (A(N), C(N))
|
|
||||||
nloop=NL
|
|
||||||
|
|
||||||
do iloop=0,2
|
|
||||||
NNL=NL
|
|
||||||
call serial1(C,N,NNL)
|
|
||||||
do i=2,N-2
|
|
||||||
C(i) = C(i+1)+C(i+2)
|
|
||||||
enddo
|
|
||||||
!dvm$ actual (nloop, C)
|
|
||||||
!dvm$ region
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i)
|
|
||||||
do i=1,N
|
|
||||||
A(i) = NL+i
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i),across(A(0:2)),stage(iloop)
|
|
||||||
do i=2,N-2
|
|
||||||
A(i) = A(i+1)+A(i+2)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i), reduction( min( nloop ) )
|
|
||||||
do i=2,N-2
|
|
||||||
if (A(i).ne. C(i)) then
|
|
||||||
nloop=min(nloop,i)
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
!dvm$ end region
|
|
||||||
!dvm$ get_actual (nloop)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
if (nloop .eq.NL) then
|
|
||||||
call ansyes(tname)
|
|
||||||
|
|
||||||
else
|
|
||||||
call ansno(tname)
|
|
||||||
endif
|
|
||||||
deallocate (A, C)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
C -------------------------------------------ACR1106
|
|
||||||
|
|
||||||
subroutine ACR1106
|
|
||||||
integer,parameter :: N = 16, NL=1000
|
|
||||||
character*7 tname
|
|
||||||
integer,allocatable:: A(:), C(:)
|
|
||||||
integer nloop
|
|
||||||
!dvm$ distribute A(BLOCK)
|
|
||||||
!dvm$ shadow A(2:2)
|
|
||||||
|
|
||||||
tname='ACR1106'
|
|
||||||
allocate (A(N), C(N))
|
|
||||||
nloop=NL
|
|
||||||
|
|
||||||
do iloop=0,2
|
|
||||||
NNL=NL
|
|
||||||
call serial1(C,N,NNL)
|
|
||||||
do i=3,N
|
|
||||||
C(i) = C(i-1)+C(i-2)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ actual (nloop, C)
|
|
||||||
!dvm$ region
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i)
|
|
||||||
do i=1,N
|
|
||||||
A(i) = NL+i
|
|
||||||
enddo
|
|
||||||
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i),across(A(2:0)),stage(iloop)
|
|
||||||
do i=3,N
|
|
||||||
A(i) = A(i-1)+A(i-2)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i), reduction( min( nloop ) )
|
|
||||||
do i=3,N
|
|
||||||
if (A(i).ne. C(i)) then
|
|
||||||
nloop=min(nloop,i)
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
!dvm$ end region
|
|
||||||
!dvm$ get_actual (nloop)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
if (nloop .eq.NL) then
|
|
||||||
call ansyes(tname)
|
|
||||||
else
|
|
||||||
call ansno(tname)
|
|
||||||
endif
|
|
||||||
deallocate (A, C)
|
|
||||||
end
|
|
||||||
|
|
||||||
C -------------------------------------------ACR1107
|
|
||||||
|
|
||||||
subroutine acr1107
|
|
||||||
integer,parameter :: N = 16, NL=1000
|
|
||||||
|
|
||||||
character*7 tname
|
|
||||||
integer,allocatable:: A(:), C(:)
|
|
||||||
integer nloop
|
|
||||||
|
|
||||||
!dvm$ distribute A(BLOCK)
|
|
||||||
!dvm$ shadow A(3:3)
|
|
||||||
|
|
||||||
tname='ACR1107'
|
|
||||||
allocate (A(N), C(N))
|
|
||||||
nloop=NL
|
|
||||||
|
|
||||||
do iloop=0,2
|
|
||||||
NNL=NL
|
|
||||||
call serial1(C,N,NNL)
|
|
||||||
do i=4,N-3
|
|
||||||
C(i) = C(i-1)+C(i+1)+C(i+2)+C(i-2)+C(i-3)+C(i+3)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ actual (nloop, C)
|
|
||||||
!dvm$ region
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i)
|
|
||||||
do i=1,N
|
|
||||||
A(i) = NL+i
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i),across(A(3:3)),stage(iloop)
|
|
||||||
do i=4,N-3
|
|
||||||
A(i) = A(i-1)+A(i+1)+A(i+2)+A(i-2)+A(i-3)+A(i+3)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i), reduction( min( nloop ) )
|
|
||||||
do i=4,N-3
|
|
||||||
if (A(i).ne. C(i)) then
|
|
||||||
nloop=min(nloop,i)
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
!dvm$ end region
|
|
||||||
!dvm$ get_actual (nloop)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
if (nloop .eq.NL) then
|
|
||||||
call ansyes(tname)
|
|
||||||
else
|
|
||||||
call ansno(tname)
|
|
||||||
endif
|
|
||||||
deallocate (A, C)
|
|
||||||
|
|
||||||
end
|
|
||||||
C -------------------------------------------ACR1108
|
|
||||||
|
|
||||||
subroutine acr1108
|
|
||||||
integer,parameter :: N = 24, NL=1000
|
|
||||||
|
|
||||||
character*7 tname
|
|
||||||
integer,allocatable:: A(:), C(:)
|
|
||||||
integer nloop
|
|
||||||
|
|
||||||
!dvm$ distribute A(BLOCK)
|
|
||||||
!dvm$ shadow A(3:3)
|
|
||||||
|
|
||||||
tname='ACR1108'
|
|
||||||
allocate (A(N), C(N))
|
|
||||||
nloop=NL
|
|
||||||
|
|
||||||
do iloop=0,2
|
|
||||||
NNL=NL
|
|
||||||
call serial1(C,N,NNL)
|
|
||||||
do i=2,N-3
|
|
||||||
C(i) = C(i+1)+C(i+2)+C(i+3)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ actual (nloop, C)
|
|
||||||
!dvm$ region
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i)
|
|
||||||
do i=1,N
|
|
||||||
A(i) = NL+i
|
|
||||||
enddo
|
|
||||||
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i),across(A(0:3)),stage(iloop)
|
|
||||||
do i=2,N-3
|
|
||||||
A(i) = A(i+1)+A(i+2)+A(i+3)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i), reduction( min( nloop ) )
|
|
||||||
do i=2,N-3
|
|
||||||
if (A(i).ne. C(i)) then
|
|
||||||
nloop=min(nloop,i)
|
|
||||||
endif
|
|
||||||
|
|
||||||
enddo
|
|
||||||
!dvm$ end region
|
|
||||||
!dvm$ get_actual (nloop)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
if (nloop .eq.NL) then
|
|
||||||
call ansyes(tname)
|
|
||||||
else
|
|
||||||
call ansno(tname)
|
|
||||||
endif
|
|
||||||
deallocate (A, C)
|
|
||||||
|
|
||||||
end
|
|
||||||
C -------------------------------------------ACR1109
|
|
||||||
|
|
||||||
subroutine acr1109
|
|
||||||
integer,parameter :: N = 24, NL=1000
|
|
||||||
|
|
||||||
character*7 tname
|
|
||||||
integer,allocatable:: A(:), C(:)
|
|
||||||
integer nloop
|
|
||||||
|
|
||||||
!dvm$ distribute A(BLOCK)
|
|
||||||
!dvm$ shadow A(3:3)
|
|
||||||
|
|
||||||
tname='ACR1109'
|
|
||||||
allocate (A(N), C(N))
|
|
||||||
nloop=NL
|
|
||||||
|
|
||||||
do iloop=0,2
|
|
||||||
NNL=NL
|
|
||||||
call serial1(C,N,NNL)
|
|
||||||
|
|
||||||
do i=4,N
|
|
||||||
C(i) = C(i-1)+C(i-2)+C(i-3)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ actual (nloop, C)
|
|
||||||
!dvm$ region
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i)
|
|
||||||
do i=1,N
|
|
||||||
A(i) = NL+i
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i),across(A(3:0)),stage(iloop)
|
|
||||||
do i=4,N
|
|
||||||
A(i) = A(i-1)+A(i-2)+A(i-3)
|
|
||||||
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i), reduction( min( nloop ) )
|
|
||||||
do i=4,N
|
|
||||||
if (A(i).ne. C(i)) then
|
|
||||||
nloop=min(nloop,i)
|
|
||||||
endif
|
|
||||||
|
|
||||||
enddo
|
|
||||||
!dvm$ end region
|
|
||||||
!dvm$ get_actual (nloop)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
if (nloop .eq.NL) then
|
|
||||||
call ansyes(tname)
|
|
||||||
else
|
|
||||||
call ansno(tname)
|
|
||||||
endif
|
|
||||||
deallocate (A, C)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
C --------------------------------------------acr1110
|
|
||||||
|
|
||||||
subroutine acr1110
|
|
||||||
integer,parameter :: N = 60, NL=1000
|
|
||||||
character*7 tname
|
|
||||||
integer,allocatable:: A(:), C(:)
|
|
||||||
integer nloop
|
|
||||||
|
|
||||||
!dvm$ distribute A(BLOCK)
|
|
||||||
!dvm$ shadow A(11:11)
|
|
||||||
|
|
||||||
tname='ACR1110'
|
|
||||||
allocate (A(N), C(N))
|
|
||||||
nloop=NL
|
|
||||||
|
|
||||||
do iloop=0,2
|
|
||||||
NNL=NL
|
|
||||||
call serial1(C,N,NNL)
|
|
||||||
do i=12,N-11
|
|
||||||
C(i) = C(i-9)+C(i+9)+C(i+10)+C(i-10)+C(i-11)+C(i+11)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ actual (nloop, C)
|
|
||||||
!dvm$ region
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i)
|
|
||||||
do i=1,N
|
|
||||||
A(i) = NL+i
|
|
||||||
enddo
|
|
||||||
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i),across(A(11:11)),stage(iloop)
|
|
||||||
do i=12,N-11
|
|
||||||
A(i) = A(i-9)+A(i+9)+A(i+10)+A(i-10)+A(i-11)+A(i+11)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
!dvm$ parallel (i) on A(i), reduction( min( nloop ) )
|
|
||||||
do i=12,N-11
|
|
||||||
if (A(i).ne. C(i)) then
|
|
||||||
nloop=min(nloop,i)
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
!dvm$ end region
|
|
||||||
!dvm$ get_actual (nloop)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
if (nloop .eq.NL) then
|
|
||||||
call ansyes(tname)
|
|
||||||
else
|
|
||||||
call ansno(tname)
|
|
||||||
endif
|
|
||||||
deallocate (A, C)
|
|
||||||
|
|
||||||
end
|
|
||||||
C -----------------------------------------------
|
|
||||||
subroutine serial1(AR,N,NL)
|
|
||||||
integer:: AR(N)
|
|
||||||
integer NL
|
|
||||||
do i=1,N
|
|
||||||
AR(i) = NL+i
|
|
||||||
enddo
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
subroutine ansyes(name)
|
|
||||||
character*7 name
|
|
||||||
print *,name,' - complete'
|
|
||||||
end
|
|
||||||
subroutine ansno(name)
|
|
||||||
character*7 name
|
|
||||||
print *,name,' - ***error'
|
|
||||||
end
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user