Esempio n. 1
0
        public void GroupedIndex2EntryPoint(int length)
        {
            var end = (int)Math.Sqrt(Accelerator.MaxNumThreadsPerGroup);

            for (int i = 1; i <= end; i <<= 1)
            {
                var stride = new Index2D(i, i);
                var extent = new KernelConfig(
                    new Index2D(length, length),
                    stride);
                using var buffer = Accelerator.Allocate1D <int>(extent.Size);
                buffer.MemSetToZero(Accelerator.DefaultStream);
                Execute(extent, buffer.View, stride, extent.GridDim.XY);

                var expected = new int[extent.Size];
                for (int j = 0; j < length * length; ++j)
                {
                    var gridIdx = Index2D.ReconstructIndex(j, extent.GridDim.XY);
                    for (int k = 0; k < i * i; ++k)
                    {
                        var groupIdx = Index2D.ReconstructIndex(k, extent.GroupDim.XY);
                        var idx      = (gridIdx * stride + groupIdx).ComputeLinearIndex(
                            extent.GridDim.XY);
                        expected[idx] = idx;
                    }
                }

                Verify(buffer.View, expected);
            }
        }
Esempio n. 2
0
                    5, 6_000)] // Make sure linearIndices > int.MaxValue work.
        public void ReconstructIndex2(
            long linearIndex, int dimX, int dimY,
            int expectedX, int expectedY)
        {
            var index = Index2D.ReconstructIndex(linearIndex, new Index2D(dimX, dimY));

            Assert.Equal(expectedX, index.X);
            Assert.Equal(expectedY, index.Y);
        }
Esempio n. 3
0
 private static Index2D Reconstruct2DIndex(Index2D totalDim, int linearIndex) =>
 totalDim.ReconstructIndex(linearIndex);