CONTENTS

ബാസൽ പ്രശ്നം (ഹലോ, വേൾഡ്!)

ഹലോ, വേൾഡ്! ഇതാണ് എന്റെ ആദ്യ പോസ്റ്റ്, ഈ വെബ്സൈറ്റിന്റെ പ്രവർത്തനം പരീക്ഷിക്കാനായി മാത്രമാണ് ഇത് ഉപയോഗിക്കുന്നത്.

ബാസൽ പ്രശ്നം കണക്കാക്കുന്ന വിവിധ ഭാഷകളിലുള്ള ചില കോഡ് ഖണ്ഡികകൾ ഇതാ:

തുടങ്ങാം,

പൈത്തൺ

def pi_squared_over_6(N: int) -> float:
    return sum(x**(-2) for x in range(1,N))

റസ്റ്റ്

fn pi_squared_over_6(N: u64) -> f64 {
    (1..N).map(|x| 1.0 / ((x*x) as f64)).sum()
}

ഹാസ്കൽ

piSquaredOver6 :: Integer -> Double
-- no capital N in Haskell :(
piSquaredOver6 n = sum $ map (\x -> 1 / fromIntegral (x * x)) [1..n]

സി

double pi_squared_over_6(unsigned int N) {
    double sum = 0.0;
    for (int i = 1; i < N; i++) {
        sum += 1.0 / (i*i);
    }
    return sum;
}

നിങ്ങളുടെ പ്രിയപ്പെട്ട പരിഹാരം ഏതാണ്?

പ്രകടനം

ഒരു എം1 പ്രോയിൽ, എന്നതിന് അവ എങ്ങനെ താരതമ്യം ചെയ്യുന്നുവെന്ന് നോക്കാം.

ഭാഷ സമയം (എംഎസ്, )
റസ്റ്റ് (സമാന്തരീകരിച്ചത്)
റസ്റ്റ് (–release)
സി (-O3)
ഹാസ്കൽ (-O3)
പൈത്തൺ (3.10)

പൈത്തൺ പരിഹരിക്കുന്നു

പൈത്തൺ കോഡ് പ്രവർത്തിക്കാൻ അസംബന്ധമായി വളരെയധികം സമയമെടുത്തു, അതിനാൽ വെക്റ്ററൈസ്ഡ് സി കോഡിലേക്ക് വിളിക്കുന്ന നമ്പിയുടെ ഗുണം പ്രയോജനപ്പെടുത്തി അത് പരിഹരിക്കാം.

import numpy as np

def pi_squared_over_6(N: int) -> float:
    x = np.ones(N)
    r = np.arange(1,N)
    sq = np.square(r)
    div = np.divide(x, sq)
    return float(np.sum(div))

കുറച്ച് മെച്ചപ്പെട്ടു, പക്ഷേ ഞാൻ btm പരിശോധിക്കുമ്പോൾ, അമിതമായ മെമ്മറി ഉപഭോഗം സൂചിപ്പിക്കുന്നത് ചെയ്യുന്ന ജോലിയുടെ ഭൂരിഭാഗവും ബില്യൺ ഫ്ലോട്ടുകൾ ചുറ്റിക്കറങ്ങുകയാണെന്നാണ്, യഥാർത്ഥ ഗണിതം അല്ല. ഇത് ചങ്കുകളായി വിഭജിക്കാൻ ശ്രമിക്കാം:

def pi_squared_over_6(N: int) -> float:
    CHUNKS = 25000
    SIZE = N // CHUNKS
    s = 0.0
    x = np.ones(N // CHUNKS - 1)
    for i in range(CHUNKS):
        N_tmp = i * SIZE
        r = np.arange(N_tmp + 1, N_tmp + SIZE)
        sq = np.square(r)
        div = np.divide(x, sq)
        s += np.sum(div)
        # മെമ്മറി ഡീലോക്കേറ്റ് ചെയ്യുക
        del sq
        del div
        del r
        
    return s

വളരെ മികച്ചത്! ഇപ്പോൾ ഇത് 2 സെക്കൻഡിനുള്ളിൽ പ്രവർത്തിക്കുന്നു!

✦ ഈ ലേഖനത്തിന്റെ ആശയരൂപീകരണം, ഗവേഷണം, എഴുത്ത്, അല്ലെങ്കിൽ എഡിറ്റിംഗ് എന്നിവയിൽ LLM-കൾ ഉപയോഗിച്ചിട്ടില്ല.