使用gpu在python中以大整数查找幸运数字

问题描述

嘿伙计们,我想在 python 中找到从 1 到 2^65 或更高的所有幸运数字

import numpy as np
from numba import vectorize,jit,cuda

class Didnt_Findit(Exception):
    pass
@vectorize(['float64(float64)'],target ="cuda")
def lucky(n):
    # initial seed
    lucky_numbers = [1]
    # how many numbers do you need to get to n?
    candidates = np.arange(1,n*100,2)
    # use numpy array boolean indexing
    next_lucky = candidates[candidates > lucky_numbers[-1]][0]
    # accumulate lucky numbers till you have n of them
    while next_lucky < candidates[-1]:
        lucky_numbers.append(next_lucky)
        #print lucky_numbers
        if len(lucky_numbers) == n:
            return lucky_numbers[-1]
        mask_start = next_lucky - 1
        mask_step = next_lucky
        mask = np.array([True] * len(candidates))
        mask[mask_start::mask_step] = False
        #print mask
        candidates = candidates[mask]
        next_lucky = candidates[ candidates > lucky_numbers[-1]][0]
    raise Didnt_Findit('n = ',n)

for i in range(2,18446744073709551616):
    with open('lucky2s.txt','a') as the_file:
        the_file.write(str(lucky(i)) + ",")

这是我的代码,但我收到此错误

Traceback (most recent call last):
  File ".\luckyn.py",line 7,in <module>
    def lucky(n):
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\np\ufunc\decorators.py",line 125,in wrap
    vec.add(sig)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\np\ufunc\deviceufunc.py",line 399,in add
    corefn,return_type = self._compile_core(devfnsig)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\cuda\vectorizers.py",line 15,in _compile_core
    cudevfn = cuda.jit(sig,device=True,inline=True)(self.pyfunc)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\cuda\decorators.py",line 98,in device_jit
    return compile_device(func,restype,argtypes,inline=inline,File "C:\ProgramData\Anaconda3\lib\site-packages\numba\cuda\compiler.py",line 282,in compile_device
    return DeviceFunction(pyfunc,return_type,args,inline=True,debug=False)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\cuda\compiler.py",line 311,in __init__
    cres = compile_cuda(self.py_func,self.return_type,self.args,File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\compiler_lock.py",line 35,in _acquire_compile_lock
    return func(*args,**kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\cuda\compiler.py",line 47,in compile_cuda
    cres = compiler.compile_extra(typingctx=typingctx,File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\compiler.py",line 606,in compile_extra
    return pipeline.compile_extra(func)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\compiler.py",line 353,in compile_extra
    return self._compile_bytecode()
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\compiler.py",line 415,in _compile_bytecode
    return self._compile_core()
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\compiler.py",line 395,in _compile_core
    raise e
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\compiler.py",line 386,in _compile_core
    pm.run(self.state)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\compiler_machinery.py",line 339,in run
    raise patched_exception
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\compiler_machinery.py",line 330,in run
    self._runPass(idx,pass_inst,state)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\compiler_lock.py",**kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\compiler_machinery.py",line 289,in _runPass
    mutated |= check(pss.run_pass,internal_state)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\compiler_machinery.py",line 262,in check
    mangled = func(compiler_state)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\untyped_passes.py",line 235,in run_pass
    rewrites.rewrite_registry.apply('before-inference',state)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\rewrites\registry.py",line 67,in apply
    matches = rewrite.match(state.func_ir,block,state.typemap,File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\rewrites\static_raise.py",line 51,in match
    const = func_ir.infer_constant(inst.exception)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\ir.py",line 1469,in infer_constant
    return self._consts.infer_constant(name)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\core\consts.py",line 43,in infer_constant
    raise exc(*args,loc=loc)
numba.core.errors.ConstantInferenceError: Failed in nopython mode pipeline (step: nopython rewrites)
←[1m←[1m←[1mConstant inference not possible for: arg(0,name=n)←[0m
←[1m
File "luckyn.py",line 27:←[0m
←[1mdef lucky(n):
    <source elided>
        next_lucky = candidates[ candidates > lucky_numbers[-1]][0]
←[1m    raise Didnt_Findit('n = ',n)
←[0m    ←[1m^←[0m←[0m
←[0m←[0m

我该怎么办?我的代码问题在哪里? 我使用了 numpy 和 numba 但我刚收到这个错误 我不能使用 cpu 因为它需要很多时间来生成我的代码 我们可以对此代码进行任何优化以使其运行得更快吗?即使它不在 gpu 中?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)