// Kiwi Scientific Acceleration: KiwiC compiler test/demo.
using System;
using System.Text;
using KiwiSystem;
class LoopClassic
{
public static int associative_reduction_example(int starting)
{
int vr = 0;
for (int i=0;i<5;i++)
{
int vx = (i+starting)*(i+3)*(i+5);
vr ^= ((vx & 128)>0 ? 1:0);
}
return vr;
}
public static int loop_carried_example(int seed)
{
int vp = seed;
for (int i=0;i<5;i++)
{
vp = vp * 31241/121;
}
return vp;
}
static int [] foos = new int [10];
static int ipos = 0;
public static int loop_forwarding_example(int newdata)
{
foos[ipos ++] = newdata;
ipos %= foos.Length;
int sum = 0;
for (int i=0;i<foos.Length-1;i++)
{
sum += foos[i]^foos[i+1];
}
return sum;
}
public static int data_dependent_controlflow_example(int seed)
{
int vr = 0;
int i;
for (i=0;i<20;i++)
{
vr += i*i*seed;
if (vr > 1111) break;
}
return i;
}
}
class bench
{
const int limit = 100000000; // Some stopping value
[Kiwi.OutputBitPort("done")] static bool done = false;
[Kiwi.HardwareEntryPoint()]
public static void Main()
{
Console.WriteLine("LoopClassic Demo Start");
for (int jojo=3;jojo<12;jojo += 3)
{
Kiwi.NoUnroll();
int result;
//result = LoopClassic.loop_carried_example(jojo);
//result = LoopClassic.data_dependent_controlflow_example(jojo);
result = LoopClassic.loop_forwarding_example(jojo);
//result = LoopClassic.associative_reduction_example(jojo);
Console.WriteLine(" jojo={0} test result={1}", jojo, result);
}
Console.WriteLine(" Test LoopClassic finished.");
done = true;
}
}
TBC ...
December 2016. UP.