【问题标题】:optimizing multiple for loops for multithreading and/or GPU [duplicate]为多线程和/或 GPU 优化多个 for 循环 [重复]
【发布时间】:2014-05-03 10:18:03
【问题描述】:

我用 Python 编写了这段代码,用于使用 Shu Radcliffe 方法对 4 连杆机构进行运动学综合。正如你所看到的,有几个 for 预期的循环很快就会变成 3 o 4。现在在有 16 个 CPU(32 线程)的工作站上完成代码的执行大约需要 40 分钟,并且 CPU 使用率非常低,而Python 正在运行。

我正在使用 numpy 和数学。

我想知道是否有一种方法可以在 Python 中使用多个 CPU 和/或 GPU (CUDA) 运行 for 循环。

for th_12 in th_12_range:

    for th_13 in th_13_range:

        r_2=x_2-x_1*cos(th_12)+y_1*sin(th_12)
        r_3=x_3-x_1*cos(th_13)+y_1*sin(th_13)

        s_2=y_2-x_1*sin(th_12)-y_1*cos(th_12)
        s_3=y_3-x_1*sin(th_13)-y_1*cos(th_13)

        c_X_1_2_A=r_2*cos(th_12)+s_2*sin(th_12)-X_0_A*cos(th_12)\
        -Y_0_A*sin(th_12)+X_0_A
        c_Y_1_2_A=s_2*cos(th_12)-r_2*sin(th_12)+X_0_A*sin(th_12)\
        -Y_0_A*cos(th_12)+Y_0_A

        c_X_1_3_A=r_3*cos(th_13)+s_3*sin(th_13)-X_0_A*cos(th_13)\
        -Y_0_A*sin(th_13)+X_0_A
        c_Y_1_3_A=s_3*cos(th_13)-r_3*sin(th_13)+X_0_A*sin(th_13)\
        -Y_0_A*cos(th_13)+Y_0_A

        noto_2_A=r_2*X_0_A+s_2*Y_0_A-0.5*(r_2**2+s_2**2)
        noto_3_A=r_3*X_0_A+s_3*Y_0_A-0.5*(r_3**2+s_3**2)

        coeff_A = array ([[c_X_1_2_A,c_Y_1_2_A],[c_X_1_3_A,c_Y_1_3_A]])

        v_noti_A = array ([noto_2_A,noto_3_A])

        A=linalg.solve(coeff_A,v_noti_A)

        c_X_1_2_B=r_2*cos(th_12)+s_2*sin(th_12)-X_0_B\
        *cos(th_12)-Y_0_B*sin(th_12)+X_0_B

        c_Y_1_2_B=s_2*cos(th_12)-r_2*sin(th_12)+X_0_B\
        *sin(th_12)-Y_0_B*cos(th_12)+Y_0_B
        c_X_1_3_B=r_3*cos(th_13)+s_3*sin(th_13)-X_0_B*cos(th_13)\
        -Y_0_B*sin(th_13)+X_0_B
        c_Y_1_3_B=s_3*cos(th_13)-r_3*sin(th_13)+X_0_B*sin(th_13)\
        -Y_0_B*cos(th_13)+Y_0_B

        noto_2_B=r_2*X_0_B+s_2*Y_0_B-0.5*(r_2**2+s_2**2)
        noto_3_B=r_3*X_0_B+s_3*Y_0_B-0.5*(r_3**2+s_3**2)

        coeff_B = array ([[c_X_1_2_B,c_Y_1_2_B],[c_X_1_3_B,c_Y_1_3_B]])
        v_noti_B = array ([noto_2_B,noto_3_B])

        B=linalg.solve(coeff_B,v_noti_B)

        AC_i=((A[0]-x_1)**2+(A[1]-y_1)**2)**0.5
        BC_i=((B[0]-x_1)**2+(B[1]-y_1)**2)**0.5

        r1_i=((X_0_A-A[0])**2+(Y_0_A-A[1])**2)**0.5
        r2_i=((A[0]-B[0])**2+(A[1]-B[1])**2)**0.5
        r3_i=((B[0]-X_0_B)**2+(B[1]-Y_0_B)**2)**0.5
        r4_i=((X_0_A-X_0_B)**2+(Y_0_A-Y_0_B)**2)**0.5

        r=array([r1,r2,r3,r4])

        g_1=amax(r)+amin(r)
        g_2=sum(r)-g_1

        if g_1<=g_2:
            if amin(r) == (r1 or r3):
                quad_iesimo=[r1,r2,r3,r4,th_12_t,th_13_t,AC,BC]
                quad_gra.append(quad_iesimo)

【问题讨论】:

    标签: python multithreading numpy cuda


    【解决方案1】:

    您是否查看过pycuda 以访问 Nvidia 的 CUDA 并行计算?

    【讨论】:

      猜你喜欢
      • 2016-05-24
      • 1970-01-01
      • 2023-03-03
      • 2012-02-15
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      相关资源
      最近更新 更多