Explorar o código

Half memory usage for apply_gate kernel

Adam Kelly %!s(int64=6) %!d(string=hai) anos
pai
achega
e7d4bbfe2f
Modificáronse 1 ficheiros con 6 adicións e 4 borrados
  1. 6 4
      src/backends/opencl/kernel.cl

+ 6 - 4
src/backends/opencl/kernel.cl

@@ -54,8 +54,7 @@ static complex_f cexp(float a) {
  *  C D
  */
 __kernel void apply_gate(
-    __global complex_f *const amplitudes,
-    __global complex_f *amps,
+    __global complex_f *amplitudes,
     uint target,
     complex_f A,
     complex_f B,
@@ -69,10 +68,13 @@ __kernel void apply_gate(
 
     uint const target_bit_val = (((1 << target) & state) > 0) ? 1 : 0;
 
+    complex_f const zero_amp = amplitudes[zero_state];
+    complex_f const one_amp = amplitudes[one_state];
+
     if (target_bit_val == 0)
     {
-        amps[zero_state] = add(mul(A, amplitudes[zero_state]), mul(B, amplitudes[one_state]));
-        amps[one_state] = add(mul(D, amplitudes[one_state]), mul(C, amplitudes[zero_state]));
+        amplitudes[zero_state] = add(mul(A, zero_amp), mul(B, one_amp));
+        amplitudes[one_state] = add(mul(D, one_amp), mul(C, zero_amp));
     }
 }