import taichi as ti
import time
ti.init(arch=ti.vulkan)@ti.funcdefis_prime(n:int):
result =Truefor k inrange(2,int(n **0.5)+1):if n % k ==0:
result =Falsebreakreturn result
@ti.kerneldefcount_primes(n:int)->int:
count =0for k inrange(2, n):if is_prime(k):
count +=1return count
defis_prime_one(n:int):
result =Truefor k inrange(2,int(n **0.5)+1):if n % k ==0:
result =Falsebreakreturn result
defcount_primes_one(n:int)->int:
count =0for k inrange(2, n):if is_prime_one(k):
count +=1return count
start_time=time.time()print(count_primes(1000000))print(time.time()-start_time)
start_time=time.time()print(count_primes_one(1000000))print(time.time()-start_time)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
例子二
import numpy as np
import taichi as ti
import time
ti.init(arch=ti.vulkan)@ti.kerneldeftaichi_forward_v0(
out: ti.types.ndarray(ndim=2),
w: ti.types.ndarray(ndim=2),
k: ti.types.ndarray(ndim=2)):
wr,wl=w.shape
kr,kl=k.shape
ti.simt.block.sync()for r inrange(0,wr):for l inrange(0,kl):for ll inrange(0,kr):
out[r,l]+=w[r,ll]*k[ll,l]
a = np.zeros([1333,1333])
b = np.zeros([1333,1333])
c =np.zeros([1333,1333])
start=time.time()
taichi_forward_v0(a, b, c)print(time.time()-start)
start=time.time()print(a,b@c)print(time.time()-start)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
例子3
import numpy as np
import taichi as ti
import time
ti.init(arch=ti.vulkan)@ti.kerneldefmult():
a=ti.Vector([1,3,4]*100)
b=ti.Vector([4,5,6]*100)
c=a@b
# print(c)defmult1():
a=np.array([1,3,4]*100)
b=np.array([4,5,6]*100)
c=a@b
# print(c)
start=time.time()for i inrange(110000):
mult()print(time.time()-start)
start=time.time()for i inrange(110000):
mult1()print(time.time()-start)