aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTomáš Jusko2023-09-30 00:05:11 +0200
committerTomáš Jusko2023-09-30 00:05:11 +0200
commit4b585447ce4bcfaef49123ce4630a5a85b3a16e0 (patch)
tree5f9a341c2ab576063df5d35687082971ea37100c
parent9094d16a62de9ca48141f5c447cc5771c7c1a4cd (diff)
downloadpyecsca-4b585447ce4bcfaef49123ce4630a5a85b3a16e0.tar.gz
pyecsca-4b585447ce4bcfaef49123ce4630a5a85b3a16e0.tar.zst
pyecsca-4b585447ce4bcfaef49123ce4630a5a85b3a16e0.zip
fix: Fixed GPU Pearson corr coefficient
-rw-r--r--pyecsca/sca/stacked_traces/correlate.py15
1 files changed, 9 insertions, 6 deletions
diff --git a/pyecsca/sca/stacked_traces/correlate.py b/pyecsca/sca/stacked_traces/correlate.py
index 862e664..bac9f7e 100644
--- a/pyecsca/sca/stacked_traces/correlate.py
+++ b/pyecsca/sca/stacked_traces/correlate.py
@@ -4,7 +4,7 @@ from numba import cuda
from numba.cuda.cudadrv.devicearray import DeviceNDArray
from math import sqrt
from typing import List, Optional, Union
-from .combine import GPUTraceManager
+from .combine import InputType, GPUTraceManager
from .stacked_traces import StackedTraces
from ..trace.trace import CombinedTrace
@@ -28,14 +28,17 @@ def gpu_pearson_corr(intermediate_values: npt.NDArray[np.number],
intermed_sum: np.number = np.sum(intermediate_values)
intermed_sq_sum: np.number = np.sum(np.square(intermediate_values))
+ inputs: List[InputType] = [intermediate_values,
+ np.array([intermed_sum]),
+ np.array([intermed_sq_sum])]
return trace_manager.run(
_gpu_pearson_corr,
- [intermediate_values, [intermed_sum], [intermed_sq_sum]]
+ inputs
)
-@cuda.jit(device=True, cache=True)
+@cuda.jit(cache=True)
def _gpu_pearson_corr(samples: DeviceNDArray,
intermediate_values: DeviceNDArray,
intermed_sum: DeviceNDArray,
@@ -66,8 +69,8 @@ def _gpu_pearson_corr(samples: DeviceNDArray,
samples_sq_sum += samples[row, col] ** 2
product_sum += samples[row, col] * intermediate_values[row]
- numerator = n * product_sum - samples_sum * intermed_sum
- denominator = (sqrt(n * samples_sq_sum - samples_sum ** 2)
- * sqrt(n * intermed_sq_sum[0] - intermed_sum[0] ** 2))
+ numerator = float(n) * product_sum - samples_sum * intermed_sum[0]
+ denominator = (sqrt(float(n) * samples_sq_sum - samples_sum ** 2)
+ * sqrt(float(n) * intermed_sq_sum[0] - intermed_sum[0] ** 2))
result[col] = numerator / denominator