I will share 2 codes with you. tell me differences between these codes 

Code 1: 
from timeit import default\_timer as timer
try:
 from matplotlib.pylab import imshow, show
 have\_mpl = True
except ImportError:
 have\_mpl = False
import numpy as np
from numba import jit

@jit(nopython=True)
def mandel(x, y, max\_iters):
 """
 Given the real and imaginary parts of a complex number,
 determine if it is a candidate for membership in the Mandelbrot
 set given a fixed number of iterations.
 """
 i = 0
 c = complex(x,y)
 z = 0.0j
 for i in range(max\_iters):
 z = z \* z + c
 if (z.real \* z.real + z.imag \* z.imag) >= 4:
 return i

 return 255

@jit(nopython=True)
def create\_fractal(min\_x, max\_x, min\_y, max\_y, image, iters):
 height = image.shape[0]
 width = image.shape[1]

 pixel\_size\_x = (max\_x - min\_x) / width
 pixel\_size\_y = (max\_y - min\_y) / height
 for x in range(width):
 real = min\_x + x \* pixel\_size\_x
 for y in range(height):
 imag = min\_y + y \* pixel\_size\_y
 color = mandel(real, imag, iters)
 image[y, x] = color

 return image

image = np.zeros((500 \* 2, 750 \* 2), dtype=np.uint8)
s = timer()
create\_fractal(-2.0, 1.0, -1.0, 1.0, image, 20)
e = timer()
print(e - s)
if have\_mpl:
 imshow(image)
 show()
Code 2:

from numba import cuda
from matplotlib import pyplot as plt
from timeit import default\_timer as timer
try:
 from matplotlib.pylab import imshow, show
 have\_mpl = True
except ImportError:
 have\_mpl = False
import numpy as np
from numba import jit, cuda

@cuda.jit
def mandel(x, y, max\_iters):
 """
 Given the real and imaginary parts of a complex number,
 determine if it is a candidate for membership in the Mandelbrot
 set given a fixed number of iterations.
 """
 i = 0
 c = complex(x,y)
 z = 0.0j
 for i in range(max\_iters):
 z = z \* z + c
 if (z.real \* z.real + z.imag \* z.imag) >= 4:
 return i

 return 255
@cuda.jit
def create\_fractal(min\_x, max\_x, min\_y, max\_y, image, iters):
 height = image.shape[0]
 width = image.shape[1]

 pixel\_size\_x = (max\_x - min\_x) / width
 pixel\_size\_y = (max\_y - min\_y) / height
 for x in range(width):
 real = min\_x + x \* pixel\_size\_x
 for y in range(height):
 imag = min\_y + y \* pixel\_size\_y
 color = mandel(real, imag, iters)
 image[y, x] = color

 return None # Change here
# Set the number of threads per block and the number of blocks per grid
threads\_per\_block = (16, 16)
blocks\_per\_grid = (8, 8)

image = np.zeros((500 \* 2, 750 \* 2), dtype=np.uint8)
s = timer()
# Call the function using the specified block and grid configuration
create\_fractal[blocks\_per\_grid, threads\_per\_block](-2.0, 1.0, -1.0, 1.0, image, 20)
e = timer()
print(e - s)
if have\_mpl:
 imshow(image)
 show()
두 가지 코드를 공유하겠습니다. 이 코드의 차이점을 알려주세요. 코드 1: FROM TIMEIT에서 기본값\_타이머를 타이머로 가져옵니다.try: matplotlib.pylab에서 imshow, show를 가져옵니다. have\_mpl = True로 설정합니다: have\_mpl = Falsenumpy를 np로 가져옵니다.numba에서 jit를 가져옵니다.@jit(nopython=True)def mandel(x, y, max\_iters): """ 복소수의 실수 부분과 허수 부분이 주어집니다, 만델브로트 집합의 멤버십 후보인지 판단합니다. 집합의 멤버십 후보인지 결정합니다. """ i = 0 c = 복소수(x,y) z = 0.0j 범위(최대\_iters)의 i에 대해: z = z \* z + c if (z.real \* z.real + z.imag \* z.imag) >= 4: 반환 i 반환 255@jit(nopython=True)def create\_fractal(min\_x, max\_x, min\_y, max\_y, image, iters): height = image.shape[0] width = image.shape[1] 픽셀\_size\_x = (최대\_x - 최소\_x) / 너비 픽셀\_size\_y = (최대\_y - 최소\_y) / 높이 범위(너비)의 x에 대해 real = min\_x + x \* pixel\_size\_x 범위(높이)의 y에 대해 imag = min\_y + y \* pixel\_size\_y color = 만델(실수, 이미지, 이터) image[y, x] = color 이미지 반환image = np.0((500 \* 2, 750 \* 2), dtype=np.uint8)s = timer()create\_fractal(-2.0, 1.0, -1.0, 1.0, image, 20)e = timer()print(e - s)have\_mpl: imshow(image) show()코드 2:from numba import cudamatplotlib에서 pyplot을 plt로 임포트합니다.from timeit에서 default\_timer를 timer로 임포트합니다.try: matplotlib.pylab에서 imshow, show를 가져옵니다. have\_mpl = True로 설정합니다: have\_mpl = Falsenumpy를 np로 가져옵니다.numba에서 jit, cuda를 가져옵니다.@cuda.jitdef mandel(x, y, max\_iters): """ 복소수의 실수 부분과 허수 부분이 주어집니다, 만델브로트 집합의 멤버십 후보인지 판단합니다. 집합의 멤버십 후보인지 결정합니다. """ i = 0 c = 복소수(x,y) z = 0.0j 범위(최대\_iters)의 i에 대해: z = z \* z + c if (z.real \* z.real + z.imag \* z.imag) >= 4: 반환 i 반환 255@cuda.jitdef create\_fractal(min\_x, max\_x, min\_y, max\_y, image, iters): height = image.shape[0] width = image.shape[1] 픽셀\_size\_x = (최대\_x - 최소\_x) / 너비 픽셀\_size\_y = (최대\_y - 최소\_y) / 높이 범위(너비)의 x에 대해 real = min\_x + x \* pixel\_size\_x 범위(높이)의 y에 대해 imag = min\_y + y \* pixel\_size\_y color = 만델(실수, 이미지, 이터) image[y, x] = color 반환 없음 # 여기서 변경# 블록당 스레드 수와 그리드당 블록 수를 설정합니다.threads\_per\_block = (16, 16)blocks\_per\_grid = (8, 8)image = np.zeros((500 \* 2, 750 \* 2), dtype=np.uint8)s = timer()# 지정된 블록 및 그리드 구성을 사용하여 함수를 호출합니다.create\_fractal[blocks\_per\_grid, threads\_per\_block](-2.0, 1.0, -1.0, 1.0, image, 20)e = timer()print(e - s)if have\_mpl: imshow(image) show()