ITADN

Puzzle 12: Problem show errors out while check works fine.

#40Openzabirauf 创建于 2024-09-01
Z
zabiraufcommented
I have the following solution for Puzzle 12 ```python TPB = 8 def sum_spec(a): out = np.zeros((a.shape[0] + TPB - 1) // TPB) for j, i in enumerate(range(0, a.shape[-1], TPB)): out[j] = a[i : i + TPB].sum() return out def sum_test(cuda): def call(out, a, size: int) -> None: cache = cuda.shared.array(TPB, numba.float32) i = cuda.blockIdx.x * cuda.blockDim.x + cuda.threadIdx.x local_i = cuda.threadIdx.x # FILL ME IN (roughly 12 lines) cache[local_i] = a[i] if i < size else 0 cuda.syncthreads() k = 2 while k <= cuda.blockDim.x: if (local_i + 1) % k == 0: prev = local_i - int(k/2) if prev >= 0: cache[local_i] = cache[local_i] + cache[prev] k = k*2 cuda.syncthreads() if local_i == (cuda.blockDim.x-1): out[cuda.blockIdx.x] = cache[local_i] return call ``` the following causes the `problem.show` to error out but `problem.check` works fine. ```python SIZE = 15 out = np.zeros(2) inp = np.arange(SIZE) problem = CudaProblem( "Sum (Full)", sum_test, [inp], out, [SIZE], Coord(2, 1), Coord(TPB, 1), spec=sum_spec, ) problem.show() problem.check() ``` Here is the error it throws ```python --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Cell In[298], line 14 3 inp = np.arange(SIZE) 4 problem = CudaProblem( 5 "Sum (Full)", 6 sum_test, (...) 12 spec=sum_spec, 13 ) ---> 14 problem.show() #Commenting as it was throwing error File ~/Documents/Projects/Opensource/GPU-Puzzles/lib.py:392, in CudaProblem.show(self, sparse) 390 results = self.run_python() 391 self.score(results) --> 392 return draw_results(results, self.name, 393 self.threadsperblock.x, self.threadsperblock.y, sparse) File ~/Documents/Projects/Opensource/GPU-Puzzles/lib.py:280, in draw_results(results, name, tpbx, tpby, sparse) 273 lines = (pos.x == 0 and pos.y == 0) or ( 274 pos.x == (tpbx - 1) 275 and pos.y == (tpby - 1) 276 ) 277 all_tabs = ( 278 a + [c2.refs[i] for i in range(1, c.rounds()) for c2 in c.caches] + [out] 279 ) --> 280 dia = dia + concat( 281 draw_connect(t, dia, loc, color, lines) for t in all_tabs 282 ) 283 height = dia.get_envelope().height 285 # Label block and surround File ~/Documents/Projects/Opensource/GPU-Puzzles/.venv/lib/python3.10/site-packages/chalk/__init__.py:294, in concat(diagrams) 283 def concat(diagrams: Iterable[Diagram]) -> Diagram: 284 """ 285 Concat diagrams atop of each other with atop. 286 (...) 292 293 """ --> 294 return reduce(atop, diagrams, empty()) File ~/Documents/Projects/Opensource/GPU-Puzzles/lib.py:281, in <genexpr>(.0) 273 lines = (pos.x == 0 and pos.y == 0) or ( 274 pos.x == (tpbx - 1) 275 and pos.y == (tpby - 1) 276 ) 277 all_tabs = ( 278 a + [c2.refs[i] for i in range(1, c.rounds()) for c2 in c.caches] + [out] 279 ) 280 dia = dia + concat( --> 281 draw_connect(t, dia, loc, color, lines) for t in all_tabs 282 ) 283 height = dia.get_envelope().height 285 # Label block and surround File ~/Documents/Projects/Opensource/GPU-Puzzles/lib.py:220, in draw_connect(tab, dia, loc2, color, con) 218 def draw_connect(tab, dia, loc2, color, con): 219 return concat( --> 220 [ 221 myconnect(dia, loc2, color, con, (tab.name,) + loc, inp.location) 222 for (loc, val) in tab.incoming 223 for inp in val.inputs 224 ] 225 ) File ~/Documents/Projects/Opensource/GPU-Puzzles/lib.py:223, in <listcomp>(.0) 218 def draw_connect(tab, dia, loc2, color, con): 219 return concat( 220 [ 221 myconnect(dia, loc2, color, con, (tab.name,) + loc, inp.location) 222 for (loc, val) in tab.incoming --> 223 for inp in val.inputs 224 ] 225 ) AttributeError: 'int' object has no attribute 'inputs' ```
0 条评论