Example #1
0
        static public void For(Accelerator_View view, Tiled_Extent extent, _Kernel_tiled_type _kernel)
        {
            // Compile and link any "to do" work before any DLL loading.
            builder.Make();

            Structure structure = Analysis.Singleton().FindAllTargets(_kernel);

            // Get corresponding Campy code for C# kernel.
            Type thunk = GetThunk(_kernel, extent, structure);

            // Create thunk object.
            object obj = Activator.CreateInstance(thunk);

            // Set fields of thunk based on lambda.
            CopyFieldsFromHostToStaging(_kernel, structure, ref obj);

            // Set extent.
            CopyExtentToStaging(extent, ref obj);

            // Set extent.
            CopyViewToStaging(view, ref obj);

            // Get address of thunk method.
            SR.MethodInfo mi2 = thunk.GetMethod(Campy.Utils.Utility.NormalizeSystemReflectionName(_kernel.Method.Name));

            // Call thunk method.
            mi2.Invoke(obj, new object[] { });
        }
Example #2
0
        private static void CopyExtentToStaging(Tiled_Extent extent, ref object staging_object)
        {
            Type s = staging_object.GetType();

            SR.FieldInfo[] sfi = s.GetFields();

            bool found = false;

            foreach (SR.FieldInfo field in sfi)
            {
                if (field.Name.Equals("extent"))
                {
                    if (found)
                    {
                        throw new Exception("CopyExtentToStaging encountered an internal error--found duplicate extent field in managed object.");
                    }
                    found = true;
                    field.SetValue(staging_object, extent);
                }
            }
            if (!found)
            {
                throw new Exception("CopyExtentToStaging encountered an internal error--did not find extent field in managed object.");
            }
        }
Example #3
0
        static public void For(Tiled_Extent extent, _Kernel_tiled_type _kernel)
        {
            Accelerator_View view = new Accelerator_View();

            For(view, extent, _kernel);
        }