I did some tests, and here is the code I tested:
delegate(float[] inout)
{
float[][] tempbuf = new float[2][];
int length = inout.Length / 2;
for (int c = 0; c < 2; c++)
{
tempbuf[c] = new float[length];
for (int i = 0, offset = c; i < tempbuf[c].Length; i++, offset += 2)
tempbuf[c][i] = inout[offset];
}
}
delegate(float[] inout)
{
float[][] tempbuf = new float[2][];
int length = inout.Length / 2;
for (int c = 0; c < 2; c++)
tempbuf[c] = new float[length];
for (int ix = 0, i = 0; ix < length; ix++)
{
tempbuf[0][ix] = inout[i++];
tempbuf[1][ix] = inout[i++];
}
}
delegate(float[] inout)
{
unsafe
{
float[][] tempbuf = new float[2][];
int length = inout.Length / 2;
fixed (float* buffer = inout)
for (int c = 0; c < 2; c++)
{
tempbuf[c] = new float[length];
float* offset = buffer + c;
fixed (float* buffer2 = tempbuf[c])
{
float* p = buffer2;
for (int i = 0; i < length; i++, offset += 2)
*p++ = *offset;
}
}
}
}
delegate(float[] inout)
{
float[][] tempbuf = new float[2][];
int length = inout.Length / 2;
for (int c = 0; c < 2; c++)
{
float[] buf = tempbuf[c] = new float[length];
for (int i = 0, offset = c; i < buf.Length; i++, offset += 2)
buf[i] = inout[offset];
}
}
and results: (buffer size = 2 ^ 17, number of iterations, dedicated to the test = 200)
Average for test
Average for test
Average for test
Average for test
Average for test
Average for test
Average for test
Average for test
Average for test
Average for test
Average for test
Average for test
. , , , , CLS , jagged . , - .
:
, .
:
delegate(float[] inout)
{
float[][] tempbuf = new float[2][];
int length = inout.Length / 2;
float[] tempbuf0 = tempbuf[0] = new float[length];
float[] tempbuf1 = tempbuf[1] = new float[length];
for (int ix = 0, i = 0; ix < length; ix++)
{
tempbuf0[ix] = inout[i++];
tempbuf1[ix] = inout[i++];
}
}
№ 4 1%. №4 - , .
jerryjvl, , CLS , (& offset < inout.Length) ...
2:
IDE, :
2^17 items, repeated 200 times
******************************************
Average for test
Average for test
Average for test
Average for test
Average for test
2^17 items, repeated 200 times
******************************************
Average for test
Average for test
Average for test
Average for test
Average for test
2^18 items, repeated 200 times
******************************************
Average for test
Average for test
Average for test
Average for test
Average for test
2^18 items, repeated 200 times
******************************************
Average for test
Average for test
Average for test
Average for test
Average for test
Test
Test
Test
Test
Test
, . - 10% . , (i < buf.Length) , (offset < inout.Length), (inout [offset]), .