예제 #1
0
                                               size=tile)
                                        context.synchronize()

                                        cublas_dot(devA2,
                                                   devB2,
                                                   devC2,
                                                   alpha=alpha,
                                                   beta=beta)

                                        partial1 = ng.empty(
                                            (devC1.shape[0], 1),
                                            dtype=np.float32)
                                        partial2 = partial1[0:1, 0:1]

                                        if ng.min(
                                                ng.finite(devC1),
                                                partial=partial1,
                                                out=partial2).get()[0,
                                                                    0] == 0.0:
                                            print "Error: NaN KCN: (%d,%d,%d) ab: (%f,%f) dtype: %d" % (
                                                K, C, N, alpha, beta, itemsize)
                                            exit()

                                        diff = ng.max(abs(devC2 - devC1),
                                                      partial=partial1,
                                                      out=partial2).get()[0, 0]
                                        mean = ng.mean(abs(devC2),
                                                       partial=partial1,
                                                       out=partial2).get()[0,
                                                                           0]
                                        pctErr = 100 * diff / mean
예제 #2
0
                                if op[1] == 't': devB1, devB2 = devB1.T, devB2.T

                                for tile in (32,64,128):
                                    if op == 'nt' and tile != 128:
                                        continue
                                    try: 

                                        ng.dot(devA1, devB1, devC1, alpha=alpha, beta=beta, size=tile)
                                        context.synchronize()

                                        cublas_dot(devA2, devB2, devC2, alpha=alpha, beta=beta)

                                        partial1 = ng.empty((devC1.shape[0],1), dtype=np.float32)
                                        partial2 = partial1[0:1,0:1]

                                        if ng.min(ng.finite(devC1), partial=partial1, out=partial2).get()[0,0] == 0.0:
                                            print("Error: NaN KCN: (%d,%d,%d) ab: (%f,%f) dtype: %d" %
                                                  (K,C,N, alpha,beta, itemsize))
                                            exit()

                                        diff = ng.max(abs(devC2 - devC1), partial=partial1, out=partial2).get()[0,0]
                                        mean = ng.mean(abs(devC2), partial=partial1, out=partial2).get()[0,0]
                                        pctErr = 100 * diff / mean

                                        if pctErr > maxerr:
                                            print("Error: %.3f%% diff: %.5f mean %.5f op: %s tile: %d KCN: (%d,%d,%d) ab: (%f,%f) dtype: %d" %
                                                  (pctErr, diff, mean, op, tile, K,C,N, alpha,beta, itemsize))
                                            exit()
                                    
                                    except drv.Error as e:
                                        print("op: %s tile: %d KCN: (%d,%d,%d) ab: (%f,%f) dtype: %d" %
예제 #3
0
                                if op[1] == 't': devB1, devB2 = devB1.T, devB2.T

                                for tile in ("128x32","32x128",):
                                    if tile not in implemented[op]:
                                        continue
                                    try: 
                                        ng.dot(devA1, devB1, devC1, alpha=alpha, beta=beta, size=tile)
                                        #context.synchronize()

                                        cublas_dot(devA2, devB2, devC2, alpha=alpha, beta=beta)

                                        partial1 = ng.empty((devC1.shape[0],1), dtype=np.float32)
                                        #partial1 = devPs.share((devC1.shape[0],1), dtype=np.float32)
                                        partial2 = partial1[0:1,0:1]

                                        if ng.min(ng.finite(devC1), partial=partial1, out=partial2).get()[0,0] == 0.0:
                                            print("Error: NaN op: %s tile: %s KCN: (%d,%d,%d) ab: (%f,%f) dtype: %d" %
                                                  (op, tile, K,C,N, alpha,beta, itemsize))
                                            exit()

                                        diff = ng.max(abs(devC2 - devC1), partial=partial1, out=partial2).get()[0,0]
                                        mean = ng.mean(abs(devC2), partial=partial1, out=partial2).get()[0,0]
                                        pctErr = 100 * diff / mean

                                        if pctErr > maxerr:
                                            print("Error: %.3f%% diff: %.5f mean %.5f op: %s tile: %s KCN: (%d,%d,%d) ab: (%f,%f) dtype: %d" %
                                                  (pctErr, diff, mean, op, tile, K,C,N, alpha,beta, itemsize))
                                            print devC1.get()
                                            print devC2.get()
                                            exit()