// 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.