Skip to content

Commit 8d1787d

Browse files
committed
Default.Tanh: Performance opt.
1 parent 16a7794 commit 8d1787d

File tree

1 file changed

+15
-39
lines changed

1 file changed

+15
-39
lines changed

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

Lines changed: 15 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System;
2+
using System.Threading.Tasks;
3+
using NumSharp.Utilities;
24

35
namespace NumSharp.Backends
46
{
@@ -23,18 +25,14 @@ public override NDArray Tanh(in NDArray nd, NPTypeCode? typeCode = null)
2325
case NPTypeCode.#1:
2426
{
2527
var out_addr = (#2*)@out.Address;
26-
for (int i = 0; i < len; i++)
27-
*(out_addr + i) = Convert.To#1(Math.Tanh(*(out_addr + i)));
28-
28+
Parallel.For(0, len, i => *(out_addr + i) = Converts.To#1(Math.Tanh(*(out_addr + i))));
2929
return @out;
3030
}
3131
%
3232
case NPTypeCode.Decimal:
3333
{
3434
var out_addr = (decimal*)@out.Address;
35-
for (int i = 0; i < len; i++)
36-
*(out_addr + i) = (decimal)(Math.Tanh(Convert.ToDouble(*(out_addr + i))));
37-
35+
Parallel.For(0, len, i => *(out_addr + i) = (decimal)(Math.Tanh(Converts.ToDouble(*(out_addr + i)))));
3836
return @out;
3937
}
4038
default:
@@ -43,89 +41,67 @@ public override NDArray Tanh(in NDArray nd, NPTypeCode? typeCode = null)
4341
case NPTypeCode.Byte:
4442
{
4543
var out_addr = (byte*)@out.Address;
46-
for (int i = 0; i < len; i++)
47-
*(out_addr + i) = Convert.ToByte(Math.Tanh(*(out_addr + i)));
48-
44+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToByte(Math.Tanh(*(out_addr + i))));
4945
return @out;
5046
}
5147
case NPTypeCode.Int16:
5248
{
5349
var out_addr = (short*)@out.Address;
54-
for (int i = 0; i < len; i++)
55-
*(out_addr + i) = Convert.ToInt16(Math.Tanh(*(out_addr + i)));
56-
50+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt16(Math.Tanh(*(out_addr + i))));
5751
return @out;
5852
}
5953
case NPTypeCode.UInt16:
6054
{
6155
var out_addr = (ushort*)@out.Address;
62-
for (int i = 0; i < len; i++)
63-
*(out_addr + i) = Convert.ToUInt16(Math.Tanh(*(out_addr + i)));
64-
56+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt16(Math.Tanh(*(out_addr + i))));
6557
return @out;
6658
}
6759
case NPTypeCode.Int32:
6860
{
6961
var out_addr = (int*)@out.Address;
70-
for (int i = 0; i < len; i++)
71-
*(out_addr + i) = Convert.ToInt32(Math.Tanh(*(out_addr + i)));
72-
62+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt32(Math.Tanh(*(out_addr + i))));
7363
return @out;
7464
}
7565
case NPTypeCode.UInt32:
7666
{
7767
var out_addr = (uint*)@out.Address;
78-
for (int i = 0; i < len; i++)
79-
*(out_addr + i) = Convert.ToUInt32(Math.Tanh(*(out_addr + i)));
80-
68+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt32(Math.Tanh(*(out_addr + i))));
8169
return @out;
8270
}
8371
case NPTypeCode.Int64:
8472
{
8573
var out_addr = (long*)@out.Address;
86-
for (int i = 0; i < len; i++)
87-
*(out_addr + i) = Convert.ToInt64(Math.Tanh(*(out_addr + i)));
88-
74+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt64(Math.Tanh(*(out_addr + i))));
8975
return @out;
9076
}
9177
case NPTypeCode.UInt64:
9278
{
9379
var out_addr = (ulong*)@out.Address;
94-
for (int i = 0; i < len; i++)
95-
*(out_addr + i) = Convert.ToUInt64(Math.Tanh(*(out_addr + i)));
96-
80+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt64(Math.Tanh(*(out_addr + i))));
9781
return @out;
9882
}
9983
case NPTypeCode.Char:
10084
{
10185
var out_addr = (char*)@out.Address;
102-
for (int i = 0; i < len; i++)
103-
*(out_addr + i) = Convert.ToChar(Math.Tanh(*(out_addr + i)));
104-
86+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToChar(Math.Tanh(*(out_addr + i))));
10587
return @out;
10688
}
10789
case NPTypeCode.Double:
10890
{
10991
var out_addr = (double*)@out.Address;
110-
for (int i = 0; i < len; i++)
111-
*(out_addr + i) = Convert.ToDouble(Math.Tanh(*(out_addr + i)));
112-
92+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToDouble(Math.Tanh(*(out_addr + i))));
11393
return @out;
11494
}
11595
case NPTypeCode.Single:
11696
{
11797
var out_addr = (float*)@out.Address;
118-
for (int i = 0; i < len; i++)
119-
*(out_addr + i) = Convert.ToSingle(Math.Tanh(*(out_addr + i)));
120-
98+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToSingle(Math.Tanh(*(out_addr + i))));
12199
return @out;
122100
}
123101
case NPTypeCode.Decimal:
124102
{
125103
var out_addr = (decimal*)@out.Address;
126-
for (int i = 0; i < len; i++)
127-
*(out_addr + i) = (decimal)(Math.Tanh(Convert.ToDouble(*(out_addr + i))));
128-
104+
Parallel.For(0, len, i => *(out_addr + i) = (decimal)(Math.Tanh(Converts.ToDouble(*(out_addr + i)))));
129105
return @out;
130106
}
131107
default:

0 commit comments

Comments
 (0)