Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
8 views11 pages

OpenAcc Assignment Questions

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views11 pages

OpenAcc Assignment Questions

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 11

Fill in the blanks by using appropriate OpenACC pragmas

1. MatrixMultiply.c

#include<stdio.h>
#define N 2500
int main()
{
int i;
int j;
int k;
double a[N][N];
double b[N][N];
double c[N][N];

for (i = 0; i <= N-1; i += 1) {


for (j = 0; j <= N-1; j += 1) {
a[i][j] = (i + 1);
}
}

for (i = 0; i <= N-1; i += 1) {


for (j = 0; j <= N-1; j += 1) {
b[i][j] = (j + 1);
}
}
for (i = 0; i <= N-1; i += 1) {
for (j = 0; j <= N-1; j += 1) {
c[i][j] = 0;
}
}

for (i = 0; i <= N-1; i += 1) {


for (j = 0; j <= N-1; j += 1) {
for (k = 0; k <= N-1; k += 1) {
c[i][j] = c[i][j] + a[i][k] * b[k][j];
}
}
}
printf("c[0][0]=%lf\n",c[0][0]);
printf("c[%d][%d]=%lf\n",N-1,N-11,c[N-1][N-1]);
return 0;
}
2. 3mm.c

//3 Matrix Multiplications (E=A.B; F=C.D; G=E.F)


#include<stdio.h>
#define N 500
int main()
{
int i;
int j;
int k;
double a[N][N];
double b[N][N];
double c[N][N];
double d[N][N];
double e[N][N];
double f[N][N];
double result[N][N];
//Array Initialization
for (i = 0; i <= N-1; i += 1) {
for (j = 0; j <= N-1; j += 1) {
a[i][j] = ((double )(0.1 * i + j));
b[i][j] = ((double )(0.2 * j + i));
c[i][j] = ((double )(0.3 * i + j));
d[i][j] = ((double )(0.4 * j + i));
e[i][j] = ((double )(0.5 * i + j));
f[i][j] = ((double )(0.6 * j + i));
result[i][j] = 0.0;
printf("");
}
}
//result = a.b

for (i = 0; i <= N-1; i += 1) {


for (j = 0; j <= N-1; j += 1) {
for (k = 0; k <= N-1; k += 1) {
result[i][j] = result[i][j] + a[i][k] * b[k][j];
}
}
}
//print a.b
printf("A[0][0]=%lf\n",result[0][0]);
printf("A[%d][%d]=%lf\n",N-1,N-1,result[N-1][N-1]);
#if 0
#endif
#if 1
//result = c.d

for (i = 0; i <= N-1; i += 1) {


for (j = 0; j <= N-1; j += 1) {
for (k = 0; k <= N-1; k += 1) {
result[i][j] = result[i][j] + c[i][k] * d[k][j];
}
}
}
//print c.d
printf("B[0][0]=%lf\n",result[0][0]);
printf("B[%d][%d]=%lf\n",N-1,N-1,result[N-1][N-1]);
#if 0
#endif
//result = e.f

for (i = 0; i <= N-1; i += 1) {


for (j = 0; j <= N-1; j += 1) {
for (k = 0; k <= N-1; k += 1) {
result[i][j] = result[i][j] + e[i][k] * f[k][j];
}
}
}
//print e.f
printf("C[0][0]=%lf\n",result[0][0]);
printf("C[%d][%d]=%lf\n",N-1,N-1,result[N-1][N-1]);
#endif
#if 0
#endif
return 0;
}
3. MonteCarloPi.c

#include <stdio.h>
#include <time.h>
#define num_steps 1000000

int main()
{
int i;
double step;
double pi;
double x;
double sum = 0.0;
step = 1.0 / ((double )num_steps);

for (i = 0; i <= num_steps; i += 1) {


x = (i + 0.5) * step;
sum = sum + 4.0 / (1.0 + x * x);
}
pi = step * sum;
printf("pi = %f\n",pi);
}
4. VectorArithmetic.c

//C program to implement Vector Arithmetic


#include <stdio.h>
#define N 1300
int main()
{
double A[N];
double B[N];
double C[N];
double D[N];
double E[N];
int i = 0;
//Array initialization

for (i = 0; i <= N-1; i += 1) {


A[i] = ((double )i);
B[i] = ((double )(i + 1));
}
//C=A+B

for (i = 0; i <= N-1; i += 1) {


C[i] = A[i] + B[i];
}

//Verify result
for (i = 0; i <= N-1; i += 1) {
if (C[i] != A[i] + B[i]) {
printf("Add : Something didn't work correctly!\n");
break;
}
}
if (i == N) {
printf("Add : Everything seems to work fine! \n");
}
//D=A-B

for (i = 0; i <= N-1; i += 1) {


D[i] = A[i] - B[i];
}
//Verify result
for (i = 0; i <= N-1; i += 1) {
if (D[i] != A[i] - B[i]) {
printf("Sub : Something didn't work correctly!\n");
break;
}
}
if (i == N) {
printf("Sub : Everything seems to work fine! \n");
}
//E=A*B
for (i = 0; i <= N-1; i += 1) {
E[i] = A[i] * B[i];
}
//Verify result
for (i = 0; i <= N-1; i += 1) {
if (E[i] != A[i] * B[i]) {
printf("Mult : Something didn't work correctly!\n");
break;
}
}
if (i == N) {
printf("Mult : Everything seems to work fine! \n");
}
return 0;
}
5. VectorRev.c

#include<stdio.h>
#define SIZE 550000
int main()
{
int A[SIZE];
int B[SIZE];
int i;

for (i = 0; i <= SIZE-1; i += 1) {


A[i] = 2 * (i + 1);
}

for (i = 0; i <= SIZE-1; i += 1) {


B[SIZE- i - 1] = A[i];
}
/*
printf("\nInput Vector :\n");
for (i = 0; i <SIZE; i++)
{
printf("%d ",A[i]);
}
printf("\n\nReversed vector :\n");
for (i = 0; i <SIZE; i++)
{
printf("%d ",B[i]);
}
*/
printf("B[0]=%d\n",B[0]);
printf("B[%d]=%d\n",SIZE-1,B[SIZE-1]);
printf("\n");
return 0;
}

You might also like