Ради веселья начал искать числа Ферма, но скорость вычисления на процессоре меня не устраивает. У меня есть метод, который возводит value в степень exponent. bigint = System.Numerics.BigInteger.
static bigint PPow(int value, bigint exponent)
{
bigint result = bigint.One;
int iterate = (int)(exponent / 1048560);
Parallel.For(0, iterate, i =>
{
result *= bigint.Pow(value, 1048560);
exponent -= 1048560;
});
result *= bigint.Pow(value, (int)exponent);
return result;
}
В менеджере пакетов Nuget скачал Alea и Alea.Foty, чтобы использовать GPU. Теперь код выглядит так.
[GpuManaged]
static bigint PPow(int value, bigint exponent)
{
bigint result = bigint.One;
int iterate = (int)(exponent / 1048560);
Gpu.Default.For(0, iterate, i =>
{
result *= bigint.Pow(value, 1048560);
exponent -= 1048560;
});
result *= bigint.Pow(value, (int)exponent);
return result;
}
Но у меня почему-то вылетает исключение:
System.Exception произошло
HResult=0x80131500
Сообщение = Non-default constructor(Void .ctor(Int32)) of System.Numerics.BigInteger is not supported in IL compiler.
Source location stack:
-> at System.Numerics.BigInteger.[System.Numerics.BigInteger op_Implicit(Int32)]
-> in C:\Users\10620\OneDrive\Документы\Visual Studio 2017\Projects\Finder\Finder\Program.cs(29,17-29,54)
-> at Finder.Program+<>c__DisplayClass2_0.[Void <PPow>b__0(Int32)]
-> at Alea.Parallel.Device.DeviceFor.[Void Kernel(Int32, Int32, System.Action`1[System.Int32])]
-> at defining runtime64 (sm61,64bit)
Loading method as kernel:
-> Method: Alea.Parallel.Device.DeviceFor.[Void Kernel(Int32, Int32, System.Action`1[System.Int32])]
-> InstanceOpt: <None>
-> Argument.#0: 0
-> Argument.#1: 0
-> Argument.#2: System.Action`1[System.Int32]
Getting or loading method as kernel:
-> Method: Alea.Parallel.Device.DeviceFor.[Void Kernel(Int32, Int32, System.Action`1[System.Int32])]
-> InstanceOpt: <None>
-> Argument.#0: 0
-> Argument.#1: 0
-> Argument.#2: System.Action`1[System.Int32]
Источник = Alea
Трассировка стека:
at Alea.Gpu.GetOrLoad(MethodInfo kernelMethodInfo, FSharpOption`1 instanceOpt, FSharpList`1 arguments)
at Alea.CSharp.GpuExtensions.Launch[T1,T2,T3](Gpu this, Action`3 kernel, LaunchParam lp, T1 arg1, T2 arg2, T3 arg3)
at Alea.Parallel.Device.DeviceFor.For(Gpu gpu, Int32 fromInclusive, Int32 toExclusive, Action`1 op)
at Finder.Program.PPow(Int32 value, BigInteger exponent)
at Finder.Program.Main(String[] args)
Как обойти это исключение?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня небольшой проект (mvc,OOP)Покажите пожалуйста как правильно подключать Twig и как его использовать в controller
У меня есть бот который при приветствии отправляет id пользователяПомогите реализовать генерацию этого id с помощью QR кода и отправку пользователю...