code: def test_shader_str():
      """
      Test basic OpAlgoBase operation
      """
  
      shader = """
  #version 450
  layout(set = 0, binding = 0) buffer tensorLhs {float valuesLhs[];};
  layout(set = 0, binding = 1) buffer tensorRhs {float valuesRhs[];};
  layout(set = 0, binding = 2) buffer tensorOutput { float valuesOutput[];};
  layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
  
  void main()
  {
      uint index = gl_GlobalInvocationID.x;
      valuesOutput[index] = valuesLhs[index] * valuesRhs[index];
  }
      """
  
      spirv = compile_source(shader)
  
      mgr = kp.Manager()
  
      tensor_in_a = mgr.tensor([2, 2, 2])
      tensor_in_b = mgr.tensor([1, 2, 3])
      tensor_out = mgr.tensor([0, 0, 0])
  
      params = [tensor_in_a, tensor_in_b, tensor_out]
  
      algo = mgr.algorithm(params, spirv)
  
      (
          mgr.sequence()
          .record(kp.OpTensorSyncDevice(params))
          .record(kp.OpAlgoDispatch(algo))
          .record(kp.OpTensorSyncLocal(params))
          .eval()
      )
  
      assert tensor_out.data().tolist() == [2.0, 4.0, 6.0]
  
file_path: kompute/python/test/test_kompute.py
imports: import os
  import kp
  import numpy
  import logging
  import pyshader
  from .utils import compile_source
label_desc: Use image node_id 2 for calling a global function with example usage: test_shader_str() without return types