Beispiel #1
0
        internal static void Alloc(MemoryBuffer buffer)
        {
            Debug.Assert(buffer.pointer == 0);

            switch (buffer.memorySpace)
            {
            case MemorySpace.Null:
                throw new ArgumentNullException();

            case MemorySpace.Host:
                MemoryManagerApi.AllocHost(buffer);
                break;

            case MemorySpace.Device:
                MemoryManagerApi.Alloc(buffer);
                break;

            default:
                throw new NotImplementedException();
            }
        }
Beispiel #2
0
        public virtual T[] GetRaw <T>() where T : struct, IEquatable <T>, IFormattable
        {
            Debug.Assert(Buffer.pointer != 0);

            // prepare a buffer host-side
            MemoryBuffer hostBuffer = new MemoryBuffer(0, (uint)Buffer.size, MemorySpace.Host, mathDomain);

            MemoryManagerApi.AllocHost(hostBuffer);
            MemoryManagerApi.AutoCopy(hostBuffer, Buffer);

            object ret = null;

            switch (mathDomain)
            {
            case MathDomain.Null:
                throw new ArgumentNullException();

            case MathDomain.Int:
                ret = new int[hostBuffer.size];
                Marshal.Copy((IntPtr)hostBuffer.pointer, (int[])ret, 0, (int)hostBuffer.size);
                break;

            case MathDomain.Float:
                ret = new float[hostBuffer.size];
                Marshal.Copy((IntPtr)hostBuffer.pointer, (float[])ret, 0, (int)hostBuffer.size);
                break;

            case MathDomain.Double:
                ret = new double[hostBuffer.size];
                Marshal.Copy((IntPtr)hostBuffer.pointer, (double[])ret, 0, (int)hostBuffer.size);
                break;

            default:
                throw new NotImplementedException();
            }


            return((T[])Convert.ChangeType(ret, typeof(T[])));
        }