Skip to content

Commit a9782b8

Browse files
committed
All math functions now use linear tight loop
1 parent fe2a452 commit a9782b8

37 files changed

Lines changed: 1228 additions & 1232 deletions

src/NumSharp.Core/Backends/Default/Indexing/Default.NonZero.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,14 +273,14 @@ private static unsafe NDArray<int>[] nonzeros<T>(NDArray<T> x) where T : unmanag
273273
addresses[i] = (int*)ret[i].Address;
274274

275275
//extract coordinates
276-
Parallel.For(0, len, i =>
276+
for (int i = 0; i < len; i++)
277277
{
278278
var coords = nonzeroCoords[i];
279279
for (int axis = 0; axis < ndim; axis++)
280280
{
281281
addresses[axis][i] = coords[axis];
282282
}
283-
});
283+
};
284284

285285
return ret;
286286
}

src/NumSharp.Core/Backends/Default/Math/BLAS/Default.MatMul.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ public override NDArray Matmul(NDArray lhs, NDArray rhs)
3838
var incr = new ValueCoordinatesIncrementor(ref iterShape);
3939
var index = incr.Index;
4040

41-
//TODO! we need to create IEnumeable<int> on ValueCoordinatesIncrementor so we can do something like this:
42-
//TODO! Parallel.ForEach(incr, i => MultiplyMatrix(l[index], r[index], ret[index]));
4341
for (int i = 0; i < len; i++, incr.Next())
4442
{
4543
MultiplyMatrix(l[index], r[index], ret[index]);

src/NumSharp.Core/Backends/Default/Math/Default.ACos.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ public override NDArray ACos(in NDArray nd, NPTypeCode? typeCode = null)
2727
case NPTypeCode.#1:
2828
{
2929
var out_addr = (#2*)@out.Address;
30-
Parallel.For(0, len, i => out_addr[i] = Converts.To#1(Math.Acos(out_addr[i])));
30+
for (int i = 0; i < len; i++) out_addr[i] = Converts.To#1(Math.Acos(out_addr[i]));
3131
return @out;
3232
}
3333
%
3434
case NPTypeCode.Decimal:
3535
{
3636
var out_addr = (decimal*)@out.Address;
37-
Parallel.For(0, len, i => out_addr[i] = (decimal)(Math.Acos(Converts.ToDouble(out_addr[i]))));
37+
for (int i = 0; i < len; i++) out_addr[i] = (decimal)(Math.Acos(Converts.ToDouble(out_addr[i])));
3838
return @out;
3939
}
4040
default:
@@ -43,67 +43,67 @@ public override NDArray ACos(in NDArray nd, NPTypeCode? typeCode = null)
4343
case NPTypeCode.Byte:
4444
{
4545
var out_addr = (byte*)@out.Address;
46-
Parallel.For(0, len, i => out_addr[i] = Converts.ToByte(Math.Acos(out_addr[i])));
46+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToByte(Math.Acos(out_addr[i]));
4747
return @out;
4848
}
4949
case NPTypeCode.Int16:
5050
{
5151
var out_addr = (short*)@out.Address;
52-
Parallel.For(0, len, i => out_addr[i] = Converts.ToInt16(Math.Acos(out_addr[i])));
52+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToInt16(Math.Acos(out_addr[i]));
5353
return @out;
5454
}
5555
case NPTypeCode.UInt16:
5656
{
5757
var out_addr = (ushort*)@out.Address;
58-
Parallel.For(0, len, i => out_addr[i] = Converts.ToUInt16(Math.Acos(out_addr[i])));
58+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToUInt16(Math.Acos(out_addr[i]));
5959
return @out;
6060
}
6161
case NPTypeCode.Int32:
6262
{
6363
var out_addr = (int*)@out.Address;
64-
Parallel.For(0, len, i => out_addr[i] = Converts.ToInt32(Math.Acos(out_addr[i])));
64+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToInt32(Math.Acos(out_addr[i]));
6565
return @out;
6666
}
6767
case NPTypeCode.UInt32:
6868
{
6969
var out_addr = (uint*)@out.Address;
70-
Parallel.For(0, len, i => out_addr[i] = Converts.ToUInt32(Math.Acos(out_addr[i])));
70+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToUInt32(Math.Acos(out_addr[i]));
7171
return @out;
7272
}
7373
case NPTypeCode.Int64:
7474
{
7575
var out_addr = (long*)@out.Address;
76-
Parallel.For(0, len, i => out_addr[i] = Converts.ToInt64(Math.Acos(out_addr[i])));
76+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToInt64(Math.Acos(out_addr[i]));
7777
return @out;
7878
}
7979
case NPTypeCode.UInt64:
8080
{
8181
var out_addr = (ulong*)@out.Address;
82-
Parallel.For(0, len, i => out_addr[i] = Converts.ToUInt64(Math.Acos(out_addr[i])));
82+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToUInt64(Math.Acos(out_addr[i]));
8383
return @out;
8484
}
8585
case NPTypeCode.Char:
8686
{
8787
var out_addr = (char*)@out.Address;
88-
Parallel.For(0, len, i => out_addr[i] = Converts.ToChar(Math.Acos(out_addr[i])));
88+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToChar(Math.Acos(out_addr[i]));
8989
return @out;
9090
}
9191
case NPTypeCode.Double:
9292
{
9393
var out_addr = (double*)@out.Address;
94-
Parallel.For(0, len, i => out_addr[i] = Converts.ToDouble(Math.Acos(out_addr[i])));
94+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToDouble(Math.Acos(out_addr[i]));
9595
return @out;
9696
}
9797
case NPTypeCode.Single:
9898
{
9999
var out_addr = (float*)@out.Address;
100-
Parallel.For(0, len, i => out_addr[i] = Converts.ToSingle(Math.Acos(out_addr[i])));
100+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToSingle(Math.Acos(out_addr[i]));
101101
return @out;
102102
}
103103
case NPTypeCode.Decimal:
104104
{
105105
var out_addr = (decimal*)@out.Address;
106-
Parallel.For(0, len, i => out_addr[i] = (decimal)(Math.Acos(Converts.ToDouble(out_addr[i]))));
106+
for (int i = 0; i < len; i++) out_addr[i] = (decimal)(Math.Acos(Converts.ToDouble(out_addr[i])));
107107
return @out;
108108
}
109109
default:

src/NumSharp.Core/Backends/Default/Math/Default.ASin.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ public override NDArray ASin(in NDArray nd, NPTypeCode? typeCode = null)
2727
case NPTypeCode.#1:
2828
{
2929
var out_addr = (#2*)@out.Address;
30-
Parallel.For(0, len, i => out_addr[i] = Converts.To#1(Math.Asin(out_addr[i])));
30+
for (int i = 0; i < len; i++) out_addr[i] = Converts.To#1(Math.Asin(out_addr[i]));
3131
return @out;
3232
}
3333
%
3434
case NPTypeCode.Decimal:
3535
{
3636
var out_addr = (decimal*)@out.Address;
37-
Parallel.For(0, len, i => out_addr[i] = (decimal)(Math.Asin(Converts.ToDouble(out_addr[i]))));
37+
for (int i = 0; i < len; i++) out_addr[i] = (decimal)(Math.Asin(Converts.ToDouble(out_addr[i])));
3838
return @out;
3939
}
4040
default:
@@ -43,67 +43,67 @@ public override NDArray ASin(in NDArray nd, NPTypeCode? typeCode = null)
4343
case NPTypeCode.Byte:
4444
{
4545
var out_addr = (byte*)@out.Address;
46-
Parallel.For(0, len, i => out_addr[i] = Converts.ToByte(Math.Asin(out_addr[i])));
46+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToByte(Math.Asin(out_addr[i]));
4747
return @out;
4848
}
4949
case NPTypeCode.Int16:
5050
{
5151
var out_addr = (short*)@out.Address;
52-
Parallel.For(0, len, i => out_addr[i] = Converts.ToInt16(Math.Asin(out_addr[i])));
52+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToInt16(Math.Asin(out_addr[i]));
5353
return @out;
5454
}
5555
case NPTypeCode.UInt16:
5656
{
5757
var out_addr = (ushort*)@out.Address;
58-
Parallel.For(0, len, i => out_addr[i] = Converts.ToUInt16(Math.Asin(out_addr[i])));
58+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToUInt16(Math.Asin(out_addr[i]));
5959
return @out;
6060
}
6161
case NPTypeCode.Int32:
6262
{
6363
var out_addr = (int*)@out.Address;
64-
Parallel.For(0, len, i => out_addr[i] = Converts.ToInt32(Math.Asin(out_addr[i])));
64+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToInt32(Math.Asin(out_addr[i]));
6565
return @out;
6666
}
6767
case NPTypeCode.UInt32:
6868
{
6969
var out_addr = (uint*)@out.Address;
70-
Parallel.For(0, len, i => out_addr[i] = Converts.ToUInt32(Math.Asin(out_addr[i])));
70+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToUInt32(Math.Asin(out_addr[i]));
7171
return @out;
7272
}
7373
case NPTypeCode.Int64:
7474
{
7575
var out_addr = (long*)@out.Address;
76-
Parallel.For(0, len, i => out_addr[i] = Converts.ToInt64(Math.Asin(out_addr[i])));
76+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToInt64(Math.Asin(out_addr[i]));
7777
return @out;
7878
}
7979
case NPTypeCode.UInt64:
8080
{
8181
var out_addr = (ulong*)@out.Address;
82-
Parallel.For(0, len, i => out_addr[i] = Converts.ToUInt64(Math.Asin(out_addr[i])));
82+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToUInt64(Math.Asin(out_addr[i]));
8383
return @out;
8484
}
8585
case NPTypeCode.Char:
8686
{
8787
var out_addr = (char*)@out.Address;
88-
Parallel.For(0, len, i => out_addr[i] = Converts.ToChar(Math.Asin(out_addr[i])));
88+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToChar(Math.Asin(out_addr[i]));
8989
return @out;
9090
}
9191
case NPTypeCode.Double:
9292
{
9393
var out_addr = (double*)@out.Address;
94-
Parallel.For(0, len, i => out_addr[i] = Converts.ToDouble(Math.Asin(out_addr[i])));
94+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToDouble(Math.Asin(out_addr[i]));
9595
return @out;
9696
}
9797
case NPTypeCode.Single:
9898
{
9999
var out_addr = (float*)@out.Address;
100-
Parallel.For(0, len, i => out_addr[i] = Converts.ToSingle(Math.Asin(out_addr[i])));
100+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToSingle(Math.Asin(out_addr[i]));
101101
return @out;
102102
}
103103
case NPTypeCode.Decimal:
104104
{
105105
var out_addr = (decimal*)@out.Address;
106-
Parallel.For(0, len, i => out_addr[i] = (decimal)(Math.Asin(Converts.ToDouble(out_addr[i]))));
106+
for (int i = 0; i < len; i++) out_addr[i] = (decimal)(Math.Asin(Converts.ToDouble(out_addr[i])));
107107
return @out;
108108
}
109109
default:

src/NumSharp.Core/Backends/Default/Math/Default.ATan.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ public override NDArray ATan(in NDArray nd, NPTypeCode? typeCode = null)
2727
case NPTypeCode.#1:
2828
{
2929
var out_addr = (#2*)@out.Address;
30-
Parallel.For(0, len, i => out_addr[i] = Converts.To#1(Math.Atan(out_addr[i])));
30+
for (int i = 0; i < len; i++) out_addr[i] = Converts.To#1(Math.Atan(out_addr[i]));
3131
return @out;
3232
}
3333
%
3434
case NPTypeCode.Decimal:
3535
{
3636
var out_addr = (decimal*)@out.Address;
37-
Parallel.For(0, len, i => out_addr[i] = (decimal)(Math.Atan(Converts.ToDouble(out_addr[i]))));
37+
for (int i = 0; i < len; i++) out_addr[i] = (decimal)(Math.Atan(Converts.ToDouble(out_addr[i])));
3838
return @out;
3939
}
4040
default:
@@ -43,67 +43,67 @@ public override NDArray ATan(in NDArray nd, NPTypeCode? typeCode = null)
4343
case NPTypeCode.Byte:
4444
{
4545
var out_addr = (byte*)@out.Address;
46-
Parallel.For(0, len, i => out_addr[i] = Converts.ToByte(Math.Atan(out_addr[i])));
46+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToByte(Math.Atan(out_addr[i]));
4747
return @out;
4848
}
4949
case NPTypeCode.Int16:
5050
{
5151
var out_addr = (short*)@out.Address;
52-
Parallel.For(0, len, i => out_addr[i] = Converts.ToInt16(Math.Atan(out_addr[i])));
52+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToInt16(Math.Atan(out_addr[i]));
5353
return @out;
5454
}
5555
case NPTypeCode.UInt16:
5656
{
5757
var out_addr = (ushort*)@out.Address;
58-
Parallel.For(0, len, i => out_addr[i] = Converts.ToUInt16(Math.Atan(out_addr[i])));
58+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToUInt16(Math.Atan(out_addr[i]));
5959
return @out;
6060
}
6161
case NPTypeCode.Int32:
6262
{
6363
var out_addr = (int*)@out.Address;
64-
Parallel.For(0, len, i => out_addr[i] = Converts.ToInt32(Math.Atan(out_addr[i])));
64+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToInt32(Math.Atan(out_addr[i]));
6565
return @out;
6666
}
6767
case NPTypeCode.UInt32:
6868
{
6969
var out_addr = (uint*)@out.Address;
70-
Parallel.For(0, len, i => out_addr[i] = Converts.ToUInt32(Math.Atan(out_addr[i])));
70+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToUInt32(Math.Atan(out_addr[i]));
7171
return @out;
7272
}
7373
case NPTypeCode.Int64:
7474
{
7575
var out_addr = (long*)@out.Address;
76-
Parallel.For(0, len, i => out_addr[i] = Converts.ToInt64(Math.Atan(out_addr[i])));
76+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToInt64(Math.Atan(out_addr[i]));
7777
return @out;
7878
}
7979
case NPTypeCode.UInt64:
8080
{
8181
var out_addr = (ulong*)@out.Address;
82-
Parallel.For(0, len, i => out_addr[i] = Converts.ToUInt64(Math.Atan(out_addr[i])));
82+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToUInt64(Math.Atan(out_addr[i]));
8383
return @out;
8484
}
8585
case NPTypeCode.Char:
8686
{
8787
var out_addr = (char*)@out.Address;
88-
Parallel.For(0, len, i => out_addr[i] = Converts.ToChar(Math.Atan(out_addr[i])));
88+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToChar(Math.Atan(out_addr[i]));
8989
return @out;
9090
}
9191
case NPTypeCode.Double:
9292
{
9393
var out_addr = (double*)@out.Address;
94-
Parallel.For(0, len, i => out_addr[i] = Converts.ToDouble(Math.Atan(out_addr[i])));
94+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToDouble(Math.Atan(out_addr[i]));
9595
return @out;
9696
}
9797
case NPTypeCode.Single:
9898
{
9999
var out_addr = (float*)@out.Address;
100-
Parallel.For(0, len, i => out_addr[i] = Converts.ToSingle(Math.Atan(out_addr[i])));
100+
for (int i = 0; i < len; i++) out_addr[i] = Converts.ToSingle(Math.Atan(out_addr[i]));
101101
return @out;
102102
}
103103
case NPTypeCode.Decimal:
104104
{
105105
var out_addr = (decimal*)@out.Address;
106-
Parallel.For(0, len, i => out_addr[i] = (decimal)(Math.Atan(Converts.ToDouble(out_addr[i]))));
106+
for (int i = 0; i < len; i++) out_addr[i] = (decimal)(Math.Atan(Converts.ToDouble(out_addr[i])));
107107
return @out;
108108
}
109109
default:

0 commit comments

Comments
 (0)