Qual é um código de exemplo para demonstrar a aceleração multicore em Python no Windows?
Estou usando o Python 3 no Windows e tentando construir um exemplo de brinquedo, demonstrando como o uso de vários núcleos da CPU pode acelerar a computação. O exemplo do brinquedo é a renderização do fractal Mandelbrot.
Tão longe:
Evitei o encadeamento, já que o bloqueio global para intérpretes proíbe multicores neste contextoEstou descartando um código de exemplo que não funcionará no Windows porque não possui o recurso de bifurcação do LinuxTentando usar o pacote "multiprocessing". Declaro p = Pool (8) (8 é o meu número de núcleos) e usando p.starmap (..) para delegar trabalho. Isso deve produzir vários "subprocessos", que o Windows delegará automaticamente para diferentes CPUsNo entanto, não consigo demonstrar nenhuma aceleração, devido a sobrecarga ou nenhum multiprocessamento real. Ponteiros para exemplos de brinquedos com aceleração demonstrável seriam, portanto, muito úteis :-)
Editar: Obrigado! Isso me levou na direção certa e agora tenho um exemplo de trabalho que demonstra uma duplicação de velocidade em uma CPU com 4 núcleos.
Uma cópia do meu código com "notas de aula" aqui:https://pastebin.com/c9HZ2vAV
Decidi usar Pool (), mas depois tentarei a alternativa "Process" que a @ 16num apontou. Abaixo está um exemplo de código para Pool ():
p = Pool(cpu_count())
#Unlike map, starmap only allows 1 input. "partial" provides a workaround
partial_calculatePixel = partial(calculatePixel, dataarray=data)
koord = []
for j in range(height):
for k in range(width):
koord.append((j,k))
#Runs the calls to calculatePixel in a pool. "hmm" collects the output
hmm = p.starmap(partial_calculatePixel,koord)