mirror of
https://github.com/autc04/Retro68.git
synced 2024-08-19 03:29:10 +00:00
269 lines
5.0 KiB
C++
269 lines
5.0 KiB
C++
|
int a[256];
|
||
|
|
||
|
__attribute__((noinline, noclone)) int
|
||
|
f1 (int i)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: 4)
|
||
|
for (int j = 16; j < 64; j++)
|
||
|
{
|
||
|
a[i] = j;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
__attribute__((noinline, noclone)) short int &
|
||
|
f2 (short int &i, char k)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k + 1)
|
||
|
for (long j = 16; j < 64; j++)
|
||
|
{
|
||
|
a[i] = j;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
__attribute__((noinline, noclone)) T
|
||
|
f3 (T i, T k)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k)
|
||
|
for (short j = 16; j < 64; j++)
|
||
|
{
|
||
|
a[i] = j;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
__attribute__((noinline, noclone)) T &
|
||
|
f4 (T &i)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: 4) schedule(static, 3)
|
||
|
for (int j = 16; j < 64; j++)
|
||
|
{
|
||
|
a[i] = j;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
__attribute__((noinline, noclone)) short int
|
||
|
f5 (short int i, char &k)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k + 1) schedule(static, 5)
|
||
|
for (long j = 16; j < 64; j++)
|
||
|
{
|
||
|
a[i] = j;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
template <int N>
|
||
|
__attribute__((noinline, noclone)) long long int
|
||
|
f6 (long long int i, long long int k)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k) schedule(static, 7)
|
||
|
for (short j = 16; j < 64; j++)
|
||
|
{
|
||
|
a[i] = j;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
__attribute__((noinline, noclone)) int
|
||
|
f7 (int &i)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: 4) schedule(dynamic, 3)
|
||
|
for (int j = 16; j < 64; j++)
|
||
|
{
|
||
|
a[i] = j;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
__attribute__((noinline, noclone)) short int
|
||
|
f8 (short int i, char k)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k + 1) schedule(dynamic, 5)
|
||
|
for (long j = 16; j < 64; j++)
|
||
|
{
|
||
|
a[i] = j;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
__attribute__((noinline, noclone)) long long int
|
||
|
f9 (long long int i, long long int k)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k) schedule(dynamic, 7)
|
||
|
for (short j = 16; j < 64; j++)
|
||
|
{
|
||
|
a[i] = j;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
__attribute__((noinline, noclone)) T &
|
||
|
f10 (T &i, long &step)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: 4)
|
||
|
for (int j = 16; j < 112; j += step)
|
||
|
{
|
||
|
a[i] = j / 2 + 8;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
__attribute__((noinline, noclone)) short int
|
||
|
f11 (short int i, char k, char step)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k + 1)
|
||
|
for (long j = 16; j < 112; j += step)
|
||
|
{
|
||
|
a[i] = j / 2 + 8;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
__attribute__((noinline, noclone)) long long int
|
||
|
f12 (long long int i, long long int k, int step)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k)
|
||
|
for (short j = 16; j < 112; j += step)
|
||
|
{
|
||
|
a[i] = j / 2 + 8;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
__attribute__((noinline, noclone)) int
|
||
|
f13 (int &i, long long int step)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: 4) schedule(static, 3)
|
||
|
for (int j = 16; j < 112; j += step)
|
||
|
{
|
||
|
a[i] = j / 2 + 8;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
__attribute__((noinline, noclone)) short int
|
||
|
f14 (short int &i, char &k, int &step)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k + 1) schedule(static, 5)
|
||
|
for (long j = 16; j < 112; j += step)
|
||
|
{
|
||
|
a[i] = j / 2 + 8;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
template <int N>
|
||
|
__attribute__((noinline, noclone)) long long int
|
||
|
f15 (long long int i, long long int k, long int step)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k) schedule(static, 7)
|
||
|
for (short j = 16; j < 112; j += step)
|
||
|
{
|
||
|
a[i] = j / 2 + 8;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
__attribute__((noinline, noclone)) int
|
||
|
f16 (int i, long long int step)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: 4) schedule(dynamic, 3)
|
||
|
for (int j = 16; j < 112; j += step)
|
||
|
{
|
||
|
a[i] = j / 2 + 8;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
__attribute__((noinline, noclone)) short int
|
||
|
f17 (short int i, char k, int step)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k + 1) schedule(dynamic, 5)
|
||
|
for (long j = 16; j < 112; j += step)
|
||
|
{
|
||
|
a[i] = j / 2 + 8;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
__attribute__((noinline, noclone)) T
|
||
|
f18 (T i, T k, long int step)
|
||
|
{
|
||
|
#pragma omp parallel for linear (i: k) schedule(dynamic, 7)
|
||
|
for (short j = 16; j < 112; j += step)
|
||
|
{
|
||
|
a[i] = j / 2 + 8;
|
||
|
i += 4;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
int
|
||
|
main ()
|
||
|
{
|
||
|
#define TEST(x) \
|
||
|
if (x != 8 + 48 * 4) \
|
||
|
__builtin_abort (); \
|
||
|
for (int i = 0; i < 256; i++) \
|
||
|
if (a[i] != (((i & 3) == 0 && i >= 8 \
|
||
|
&& i < 8 + 48 * 4) \
|
||
|
? ((i - 8) / 4) + 16 : 0)) \
|
||
|
__builtin_abort (); \
|
||
|
__builtin_memset (a, 0, sizeof (a))
|
||
|
TEST (f1 (8));
|
||
|
short int vs = 8;
|
||
|
TEST (f2 (vs, 3));
|
||
|
TEST (f3 (8LL, 4LL));
|
||
|
int vi = 8;
|
||
|
TEST (f4 (vi));
|
||
|
char vk = 3;
|
||
|
TEST (f5 (8, vk));
|
||
|
TEST (f6<7> (8LL, 4LL));
|
||
|
vi = 8;
|
||
|
TEST (f7 (vi));
|
||
|
TEST (f8 (8, 3));
|
||
|
TEST (f9 (8LL, 4LL));
|
||
|
vi = 8;
|
||
|
long vl = 2;
|
||
|
TEST (f10 (vi, vl));
|
||
|
TEST (f11 (8, 3, 2));
|
||
|
TEST (f12 (8LL, 4LL, 2));
|
||
|
vi = 8;
|
||
|
TEST (f13 (vi, 2));
|
||
|
vs = 8;
|
||
|
vk = 3;
|
||
|
vi = 2;
|
||
|
TEST (f14 (vs, vk, vi));
|
||
|
TEST (f15<9> (8LL, 4LL, 2));
|
||
|
TEST (f16 (8, 2));
|
||
|
TEST (f17 (8, 3, 2));
|
||
|
long long int vll1 = 8LL;
|
||
|
long long int vll2 = 4LL;
|
||
|
TEST (f18<long long int &> (vll1, vll2, 2));
|
||
|
return 0;
|
||
|
}
|