നുംബ

നുംബ (Numba) ഒരു ഓപ്പൺ സോഴ്സ് നം‌പൈ (NumPy) - അവേയർ ഒപ്റ്റിമൈസിങ് കമ്പൈലർ ആണ്. അനക്കോണ്ട, ഐഎൻസി(Inc) സ്പോൺസർ ചെയ്യുന്ന പൈത്തൺ പ്രോഗ്രാമുകൾക്കായി ഗോർഡൻ, ബെറ്റി മോർ ഫൗണ്ടേഷൻ എന്നിവിടങ്ങളിൽ നിന്നുള്ള ഗ്രാൻറ് ലഭിച്ചു. സിപിയു, ജിപിയു മെഷീൻ കോഡ് എന്നിവയിലേക്ക് പൈത്തൺ കംപൈൽ ചെയ്യുന്നതിനായി എൽഎൽവിഎം കമ്പൈലർ ഇൻഫ്രാസ്ട്രക്ചർ ഉപയോഗിക്കുന്നു.
ഗുണങ്ങൾ
നുംബ എൽഎൽവിഎം(LLVM) ഉള്ള പൈത്തൺ കോഡ് സംഗ്രഹിക്കുന്നു. പ്രവർത്തിപ്പിക്കുന്ന സമയത്ത് സിപിയു അല്ലെങ്കിൽ ജിപിയു മുഖേന സ്വഭാവികമായി പ്രവർത്തിക്കുന്ന കോഡ്. പൈത്തൺ ഫംഗ്ഷനുകൾ അലങ്കരിക്കുന്നതിലൂടെ ഇത് സംഭവിക്കുന്നു, വിവിധ ഇൻപുട്ട് തരങ്ങൾക്ക് നേറ്റീവ് ഫംഗ്ഷൻകൾ സൃഷ്ടിക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുക, അല്ലെങ്കിൽ ഫ്ലയിൽ അവ സൃഷ്ടിക്കുന്നു:
@jit('f8(f8[:])')
def sum1d(my_double_array):
    total = 0.0
    for i in range(my_double_array.shape[0]):
        total += my_double_array[i]
    return total
ഈ ഒപ്റ്റിമൈസ് ചെയ്ത ഫങ്ഷൻ ഒരു വലിയ നംപൈ(NumPy) അറേയിൽ വ്യാഖ്യാനിച്ച യഥാർത്ഥ പ്രവർത്തനത്തെക്കാൾ 200 മടങ്ങ് വേഗത്തിൽ പ്രവർത്തിക്കുന്നു; നംപൈയുടെ ബിൽറ്റ്-ഇൻ സം()ഫംഗ്ഷനെ അപേക്ഷിച്ച് 30% വേഗതയുണ്ട് (പതിപ്പ് 0.27.0).

അനുയോജ്യമായ ഇൻപുട്ട് രീതികൾക്കായി മുകളിലുള്ള ഉദാഹരണം പ്രവർത്തിപ്പിക്കുന്നതിന്, സ്വയമേവ സ്പെഷ്യലൈസ് ചെയ്ത ഒരു ഫങ്ഷൻ നമുക്ക് സൃഷ്ടിക്കാം:
@jit
def sum1d(my_array):
    ...

ജിപിയു പിന്തുണ
നുംബ ജിപിയു കോഡിൽ പൈത്തൺ ഫംഗ്ഷനുകൾ സമാഹരിക്കാൻ കഴിയും. നിലവിൽ രണ്ട് സമീപനങ്ങൾ ലഭ്യമാണ്:
എൻവിഐഡിഎ സിയുഡിഎ(NVIDIA CUDA)
 എഎംഡി എച്ച്എസ്എ(AMD HSA)
എൻവിഐഡിഎ സിയുഡിഎ(NVIDIA CUDA)
@cuda.jit
def increment_a_2D_array(an_array):
    x, y = cuda.grid(2)
    if x < an_array.shape[0] and y < an_array.shape[1]:
       an_array[x, y] += 1

എഎംഡി എച്ച്എസ്എ(AMD HSA)
ലളിത വ്യാഖ്യാനമായ '@ hsa.jit' ഉപയോഗിക്കുക:
@hsa.jit(device=True)
def a_device_function(a, b):
    return a + b

ബദൽ സമീപനങ്ങൾ
പൈത്തൺ ത്വരിതപ്പെടുത്തുന്നതിനുള്ള ഇതര സമീപനങ്ങളാണ് താഴെ കൊടുത്തിരിക്കുന്ന പദ്ധതികൾ:
 സൈത്തൺ(Cython)
 പൈപൈ(PyPy)
 പൈത്രാൻ(Pythran)

അവലംബം

വർഗ്ഗം:പൈത്തൺ (പ്രോഗ്രാമിങ്ങ് ഭാഷ)